chechboxes-array in db zuordnen/speichern
hande
- php
hallo,
folgendes prob.: ich hab 20 checkboxes, die ich, vor eintrag in die db in eine variable packe:
..type="checkbox" name="attribut[]" value="wert_1">
..type="checkbox" name="attribut[]" value="wert_2">
..
..
usw.
$attribute = $_POST['attribut'];
$attribute = implode(',',$attribute);
dann:
INSERT INTO (..., attribute) VALUE (...., '$attribute');
ok, die attribute stehen nun als string in der datenbank..
---
nun beim wieder auslesen, sollen die checkboxen auf "checked" stehen, wenn wert_1 == "wert_1" (so ähnlich)
also dacht ich mir ich mach ein explode(",",attribute):
$query = "SELECT * FROM table_name WHERE .....";
$data= mysql_fetch_row(mysql_query($query));
...und $data[6] hat nun den attribut string:
$exp_attributes = explode(",",$data[6]);
$wert_1= $exp_attributes[0];
$wert_2= $exp_attributes[1];
..
das ist natürlich blödsinn, mußte ich feststellen :(
uhmmmm..aber wie jetzt weiter ?? es müßte eine if-abfrage kommen
bei den checkboxes ungefähr so:
<? if($wert_1 == "wert_1") echo "checked"?>
<? if($wert_2 == "wert_2") echo "checked"?>
aber ich weiß jetzt irgendwie nicht mehr weiter....
vielleicht wäre es besser schon beim speichern in der db die attribute in passende spalten zu packen.. aber wie ??
danke für einen tip
gruß
hande
Hallo hande,
folgendes prob.: ich hab 20 checkboxes, die ich, vor eintrag in die db in eine variable packe:
..type="checkbox" name="attribut[]" value="wert_1">
..type="checkbox" name="attribut[]" value="wert_2">
Das würde ich schon anders anfangen:
for ($i = 0; $i < 20; $i++) {
echo '... value="'.pow(2,$i).'">';
}
oder wie auch immer Du Deine Checkboxen erzeugst.
Damit erhälst Du dann eine Reihe von 2hochX.
[...]
$attribute = $_POST['attribut'];
$attribute = implode(',',$attribute);dann:
INSERT INTO (..., attribute) VALUE (...., '$attribute');
Die übermittelten Werte brauchst Du nun nur addieren, und in Deine Spalte schreiben. Falls also 2,8 und 16 übertragen werden (Checkbox 2, 4 und 5 angeklickt), ergibt das 26.
[...]
also dacht ich mir ich mach ein explode(",",attribute):
$query = "SELECT * FROM table_name WHERE .....";
$data= mysql_fetch_row(mysql_query($query));...und $data[6] hat nun den attribut string:
$exp_attributes = explode(",",$data[6]);
$wert_1= $exp_attributes[0];
$wert_2= $exp_attributes[1];
..
das ist natürlich blödsinn, mußte ich feststellen :(
Klar, weil so in $wert_2 durchaus auch 'wert_3' stehen kann, da die nicht angeklickten Checkboxen beim Ansenden des Formulars nicht übermittelt werden.
uhmmmm..aber wie jetzt weiter ?? es müßte eine if-abfrage kommen
bei den checkboxes ungefähr so:
<? if($wert_1 == "wert_1") echo "checked"?>
<? if($wert_2 == "wert_2") echo "checked"?>aber ich weiß jetzt irgendwie nicht mehr weiter....
vielleicht wäre es besser schon beim speichern in der db die attribute in passende spalten zu packen.. aber wie ??
s.o.
Die Abfrage ob eine Checkbox markiert werden soll geht mit einer bitweise Undverknüpfung der entsprechenden 2er-Potenz der Checkbox mit dem gespeicherten Wert.
$i = 4; // 5te Checkbox
echo $data[6] & pow(2,$i) ? 'checked' : '';
/* Wenn das bitweise UND ungleich Null ist, dann wird die Checkbox markiert */
HTH :)
Gruß Alex
krasse idee :) , ich probiers aus
danke
gruß
hande