SGD-Daniel: [PHP/MYSQL] Mehrere Datensätze gleichzeitig updaten

Hallo,

ich habe 2 Dateien. Die erste Datei ist ein ganz normales Formular, wo ich aus der Datenbank Daten (aus einer Tabelle 18 Datensätze) auslesen lasse und sie in <input> Value ausgeben lasse, so dass ich diese Daten bearbeiten kann. <form> action geht auf die 2.Datei. Nun klicke ich den  Submit-Button.

In der 2.Datei mache ich als erstes folgendes: "$var=$_POST[var];". "var" war in der 1.Datei ein Inputname und ist in MySQL ein "INT" und erhöht sich automatisch um 1. Danach werden wie in der ersten Datei die Datenbankdaten abgefragt. Dann komme ich zu dem UPDATE-Befehl, der wie folgt lautet:

UPDATE user SET pkt='".$_POST["pkt"]."' WHERE var = '".$_POST["var"]."'

Auch hier war "pkt" ein Inputname der 1.Datei. Da ich in der ersten Datei 18 Datensätze hatte, jeweils verschiedene Punkte eingetragen habe, will ich eben mit dem Update-Befehl diese Daten in der Datenbank updaten lassen.

Dies funktioniert aber leider nicht. Test's haben ergeben, dass die Variable $var kein Wert übergibt, außer den 18.Datensatz.

Was kann ich machen, damit ich alle 18 Daten updaten kann?

  1. echo $begrüßung;

    In der 2.Datei mache ich als erstes folgendes: "$var=$_POST[var];".

    Warum machst du das? Da scheint mir überflüssig.

    UPDATE user SET pkt='".$_POST["pkt"]."' WHERE var = '".$_POST["var"]."'

    Zumal du ja hier sowieso direkt auf die $_POST-Elemente zugreifst. *)

    Test's haben ergeben, dass die Variable $var kein Wert übergibt, außer den 18.Datensatz.
    Was kann ich machen, damit ich alle 18 Daten updaten kann?

    Gib deinen Input-Feldern nicht immer den gleichen Namen, denn sonst überschreibt PHP immer wieder den Eintrag in $_GET/$_POST. Eckige Klammern [] erzeugen ein Array-Element statt eines einfachen Strings. Man kann auch was in die Klammern einfügen, das dann als Wert des Keys genommen wird. Ansonsten wird fortlaufend durchnummeriert.

    *) Zusatzfrage: Was passiert, wenn der Inhalt von $_POST["var"] ein ' drin hat?

    echo "$verabschiedung $name";

    1. Was soll ich nun machen? Habe es auf GET geändert, nur da passiert gar nichts.

      1. echo $begrüßung;

        Was soll ich nun machen? Habe es auf GET geändert, nur da passiert gar nichts.

        Warum das denn?

        Da du nicht gezeigt hast, wie dein Formular aussieht, konnte ich aus deiner Beschreibung nur vermuten, dass alle Input-Elemente den gleichen Wert im name-Attribut haben. Wenn das so ist, gib dort unterschiedliche Werte an.

        Beispiel 1:

        <input ... name="foo_1" value="bar1">
          <input ... name="foo_2" value="bar2">

        Ergebnis: $_POST['foo_1'] = 'bar1'; $_POST['foo_2'] = 'bar2';

        Beispiel 2:

        <input ... name="foo[]" value="bar1">
          <input ... name="foo[]" value="bar2">

        Ergebnis: $_POST['foo'] = array(0 => 'bar1', 1 => 'bar2'); // Keys fortlaufend nummeriert

        Beispiel 3:

        <input ... name="foo[23]" value="bar1">
          <input ... name="foo[42]" value="bar2">

        Ergebnis: $_POST['foo'] = array(23 => 'bar1', 42 => 'bar2');

        echo "$verabschiedung $name";

  2. Hallo !

    In der 2.Datei mache ich als erstes folgendes: "$var=$_POST[var];".

    Abgesehen mal davon dass dies ein Syntaxfehler ist, da var ein Schluesselwort von PHP ist - was machst Du dann mit der Variablen $var ?

    Im weiteren scheinst Du die ja gar nicht mehr zu verwenden.

    "var" war in der 1.Datei ein Inputname und ist in MySQL ein "INT" und erhöht sich automatisch um 1.

    In der Datenbank ( auto_increment ). Aber im Formular gibt's nur EINEN gueltigen POST-Paramter mit dem Schluessel "var", naemlich den letzten der so heisst. ;-)

    UPDATE user SET pkt='".$_POST["pkt"]."' WHERE var = '".$_POST["var"]."'

    Du fuehrst 18 Updates auf dem 18.Datensatz aus !
    In $_POST["var"] steht der Wert des letzten Feldes das so heisst. Mach's doch mal mit nem GET, dann kannst Du's besser sehen.

    Dies funktioniert aber leider nicht. Test's haben ergeben, dass die Variable $var kein Wert übergibt, außer den 18.Datensatz.

    Aus bezeichnetem Grunde.

    Gruss

    Holger

    1. Hallo,

      $var = $_POST[var]; habe ich mal entfernt. War unnütz.

      Habe gerade alles auf GET geändert. Da funktioniert es gar nicht!

      Was nun?

      1. Hallo,

        $var = $_POST[var]; habe ich mal entfernt.

        Wieso "entfernt" - stand das so im Quelltext ????
        Das ist ein Sytaxfehler.

        War unnütz.

        Das alleine reicht auch nicht - da mueesten noch verschiedene Name fuer die inputs her !  :-)

        Lass Dir doch in einer Schleife Feldnamen von PHP generieren. Die gleiche Schleife kannst Du dann spaeter fuer die Derefenzierung des POST-Datenblocks benutzen.

        Datei 1:

        //...

        echo "<form action='Datei1.php' method='post'>\n";

        for( $i = 1; $i <= 18; $i++ )
        {
            //...
         echo "\t<input type='text' name='var$i'/>\n";
         //...
        }
        echo "\t<input type='submit'/>\n";
        echo "</form>\n";

        Datei 2:

        for( $j = 1; $j <= 18; $j++ )
        {
            //...
         $your-sql_statement. $_POST["var".$j] . "'";
            //...
        }

        Habe gerade alles auf GET geändert. Da funktioniert es gar nicht!

        Das war nur dazu gedacht, dass Du die uebergebenen Variablen in der Eingabeziele sehen kannst.

        "?var=foo&var=bar"

        so wird das wahrscheinlch bei Dir aussehen.

        Was nun?

        :-) Keep cool - das kriegen iwr schon hin !

        Gruss

        Holger

        1. steiche

          echo "<form action='Datei1.php' method='post'>\n";

          setze
          echo "<form action='Datei2.php' method='post'>\n";

          Sorry

          Holger