PHP Array per checkbox übergeben?

KeinProblem

Ensign
Registriert
Okt. 2013
Beiträge
191
Hi,

ich habe in Wordpress / PHP ein Formular mit mehreren Zeilen, welches dynamisch erstellt wird. Hinter jeder Zeile ist eine Checkbox. Wenn Einträge markiert werden, schickt der submit-Button die an meine Funktion, die die Daten löschen soll. Das funktioniert auch wunderbar, der array mit den selektierten Boxen wird sauber übergeben.

Nun möchte ich weitere Filteroptionen in die Löschfunktion einbauen. Das heißt, die Checkbox soll nicht nur den festgelegten Value übergeben, sondern einen array mit verschiedenen Werten, der dann in der Löschfunktion weiter verarbeitet wird.

Das klappt aber nicht. Also hab ich den array per serialize() in einen String umgewandelt.

In der Konsole sieht auch alles super aus, der serialisierte Array steht sauber als Value der Checkbox drin.

Wenn ich jetzt den submit-Button benutze, kriege ich auch einen array übermittelt, die Anzahl der Einträge passt auch zu der Anzahl der ausgewählten checkboxes. Allerdings ist jeder Eintrag dieses Array nur "on", nicht der serialisierte array, eine Weiterverarbeitung ist so ja nicht möglich.

Wo liegt mein Denkfehler? Werden die Values normal übergeben, klappt es ja, aber wenn die values serialisierte arrays sind nicht mehr...

Danke für jede Idee, vermutlich ist es total einfach :)
 
Schwierig ohne den Codeausschnitt 😊
Könnte ggf. etwas mit Anführungszeichen dir einen Strich durch die Rechnung machen?

Was passiert, wenn du das mal außerhalb von WordPress Stumpf testest und dir die Werte mit print_r(); mal ausgeben lässt?
Ist es dann auch falsch und alles mit „on“ betitelt?
Hast du irgendwo im Code das „on“ verwendet, damit man nachvollziehen kann, wo es ggf. her kommt?

Sonst poste bitte mal den Code-Ausschnitt, dann kann ich das mal testen was genau du da gebaut hast ☺️
 
KeinProblem schrieb:
Wo liegt mein Denkfehler? Werden die Values normal übergeben, klappt es ja, aber wenn die values serialisierte arrays sind nicht mehr...
Dein Denkfehler bezieht sich darauf, dass man in Checkboxen nur den Wert 0 oder 1 übergeben kann. Das macht ja technisch gesehen auch Sinn... mehr als checked oder nicht gechecked gibt es nicht. Was du machen kannst:

PHP:
<input type="checkbox" name="eine_dimension[]">Eine Dimension ohne ID
<input type="checkbox" name="eine_dimension[8]">Eine Dimension mit ID

<input type="checkbox" name="value[8][delete]">Löschen?
<input type="checkbox" name="value[8][update]">Bearbeiten?
<input type="checkbox" name="value[8][insert]">Hinzufügen?
<input type="checkbox" name="value[8][...serializedValue...]">Serialized value

<?php
// in PHP
print_r($_REQUEST["eine_dimension"]);

foreach($_REQUEST["value"] as $id => $actionSet) {
    if($actionSet["delete"]) {
        // löschen
    }
    if($actionSet["update"]) {
        // ändern
    }   
    
    if($actionSet["insert"]) {
        // Hinzufügen
        
    }   
    
    // beachten: Der Wert ist nur vorhanden, wenn die Checkbox gesetzt wurde, sonst ist das Array leer
    end($actionSet);
    $serializedValue = key($actionSet);
    $unserializedValue = unserialize($serializedValue);
}
 
Zurück
Oben