[PHP] Reihe von Selectlisten auswerten



  • Ich arbeite gerade an einer Art Benutzerverwaltung. Aus einer Datenbanktabelle werden die ganzen Benutzer ausgelesen und auf einer Seite aufgelistet. Pro Benutzer gibt es ein Select-Feld, indem der Benutzerlevel geändert werden kann und eine Checkboy zum Löschen. Nachdem Ändern der Felder soll das ganze an ein PHP-Skript gesandt werden und dies soll die DB aktualisieren. Zuerst habe ich versucht, ähnlich wie bei den Checkboxen, die Auswahllisten als Array zu übergeben:

    <select size="1" name="level[' . $row["user_id"] . ']">
    <option value="1"> Benutzer</option>
    <option value="2"> Moderator</option>
    <option value="3"> Administrator</option>
    </select>
    

    Leider funktioniert das nicht, anscheinend ist dieses Übergabeverfahren nur bei den Checkboxen möglich. Wie könnte ich es sonst realisieren ?

    Bin für Hilfe sehr dankbar.



  • Du könntest einfach direkt sowas wie 'name="level_'.$row["user_id"].'"' verwenden und dann über dynamische Variablen gehen. Bei Arrays kannst du zumindest soviel ich weiß keine Key-Namen selber vergeben (bin mir aber nicht ganz sicher)



  • Gute Idee, ich denke es ist machbar die Listen durchzunumerieren und dann die Anzahl zu übergeben. Bloß wie komm ich dann an die Variablen ran, mit einer Zahlschleife und dann müsste ich die Variable dynmaisch zusammensetzen, kann mich erinnern da gab es in PHP eine Möglichkeit. Hat jemand nen Tip ?



  • Den Name einfach wie oben geschrieben - daruaf zugreifen kannst du dann so:

    $name = 'level_'.$row['user_id'];
    $value = $$name;
    


  • flenders schrieb:

    Du könntest einfach direkt sowas wie 'name="level_'.$row["user_id"].'"' verwenden und dann über dynamische Variablen gehen. Bei Arrays kannst du zumindest soviel ich weiß keine Key-Namen selber vergeben (bin mir aber nicht ganz sicher)

    doch.

    <.. name="level[33]" ..>
    

    geht wunderbar und ist auch besser als variable variablen herzunehmen ( $$variable )
    zugegriffen werden kann darueber dann ganz einfach ueber $_POST['level[33]') oder im fall register_globals on mit $level['33']



  • Stimmt, funktioniert wirklich. Hab dummerweise versucht die Array über $_REQUEST[] aufzurufen 🙄



  • OK - gut zu wissen. Allerding verwunderlich, warum es mit $_REQUEST[] nicht geht. 😕



  • Bei meinem alten Provider hat es mit $_REQUEST problemlos funktioniert.



  • Vor allem, wenn es mit $_POST geht, dann sollte es doch eigentlich auch mit $_REQUEST keine Probleme geben 😕



  • Hm, leider hab ich schon wieder ein Problem, was in die ähnliche Richtung geht.
    Diesmal sind es aber Textfelder.

    Ich habe also ein Formular mit mehreren Textfeldern, das ganze sieht dann so aus:

    <input type="Text" name="config[name]" value="wert" ...>
    <input type="Text" name="config[name]" value="wert" ...>
    <input type="Text" name="config[name]" value="wert" ...>
    ...
    

    Soweit so gut, nun kann der Benutzer den Wert der Textfelder verändern und dann das Formular abschicken, so dass die Änderungen in der MySQL-Tabelle gespeichert werden.

    foreach($config as $k => $v)
    {
    echo($k . ": " . $v);
    mysql_query("UPDATE config SET config_value='" . $v . "' WHERE config_name = '" . $k . "'");
    }
    

    Leider werden die Änderungen nicht ausgeführt, da der Wert sich nicht verändert hat. Also $v hat immer noch den alten Wert, obwohl ich im Formular den Wert verändert habe.

    Weiß jemand Rat ? Danke schonmal, Gruß Michamab.



  • Michamab schrieb:

    <input type="Text" name="config[name]" value="wert" ...>
    <input type="Text" name="config[name]" value="wert" ...>
    <input type="Text" name="config[name]" value="wert" ...>
    ...
    

    Wieso haben alle den selben Namen 😕

    Michamab schrieb:

    Soweit so gut, nun kann der Benutzer den Wert der Textfelder verändern und dann das Formular abschicken, so dass die Änderungen in der MySQL-Tabelle gespeichert werden.

    Hört sich so an, als ob die Änderungen richtig in die DB übernommen werden 🙄



  • Wieso haben alle den selben Namen

    Nein, die haben natürlich nicht den selben Namen, ich wollte damit nur andeuten, dass die Werte alle aus der selben Tabelle der DB stammen. Die Table hat 2 Spalten, einmal config_name und dann config_value.

    In Wirklichkeit sieht das dann eher so aus:

    <input type="Text" name="config[max_upload_size]" value="4000" ...>
    <input type="Text" name="config[page_name]" value="Tolle Webseite" ...>
    

    Hört sich so an, als ob die Änderungen richtig in die DB übernommen werden

    Nene, wie in dem Codeschnipsel angedeutet, lass ich mir die Werte alle vorher ausgeben, bevor ich sie in die Datenbank eintragen. Dabei stelle ich fest, egal ob ich den Wert der Textboxen verändere oder nicht, der Wert verändert sich sich.

    Sagen wir mal ich habe bloß ein Feld:

    <input type="Text" name="config[page_name]" value="Tolle Webseite">
    

    Nun verändere ich den Wert in "Meine Tolle Webseite" und schicke das Formular ab, ausgegeben wird aber schlußendlich dann doch wieder page_name: Tolle Webseite.

    Ich hoffe das Problem ist nun verständlich.



  • Oh mein Gott, ich bin so blöd 🙄
    Genialerweise heißt meine globale Konfigurationsarray auch config[] und überschreibt somit immer die Daten aus dem Formular. Gut, trotzdem danke für die Mühe mir zu helfen.


Anmelden zum Antworten