hossi: MySQL daten per Formular ändern

Hallo,

ich habe ein Script, mit dem ich Daten in einer MySQl bearbeiten möchte. Das Laden der Daten in die Formularfelder klappt schon mal, nur leider der update-Vorgang nicht :(

Ich habe schon unzählige dinge probiert, nichts hat geholfen. Vielleicht könnt ihr mal über mein Script drüberschauen :)

<?  
$host = "localhost";  
$user = "root";  
$password = "";  
$dbname = "mangel";  
$tabelle = "garant";  
  
$dbverbindung = mysql_connect ($host, $user, $password);  
  
$dbanfrage = "select * from $tabelle";  
$res = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);  
  
while ($ausgabe = mysql_fetch_array ($res))  
{  
echo "<form name='form1' method='post' action='$PHP_SELF'>";  
echo "<input type='text' name='id' value='$ausgabe[id]'>";  
echo "<input type='text' name='handwerker' value='$ausgabe[handwerker]'>";  
echo "<input type='text' name='einheit' value='$ausgabe[einheit]'>";  
echo "<input type='submit' name='submit' value='Ändern'>";  
echo "</form>";  
}  
if ($submit) {  
$update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";  
$updaten = mysql_query($update) or die(mysql_error());  
  
if (!$updaten)  
echo "Fehler aufgetreten!";  
else  
    {  
        echo "Eintrag erfolgreich";  
    }  
  
}  
  
?>

