Datenbankeintrag ändern (update) mit PHP

Bawla

Mitglied
Als PHP-Anfänger mache ich gerade eine Übungsrunde durch.

Ich habe bei MyAdmin eine Datenbank "appelmann" mit der Tabelle "bestellung".
Felder: Index (auto), Name, Strasse, Ort, Menge, Sorte
Ich möchte nun eingetragene Daten ändern und hab auch schon eine Lösung die aber nicht bis zum Schluß funktioniert - sprich es ändert sich nichts.

Mit Sicherheit hängt die Sache an einem Anfängerfehler :mad:
Wäre klasse wenn ein PHP-Profi ihn im drüberfliegen :) finden würde - denk es fehlt nicht mehr viel.

Gruß Bawla

aendern_auswahl.php:
PHP:
<html>
<body>
Sie sehen hier die Kundentabelle der Firma Appelmann:<p>
<form action = "aendern_bestaetigen.php" method = "post">
<?php
$server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);

mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table";
$query = mysql_query($sql);

echo "<table border=1>";
echo "<tr><th> Index </th><th> Name </th><th> Strasse </th><th> Ort </th> <th> Menge </th> <th> Sorte </th></tr>";
while ($Zeile = mysql_fetch_array($query)) 

{
echo "<tr>";
?>
<td><input type="radio" name="auswahl" value="$pn"></td>
<?php
echo "<td>".$Zeile["Index"]."</td>";
echo "<td>".$Zeile["Name"]."</td>";
echo "<td>".$Zeile["Strasse"]."</td>";
echo "<td>".$Zeile["Ort"]."</td>";
echo "<td>".$Zeile["Menge"]."</td>";
echo "<td>".$Zeile["Sorte"]."</td>"; 
echo "</tr>"; 
}
echo "</table>";

   mysql_close($verbindung);
?>

<p>
   <b><i>Wählen Sie aus, welcher Datensatz geändert werden soll:</b></i><p>
   <input type="submit" value="Datensatz ändern">
</body>
</html>


aendern_bestaetigen.php:
PHP:
<html>
<body>

<?php
$server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);

mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table";
$sql .= " Index = $Auswahl";

$query = mysql_query($sql);

    $altName = mysql_result($query, 0, "Name");
   $altStrasse = mysql_result($query, 0, "Strasse");
   $altOrt = mysql_result($query, 0, "Ort");
   $altMenge = mysql_result($query, 0, "Menge");
    $altSorte = mysql_result($query, 0, "Sorte");
    
       echo "Führen Sie die Änderungen durch,<p>";
   echo "betätigen Sie anschließend den Button<p>";

   echo "<form action = 'aendern.php' ";
   echo " method = 'post'>";

   echo "<input name='neuName' value='$altName'>";
   echo " Name<p>";
   echo "<input name='neuStrasse' value='$altStrasse'> ";
   echo " Strasse<p>";
   echo "<input name='neuOrt' value='$altOrt'>";
   echo " Ort<p>";
   echo "<input name='neuMenge' value='$altMenge'>";
   echo " Menge<p>";
   echo "<input name='neuSorte' value='$altSorte'>";
   echo " Sorte<p>";
   echo "<input type='hidden' name='oripn' ";
   echo " value='$Auswahl'>";

   echo "<input type='submit' ";
   echo " value='Änderungen in DB speichern'><p>";
   echo "<input type='reset'>";
   echo "</form>";
 
   mysql_close($verbindung);
?>

<p>
   <input type="submit" value="Datensatz anzeigen">
</body>
</html>

aendern.php:
PHP:
<?php
   $server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);

mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table";

   
  $sql = "update bestellung set Name = '$neuName',";
  $sql = "update bestellung set Strasse = '$neuStrasse',";
  $sql = "update bestellung set Ort = '$neuOrt',";
  $sql = "update bestellung set Menge = '$neuSorte',";
  $sql = "update bestellung set Sorte = '$neuSorte',";

 

   $query = mysql_query($sql);


 
   mysql_close($verbindung);
?>
Zurück zur <a href="aendern_auswahl.php">Auswahl</a>

</body>
</html>
 
