CHECKBOX ohne Wert mitübergeben

Stefan87

Grünschnabel
Hallo,

verwende Prototype und übergebe mit $('FormBox').serialize() alle Elemente dieses Forms an meine PHP-Datei.

Dort löse ich eine foreach (foreach ( $_REQUEST as $key => $value ) {)-Schleife aus.

In dieser Schleife wird Element für Element in der Datenbank überschrieben.

Mein Problem ist nun, dass Checkboxen nur dann mitübergeben werden, wenn sie CHECKED (= bei mir Value="1") sind. Ansonsten haben sie Value="" und werden auch nicht in der Schleife bearbeitet. Mein Problem dabei ist, dass ich zwar bei CHECKED schaffe, dass es in der Datenbank auch auf 1 gesetzt wird, aber ich kann es nie wieder auf 0 oder LEER bringen.

Das heißt, ich müsste entweder vor der foreach-Schleife alle Checkboxen (Wichtig: Es sollte ohne explizite Angabe des NAME-Attributes möglich sein) überprüfen und gegebenfalls leere Checkboxen auf 0 stellen. Oder es wird noch vor der Übergabe an die PHP-Datei in meiner .js-Datei gemacht.

Aber nur wie? Wie gesagt möchte ich die Checkboxen nicht anhand der Namen überprüfen, da ich zig-Formulare mit der gleichen Routine bearbeite und so unnötiger Quelltext zusammenkommen würde.

Mfg Stefan
 
Hi,

hoffe ich hab Dein Problem richtig verstanden.
Du mußt dir eine Variable setzen, die beim INSERT/UPDATE der Tabelle immer verwendet wird.

PHP:
<?php
    $checked = (isset($_POST['checkbox']) AND $_POST['checkbox'] !="") ? 1 : 0;
    $sql = "UPDATE table SET checkbox = '".$checked."'";
?>

Wenn Checkbox gewählt => kommt 1 in Tabelle
Wenn Checkbox NICHT gewählt => kommt eine 0 in die Tabelle

Gruß
tyg3r
 
Ne, das ist noch nicht das richtige.

Ich habe bereits eine SQL-Zeile, wo in $key der Wert $value eingetragen wird.

und das ganze in einer foreach-Schleife. Mein Problem ist, dass beim Start der Foreach-Schleife, wo das Array in $key => $value getrennt wird, leere Checkboxen ausgeklammert werden bzw. übersprungen.

Das heißt, ich müsste vorher, oder noch besser im JS-Teil, bevor ich es an die PHP-Datei übergebe, alle leeren Checkboxen den Wert "0" geben.

Ich kann, wenn ich explizit eine Checkbox mit dem Namen ansteure, den Wert ändern. Nur sollte das total flexibel sein. Es werden neue Formulare erstellt und ohne große PHP-Änderungen sollten die dann richtig arbeiten. Das die Felder als NAME die gleiche Bezeichnung haben müssen wie das jeweilge Datenbankfeld ist selbstverständlich.

Mfg Stefan
 
Achso, jetzt.

Dann solltest Du dir eben zuvor ein Array anlegen, welches soviele Elemente beinhaltet wie du Checkboxen auf der Seite hast. Als Array-Value könntest Du die Namen der Checkboxen verwenden.

In der Foreach dann nicht das POST-Array sondern eben das von Dir erstellte Vergleichsarray fetchen.

Gruß tyg3r
 
Hallo,

ich stehe jetzt glaub ich total auf der Leitung, aber kannst du mir mal ein Beispiel nennen?

Danke,
Stefan

Edit: bitte bedenke, dass jede Checkbox sich vom Namen her des jeweiligen Eintrages in der Datenbank orientiert. Mich interessiert in der PHP-Routine persönlich der Name nicht.
 
Zuletzt bearbeitet:
Also wir legen ein Array an (verwenden wir auch später zum Checkboxen bauen - value entspricht dem name in DB und HTML checkbox name):
PHP:
$checkboxen = array("cb_1", "cb_2", "cb_3", "cb_4");

Nun fetchen wir dieses Array um zu prüfen, ob ein POST mit dessen Namen gemacht wurde.
String ($insert_cb) für das DB INSERT:
PHP:
$insert_cb = "";

foreach($checkboxen AS $key => $_value){
    if(isset($_POST[$_value]) AND $_POST[$_value]!=""){
        $insert_cb .= $_value." = '1'";
    }
    else{
        $insert_cb .= $_value." = '0'";
    }
    // wenn INSERT Str noch vegrößert werden soll
    $insert_cb .= isset($checkboxen[$key+1]) ? ", " : "";
}

// SQL
INSERT INTO tab $insert_cb

Und für Das HTML kannst Du das Array ebenso verwenden (bleiben sogar nach dem Absenden "gechecked"):
HTML:
foreach($checkboxen AS $_value){
    echo "<input type=\"checkbox\" name=\"".$_value."\" ".((isset($_POST[$_value]) AND $_POST[$_value]!="") ? "checked=\"checked\"" : "")." />";
}

Nicht getestet, könnte was faul sein ;)

/EDIT: es war was faul ^^

Gruß tyg3r
 
Zuletzt bearbeitet:
Ich hätte da nen anderen Vorschlag :-(

Lege zusätzlich zu jeder Checkbox vor Selbiger ein verstecktes Input an mit dem selben Namen wie die Checkbox und dem value "0".

Ergebnis: ist die Checkbox gecheckt, wird der Wert der Checkbox übermittelt, ansonsten "0"
 
Hallo,

danke euch Beiden für die Ideen.

Muss leider die Methode von Sven Mintel nehmen, da ich bei deiner Methode, Tyg3r, ja erst recht wieder die Namen der Checkboxen in meiner PHP-Datei angeben muss. Das will ich unbedingt verhindern.

Das mit dem HIDDEN-Feld ist zwar nicht das Schönste, aber noch akzeptabel.

Ich stelle das Thema mal auf erledigt, denn damit ist mir auf alle Fälle geholfen.

Mfg Stefan
 

Neue Beiträge

Zurück