Sven Rautenberg: MySQL - Mehrere Datensätze gleichzeitg bearbeiten

Beitrag lesen

Moin!

ich bin gerade dabei eine Bearbeitungsscript für eine Spielerdatenbank zu schreiben. Ums mal einfach zu machen; ich lese zu jedem Spieler den Namen aus ($name), die Einsätze ($spiele) und die Tore ($tore).

Mir fehlt da noch die Spieler-ID in der Datenbank, die auch auszulesen wäre. Denn eine Zuordnung der Daten nur über den Namen ist datenbanktechnisch Selbstmord.

Denk nur mal dran: "Es gibt nur ein' Rudi Völler", aber zwei Altintops - und von den Jarolims gibts sogar drei (Vater und Bruder in Prag, David Jarolim beim HSV) im Fußballgeschäft.

Damit es da nicht unfreiwillig zu Verwechslungen kommt, braucht jeder Spieler einfach eine generierte ID. Die muß garnicht zwingend dem Menschen gezeigt werden, aber für die Bearbeitung ist sie enorm wichtig.

Dann habe ich mein Formular, wo ich zu jedem Spieler die neuen Daten eingeben kann.

Alle Spieler bzw. die zu bearbeitenden in einem Formular zu haben, mit der Spieler-ID als Unterscheidungsmerkmal, ist eine echte Erleichterung dafür.

Die schicke ich jetzt ab

Wie genau sieht das Formular aus?

versuche so, sie in die Datenbank zu bekommen:

$sql = "UPDATE
                 spielerstatistik
            SET
                Spiele = '".$spiele."',
                Tore = '".$tore."'
            WHERE
             Name = '".$name."'";

Wie erwähnt: Wenn zwei Spieler den gleichen Namen haben, überschreibst du unabsichtlich zwei Datensätze. Mit der ID als WHERE-Kriterium wird dir das nicht passieren, denn die ist definitiv eindeutig. Und die bleibt auch bei Namensänderungen (Heirat, ...) bestehen und ändert sich nicht.

Leider wird immer nur ein Datensatz bearbeitet. Wie bekomme ich mit einem Sendebutton alle Daten abgeschickt?

Wenn du genau EIN Formular hast, werden dir auch genau ALLE darin enthaltenen Felder gesendet. Aber wenn du diese Felder alle identisch benannt hast (alle Spiele-Felder heißen <input name="spiele">), dann kann PHP diese nicht auseinanderhalten, sondern legt jedes der nacheinander im Datenstrom eintreffenden Felder immer wieder in die gleiche Variable.

Besser ist es, die Formularfelder mit PHP-Arraynamen zu bezeichnen. Und da die Spieler-ID ja existieren wird, eignet sie sich perfekt für diesen Zweck:
<input name="spiele[ID]"> ist ein guter Name, die ID wird dann für jeden Spieler zu einer anderen Zahl.

In PHP landen diese Informationen dann in $_POST oder $_GET (je nach method-Attribut, POST wäre zu empfehlen), und können mit $_POST['spiele'][ID] (für ID wieder die entsprechende Spieler-ID-Zahl denken) abgefragt werden. Bzw. da ja nicht bekannt ist, welche IDs gesendet werden, wird man einfach eine foreach-Schleife erstellen, die $_POST['spiele'] ausliest und dabei alle Array-Schlüssel der zweiten Dimension ermittelt.

Das DB-Update innerhalb der Schleife wird dann je Spieler einmal ausgeführt.

- Sven Rautenberg

--
My sssignature, my preciousssss!