MySQL - Mehrere Datensätze gleichzeitg bearbeiten
Onkel Schnitzel
- php
Nabend,
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). Dann habe ich mein Formular, wo ich zu jedem Spieler die neuen Daten eingeben kann. Die schicke ich jetzt ab versuche so, sie in die Datenbank zu bekommen:
$sql = "UPDATE
spielerstatistik
SET
Spiele = '".$spiele."',
Tore = '".$tore."'
WHERE
Name = '".$name."'";
Leider wird immer nur ein Datensatz bearbeitet. Wie bekomme ich mit einem Sendebutton alle Daten abgeschickt?
Schöne Grüße,
Onkel Schnitzel
Hallo,
Leider wird immer nur ein Datensatz bearbeitet. Wie bekomme ich mit einem Sendebutton alle Daten abgeschickt?
ich werde aus Deinem Posting nicht recht schlau. Welches Problem hast Du nun?
[ ] Wie werden Daten an ein serverseitiges Skript übertragen
[ ] Wie erstellt man mehrere UPDATE-Statements
[ ] Ein anderes Problem, das nicht ersichtlich ist
Freundliche Grüße
Vinzenz
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
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.
Ja, und wir haben sogar ein Zwillingspaar in der Mannschaft- daran hatte ich gar nicht gedacht. Ich wollt mir die ID sparen. Warum, weiß ich eigentlich auch nicht so genau.
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.
Ja, eigentlich logisch.
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.
Das hört sich sehr gut an. Danke für die Hilfe!
Schöne Grüße,
Onkel Schnitzel