Greetings hossi

  1. Hi,

    if ($submit) {

    Es gibt kein $submit.

    Stelle bitte erstens das error_reporting auf E_ALL und display_errors auf on, damit PHP dich auf solche Fehler hinweisen kann.

    Und dann informiere dich, was register_globals=off bedeutet, und wie man korrekt auf von aussen kommende Parameter zugreift.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hi,

      der kleine Yoda in mir[1] verlangt nach Komplettierung:

      if ($submit) {
      Es gibt kein $submit.

      "Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."

      Cheatah, SCNR

      [1] So groß zu werden, wie habe ich das geschafft bei solcher Nahrung?

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi,

        der kleine Yoda in mir[1] verlangt nach Komplettierung:

        if ($submit) {
        Es gibt kein $submit.

        "Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."

        Cheatah, SCNR

        [1] So groß zu werden, wie habe ich das geschafft bei solcher Nahrung?

        Hi,

        danke das war schon mal ein guter Tip :)
        Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..

          
        <?  
        $host = "localhost";  
        $user = "root";  
        $password = "";  
        $dbname = "mangel";  
        $tabelle = "garant";  
          
        $dbverbindung = mysql_connect ($host, $user, $password);  
          
        $dbanfrage = "select * from $tabelle";  
        $res = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);  
          
        while ($ausgabe = mysql_fetch_array ($res))  
        {  
        echo "<form name='form1' method='post' action='$PHP_SELF'>";  
        echo "<input type='text' name='id' value='$ausgabe[id]'>";  
        echo "<input type='text' name='handwerker' value='$ausgabe[handwerker]'>";  
        echo "<input type='text' name='einheit' value='$ausgabe[einheit]'>";  
        echo "<input type='submit' name='submit' value='Ändern'>";  
        echo "</form>";  
        }  
        if ($_POST[submit]) {  
        $update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";  
        $updaten = mysql_query($update) or die(mysql_error());  
          
        if (!$updaten)  
        echo "Fehler aufgetreten!";  
        else  
            {  
                echo "Eintrag erfolgreich";  
            }  
          
        }  
          
        ?>  
        
        
        1. Hi,

          bitte zitiere sinnvoll, nicht einfach alles.

          if ($_POST[submit]) {

          submit gibt es nicht.

          Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..

          $update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";
          $updaten = mysql_query($update) or die(mysql_error());

          Du updatest ja auch einfach wahllos alle Datensätze.

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          1. if ($_POST[submit]) {

            submit gibt es nicht.

            Ja, darum castet PHP auch automatisch nicht existierende Konstanten zu Strings - dass (und warum) das schlechter Stil ist, weiß die Dokumentation.

            mit einer 0 = NULL überschreibt..

            0 != '' != NULL

            Du updatest ja auch einfach wahllos alle Datensätze.

            Und überschreibst die Felder handwerker, einheit und id vermutlich jeweils mit einem Leerstring. Ich geh aber davon aus, dass nicht in jedem der Felder tatsächlich ein String erwartet wird.

            1. if ($_POST[submit]) {

              submit gibt es nicht.

              Ja, darum castet PHP auch automatisch nicht existierende Konstanten zu Strings - dass (und warum) das schlechter Stil ist, weiß die Dokumentation.

              mit einer 0 = NULL überschreibt..

              0 != '' != NULL

              Du updatest ja auch einfach wahllos alle Datensätze.

              Und überschreibst die Felder handwerker, einheit und id vermutlich jeweils mit einem Leerstring. Ich geh aber davon aus, dass nicht in jedem der Felder tatsächlich ein String erwartet wird.

              Warum gibts denn submit nicht?

                
              echo "<input type='submit' name='submit' value='Ändern'>";  
              
              

              Da heißt mein submit-feld ja auch submit .. ?!

              Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!

              Denn, wenn ich die Daten lade, stehn Sie ja auch im Formular drinnen und wenn sich daran nichts ändert, schreibt er einfach den selben Wert wieder in die DB, oder?!

              1. Warum gibts denn submit nicht?

                Weil ich in deinem code kein

                define('submit', 'foo');

                oder vergleichbares sehe.

                Da heißt mein submit-feld ja auch submit .. ?!

                Ja, da bestreitet keiner.

                Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!

                Ich würde meinen, es wäre vernünftiger nur einen Datensatz upzudaten - und zwar den mit der richtigen ID.

                Denn, wenn ich die Daten lade, stehn Sie ja auch im Formular drinnen und wenn sich daran nichts ändert, schreibt er einfach den selben Wert wieder in die DB, oder?!

                Nein, SQL interessiert sich nicht im geringsten dafür, was PHP treibt.

                Wenn du da DELETE FROM garant notierst, leert das DBMS beinhart diese Tabelle, egal welchen Datensatz du vorher gelesen hast.

                Die logik zu bestimmen, ob der Request durch das Formular sinnvoll war, obliegt dir als Autor des Scripts.

                1. Ich würde meinen, es wäre vernünftiger nur einen Datensatz upzudaten - und zwar den mit der richtigen ID.

                  Gut, dann werde ich versuchen, zuerst eine ID festzulegen die ich bearbeiten möchte und dann den Datensatz zu aktualisieren.

              2. Hi,

                Warum gibts denn submit nicht?

                echo "<input type='submit' name='submit' value='Ändern'>";

                
                > Da heißt mein submit-feld ja auch submit .. ?!  
                  
                nein, es heißt 'submit', nicht submit. Und das liegt nicht am HTML-Code.  
                  
                
                > Ja, ich update alle Datensätze, aber was ist daran falsch, das versteh ich nicht?!  
                  
                Es gibt kein $handwerker. Es gibt kein $einheit. Es gibt kein $id. Es gibt leider wohl auch kein $mitdenken.  
                  
                Cheatah  
                
                -- 
                X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
                X-Will-Answer-Email: No  
                X-Please-Search-Archive-First: Absolutely Yes
                
        2. Hallo,

          "Nein! $_POST es oder $_POST es nicht. Es gibt kein $submit."
          danke das war schon mal ein guter Tip :)

          ja, leider hast du ihnnicht wirkich verstanden, sondern nur mechanisch auf deinen submit-Parameter angewendet. Und das auch noch falsch (der Fehlertoleranz von PHP ist zu verdanken, dass es dennoch wie beabsichtigt funktioniert).

          if ($_POST[submit])

          Die benannte Konstante submit ist nirgends definiert; PHP ist von sich aus so gnädig, stattdessen eine namenlose Stringkonstante mit dem Wert 'submit' anzunehmen. Richtig ist es trotzdem nicht.

          Jetzt ist es leider nur so, dass er mir die erste ID in der DB (Also die 1) mit einer 0 = NULL überschreibt..

          Und das wundert dich?

          $update = "UPDATE $tabelle SET handwerker = '$handwerker', einheit = '$einheit', id = '$id'";

          Die Variablen $handwerker, $einheit, $id existieren ebensowenig wie $submit. Was also trägt PHP hier in den Query-String ein?

          Ciao,
           Martin

          --
          Die letzten Worte der Challenger-Crew:
          Lasst doch mal die Frau ans Steuer!
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. "<del>register_globals</del><ins>security issues</ins> i sense" - frei nach Yoda :p

  3. Hallo, was genau heisst "klappt nicht"? Davon gibt es etwa 221 verschiedene Varianten.

    Und von angemessener Fehlerbehandlung ist nichts in Sicht. :-(

    Ciao, Frank

    1. Hallo, was genau heisst "klappt nicht"? Davon gibt es etwa 221 verschiedene Varianten.

      Und von angemessener Fehlerbehandlung ist nichts in Sicht. :-(

      Ciao, Frank

      Klappt nicht hieß, er übernimmt einfach nicht die Änderungen die ich in einem jeweiligen Formular eingetragen habe in die Datenbank.

      Stand jetzt ist aber, dass er die erste ID in der DB (welche mit 1 beginnt) mit einer 0 = NULL überschreibt.

      1. Stand jetzt ist aber, dass er die erste ID in der DB (welche mit 1 beginnt) mit einer 0 = NULL überschreibt.

        Aus genannten Gründen glaube ich das nicht.

        Aber bitte nicht die Diskussion unnötigerweise zerreissen.

      2. Klappt nicht hieß, er übernimmt einfach nicht die Änderungen die ich in einem jeweiligen Formular eingetragen habe in die Datenbank.

        Selbst dafür gibt es noch genügend "Fehler"-Varianten, aber meine allwissende Glaskugel hat heute keine Lust mehr.

        Wie wär's damit:

        • gewährleiste durch Kontrollausgaben, dass dein Script den entsprechenden Code auch wirklich ausführt (z.b. innerhalb von if($_POST['submit']) ein echo "<h3>hello, here I am</h3>"
        • zwischen-speichere das SQL Statement für das Update in eine variable
        • gib die Variable in einer Kontrollausgabe (echo) aus
        • überzeuge dich von der syntaktischen Korrektheit des SQLs
        • probiere selbiges (Copy & Paste lässt grüssen) z.b. in PHPMyAdmin aus und schau was passiert und überzeue dich von der semantischen Korrektheit
        • behebe die Fehler
        • probiere das ganze nochmal
        • wenn du den Fehler nicht finden kannst, poste folgende Sachen hier
            - Tabellenstruktur
            - (alle) Daten in der Tabelle vor dem Update-Versuch
            - das _genaue_ SQL Statement, welches an die DB geschickt wurde
            - (alle) Daten in der Tabelle nach dem Update-Versuch

        Stand jetzt ist aber, dass er die erste ID in der DB (welche mit 1 beginnt) mit einer 0 = NULL überschreibt.

        Da ist schonmal mindestens ein grober Fehler drin, ID sollte eindeutig und unveränderlich sein, NULL sollte nicht erlaubt sein.

          
        UPDATE garant SET handwerker = 'abc', einheit = 'def', id = ''  
        
        

        tut genau was?

        • gar nichts
        • gibt einen Fehler / Ausnahme
        • setzt alle 100000 Records in der Tabelle auf exakt dieselben Werte 'abc', 'def' und '' (und wenn ja, warum?)

        Ciao, Frank