dedlfix: [MySQL] Jeweilige Zeile mit Button updaten

Beitrag lesen

Hi!

printf('<input type="submit" name="change[%s]" value="Bearbeiten" />', $row->id');
%s erzeugt ein Array, $row->id wird in das Array geschrieben, richtig so?

Nein, %s ist ein Platzhalter für einen String. Alle Parameter von (s)printf() ab dem zweiten werden jeweils anstelle eines der Platzhalter eingefügt. In dem Fall nur das $row->id anstatt des einzigen %s.

An dieser Stelle wird lediglich ein String zusammengesetzt, den der Browser dann als HTML interpretieren kann. Hast du dir im Browser die Quellcodeansicht zu Gemüte geführt und da change[5], change[23], change[42], und so weiter bei den einzelnen Werten der name-Attribute deiner Submit-Buttons gesehen?

Noch später erkennt PHP das [] nach change und legt nicht

$_POST['change'] = 'Bearbeiten';

an sondern

$_POST['change'][23] = 'Bearbeiten';

Wobei anstatt der 23 die tatsächliche ID vom Datensatz steht. Eine Kontrollausgabe mit var_dump($_POST) zeigt, ob das wirklich so ist.

In meinem anderen Beitrag hatte ich schon geschrieben, dass die Textboxen jetzt zwar nach jeweiligem Button+ID geändert werden, allerdings werden nur die Werte eingetragen, die in der zuletzt hinzugefügten Zeile stehen und nicht in der, die man gerade bearbeitet...

Achja, du müsstest die selbe Lösung wie beim Submit-Button nehmen, also die name-Attribute der Input-Felder auch um die Datensatz-ID erweitern. Der Grund ist, dass alle Input-Elemente eines Feldes die gleichen Namen haben und das nächste immer das vorhergehende überschreibt. Die Kontrollausgabe zeigt, die nach der Erweiterung alle Elemente an und nicht nur eins. Durch das reset()/key() vom Submit-Button hast du bereits die ID ermittelt, und mit der kannst du dann die zugehörigen anderen Elemente gezielt ansprechen.

Lo!