Der erste Fehler den ich erkennen kann ist in aendern.php. Du weißt der Variable $update immer einen neuen Wert zu. Aber auch wenn du es richtig machen würdest wäre der Query ziemlich wirr (oder überhaupt nicht lauffähig). Schau dir am besten noch einmal die Syntax für UPDATE an.
Noch zwei Sachen:
Setz die Tabelle in Backticks (`tabelle`)
Immer einen möglichen Fehler abfangen. Stichwort OR die(mysql_error())

Ich habs mir jetzt nicht so genau angeschaut aber ich denke mal dass es jetzt funktioniert.
 
ich komme hier einfach nicht mehr weiter ... :confused:

bei der datei "aendern_bestaetigen.php" müssten dann eigentlich die Daten drin stehen ... stattdessen kommt die Fehlermeldung

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in C:\WAMP\wamp\www\Abfrage\aendern_bestaetigen.php on line 17
usw... bis line 21

liegt der Fehler in diesem Bereich?
PHP:
$altName = mysql_result($query, 0, "Name");
   $altStrasse = mysql_result($query, 0, "Strasse");
   $altOrt = mysql_result($query, 0, "Ort");
   $altMenge = mysql_result($query, 0, "Menge");
    $altSorte = mysql_result($query, 0, "Sorte");
An der Stelle sollten doch die Daten des ausgewählten Feldes aufgelistet werden?

Wäre für jeden Tipp dankbar.

Gruß
 
Das bedeutet das der Query einen Fehler hatte. Ersetze also, wie ich schon angedeutet hatte :rolleyes:,
PHP:
$query = mysql_query($sql);
durch
PHP:
$query = mysql_query($sql) OR die(mysql_error());
und poste die Fehlermeldung.

Edit: mysql_result ist nicht performant. Informiere dich über mysql_fetch_assoc.

Edit Nr2: Informiere dich weiters über SQL Injections.
 
Zuletzt bearbeitet:
PHP:
$sql = "update bestellung set Name = '$neuName',";
  $sql = "update bestellung set Strasse = '$neuStrasse',";
  $sql = "update bestellung set Ort = '$neuOrt',";
  $sql = "update bestellung set Menge = '$neuSorte',";
  $sql = "update bestellung set Sorte = '$neuSorte',";
Macht keinen Sinn, so wie nosilume bereits gesagt hat, ich denke, es soll so aussehen:

PHP:
$sql = "update bestellung set Name = '$neuName',";
$sql .= "Strasse = '$neuStrasse',";
$sql .= "Ort = '$neuOrt',";
$sql .= "Menge = '$neuSorte',";
$sql .= "Sorte = '$neuSorte',";
Allerdings fehlt dort eindeutig noch eine WHERE Bedingung.

PHP:
$sql = "SELECT * FROM $table";
$sql .= " Index = $Auswahl";
Macht auch keinen Sinn, da fehlt ebenfalls eine Bedingung.
Siehe auch hier: quakenet:#php Tutorial - Die WHERE Bedingung.
 
nach der Datei aendern_bestaetigen.php wird folgende Fehlermeldung angezeigt:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=' at line 1

Ich habe einige Fehler erkannt und verbessert - aber es hakt noch:

aendern_auswahl.php:
PHP:
<html>
<body>
Sie sehen hier die Kundentabelle der Firma Appelmann:<p>
<form action = "aendern_bestaetigen.php" method = "post">
<?php
$server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);

mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table";
$query = mysql_query($sql);

echo "<table border=1>";
echo "<tr><th> Auswahl </th><th> Index </th><th> Name </th><th> Strasse </th><th> Ort </th> <th> Menge </th> <th> Sorte </th></tr>";
while ($Zeile = mysql_fetch_array($query)) 

{
echo "<tr>";
?>
<td><input type="radio" name="Auswahl" ></td>
<?php

echo "<td>".$Zeile["Index"]."</td>";
echo "<td>".$Zeile["Name"]."</td>";
echo "<td>".$Zeile["Strasse"]."</td>";
echo "<td>".$Zeile["Ort"]."</td>";
echo "<td>".$Zeile["Menge"]."</td>";
echo "<td>".$Zeile["Sorte"]."</td>"; 
echo "</tr>"; 
}
echo "</table>";



   mysql_close($verbindung);
