Interessante Entdeckung

F.o.G.

Erfahrenes Mitglied
Hi, ich habe heute was interessantes entdeckt, und da das bisher in keinem Buch dokumentiert ist, poste ich es einfach mal rein.

Also angenommen wir haben eine Tabelle von Daten ausgegeben und wollen die Möglichkeit geben, einzelne Werte davon upzudaten. Dann müsste man (HTML sei dank) in jeder Zeile ein neues Formular erstellen und am Ende der Zeile immer ein Submit Button setzen. Sieht unschön aus und verbraucht Platz.

treeForm.gif


Wie könnte man das ganze in einem Formular machen?
Stellen wir uns vor, wir haben einen Rubrikenbaum ausgegeben, und wollen INPUT - Text Felder zur Verfügung stellen, mit denen man die Namen der neuen Unterkategorien anlegen kann, danach soll alles mit einem Submit in die DB geschrieben werden. Jedem INPUT - Text Feld muss also irgendwie die ID der Mutterkategorie übergeben werden.

Bei vielen Einträgen denkt man ja als erstes an Array's.

-> <input type="text" name="subCat[]" value="">

Was ich nun herausgefunden habe ist, dass man innerhalb der [] Klammern auch einen Schlüssel setzen darf, quasi so:

-> <input type="text" name="subCat[<?=$id;?>]" value="">

Auf der folgenden Seite hat man dann das Array $subCat mit dem angegebenen Schlüssel - Werte Paar.

Leider erzeugt ja dann jede Zeile einen Array Eintrag. Man muss also die herausfiltern, wo im Text Feld kein Wert eigegeben wurde:

PHP:
$subCat2 = $subCat;
unset($subCat);
reset($subCat2);
while(list($k, $v) = each($subCat2)) {
   if(!empty($v)) {
      $subCat[$k] = $v;
   }
}

das wärs. Jetzt könnte man das ganze in die DB updaten. Und das mach ich jetzt.

Falls ihr euch durch diesen klug******erischen Post belästigt fühlt, dann ättsch.... ich dachte das könnte jemand mal gebrauchen.

Ciao, F.o.G.
 
-

Wenn du denkst, dass die Informationen für andere Leute mal wichtig sein könnten, dann mach daraus doch ein Tutorial. Hier wird der Thread nur untergehen.
 
hmm, ja. Ich denke das werd ich mal machen. Aber für ein Tutorial ist das doch ein bisschen zu wenig oder?

Vielleicht kann ich das gleich in Verbindung mit dem Sortierverfahren posten.

Ciao, F.o.G.
 
Naja, ist ja eigentlich eine normale Schlussfolgerung. Das Ganze funktioniert lediglich, da PHP die Parameter von Post- und Getdaten als Variablen registriert (solange register_globals aktiviert ist). Somit wird ein Parametername mit eckigen Klammern als Array definiert. Ebenso kann dann auch ein assoziativer Name übergeben werden.

Interessant ist, ob das auch noch geht wenn register_globals deaktiviert ist ... ?!
 
hmm,

klar geht das , musst nur das Array richtig einlesen bevor du es verwendest denn
PHP:
echo $HTTP_POST_VARS[read[1]];
gibt eine Error allerdings geht einfach :
PHP:
<?php
$bla = $HTTP_POST_VARS[read];
echo $bla[1];

?>
Ich benutz solche dinger schon lange, das ist sehr nützlich wenn man mit einer Schleife ein Formular mit beliebigvielen Checkboxen erzeugt.
 
das sind so die geheimen Kniffe, die durch probieren usw herausgefunden werden müssen.

Klar, wenn man logisch denkt, dann hätte man auch früher darauf kommen können, aber ich habe 3 PHP Bücher wo nicht ein Hinweis darauf steht, dass man den aus Formularen generierten Array's auch Schlüssel zuweisen kann.

Wenn man nicht weiß, dass so etwas möglich ist, fragt man auch nicht nach.

Dadurch sind für mich jetzt viele Möglichkeiten neu eröffnet worden, da ich dadurch zum Beispiel beim Rechte Management meiner User nich immer erst in die Detail Ansicht jedes einzelnen Uses's muss, sondern alles bequem in einer Tabelle für JEDEN User gleichzeitig einstellen kann :)

ICH LIEBE PHP.

Ciao, F.o.G.
 
Original geschrieben von evoc
Interessant ist, ob das auch noch geht wenn register_globals deaktiviert ist ... ?!

Das muss, denn in meiner Umgebung zieh ich mir die Variablen aus $_POST[]. Demzufolge sind die Daten auch ohne register_globals verfügbar.

Quasi so: $subCatBox = $_POST[subCat];

[After Post]Hehe, ist ja das gleiche Beispiel wie bei JoelH[/After Post]

Ciao, F.o.G.
 
Zuletzt bearbeitet:
hmm,

das mti den Checkboxen hab ich irgendwo mal in einem Script gesehen, in einem Buch hab ich das auch noch nicht gelesen.
 
Zurück