?>

<p>
   <b><i>Wählen Sie aus, welcher Datensatz geändert werden soll:</b></i><p>
   <input type="submit" value="Datensatz ändern">
</body>
</html>

aendern_bestaetigen.php:
PHP:
<html>
<body>
<?php
$server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);
  
mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table WHERE";
$sql .= "Index = $Auswahl";


$query = mysql_query($sql) OR die(mysql_error()); 
   
    $altName = mysql_result($query, 0, "Name");
   $altStrasse = mysql_result($query, 0, "Strasse");
   $altOrt = mysql_result($query, 0, "Ort");
   $altMenge = mysql_result($query, 0, "Menge");
    $altSorte = mysql_result($query, 0, "Sorte");
    
  
   echo "Führen Sie die Änderungen durch,<p>";
   echo "betätigen Sie anschließend den Button<p>";

   echo "<form action = 'aendern.php' ";
   echo " method = 'post'>";

   echo "<input name='neuName' value='$altName'>";
   echo " Name<p>";
   echo "<input name='neuStrasse' value='$altStrasse'> ";
   echo " Strasse<p>";
   echo "<input name='neuOrt' value='$altOrt'>";
   echo " Ort<p>";
   echo "<input name='neuMenge' value='$altMenge'>";
   echo " Menge<p>";
   echo "<input name='neuSorte' value='$altSorte'>";
   echo " Sorte<p>";
   echo "<input type='hidden' name='oriIndex'";
   echo " value='$Auswahl'>";

   echo "<input type='submit' ";
   echo " value='Änderungen in DB speichern'><p>";
   echo "<input type='reset'>";
   echo "</form>";

   mysql_close($verbindung);
?>

<p>
   <input type="submit" value="Datensatz anzeigen">
</body>
</html>


aendern.php:
PHP:
<?php
   $server = "localhost"; $user = "root"; $pass = "";
$database = "appelmann"; $table = "bestellung";
$verbindung = @mysql_connect($server, $user, $pass);

mysql_select_db($database, $verbindung)
or die ("Fehler beim Zugriff auf die Datenbank $database!");

$sql = "SELECT * FROM $table";
$sql .= " Index = $Auswahl";  

   
 $sql = "update bestellung set Name = '$neuName',";
   $sql .= "Strasse = '$neuStrasse',";
   $sql .= "Ort = '$neuOrt',";
  $sql .= "Menge = '$neuMenge',";
  $sql .= "Sorte = '$neuSorte'";
   $sql .= "where Index = $oriIndex";
   

  
  
  $query = mysql_query($sql);

  mysql_close($verbindung);
?>
Zurück zur <a href="aendern_auswahl.php">Auswahl</a>

</body>
</html>
 
Hallo,

in deiner aendern_bestaetigen.php hast du beim Konkatinieren des SQL-Statements ein Leerzeichen vergessen:

PHP:
$sql = "SELECT * FROM $table WHERE";
$sql .= "Index = $Auswahl";

Richtig wäre:

PHP:
$sql = "SELECT * FROM $table WHERE";
$sql .= " `Index` = $Auswahl";

Markus
 
Zuletzt bearbeitet:
Hallo Markus,
vielen Dank für die freundliche Hilfe... leider wird immer noch die gleich Fehlermeldung angezeigt. :confused:
 
Hallo,

ok.... was mir noch auffällt, hatte mich schon etwas gewundert:

Du verwendest "index" als Spaltenname in deiner Abfrage- dann musst du es quoten `index`, weil es ein reserviertes Wort ist. Besser wäre es allerdings, den Namen der Spalte in der Datenbank zu ändern.

Desweiteren fehlt im aendern.php noch die WHERE-Klausel im SQL-Statement.

Ansonsten: Steht immer etwas in $auswahl ? Wenn nicht, kann dein SQL-Statement (neben SQL-Injections) auch ungültig werden.

Markus
 
Zuletzt bearbeitet:
habe jetzt Index in ID umbenannt - leider kommt nach Auswahl des zu ändernden Datenbankeintrages immer noch diese Fehlermeldung.
 
Zurück