hande: chechboxes-array in db zuordnen/speichern

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

  1. 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

    --
    >> Dass in eine if Schleife zu packen schafft mein 10 jähriges Patenkind. [...]
    > Mhhh, wenn man if in Schleifen packt, muss man sich auch nicht wundern, wenn die Patenkinder verwöhnte Luder werden. [...]
    [TomIRL und Tom in ?t=64084&m=364291]
    ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}
    1. krasse idee :) , ich probiers aus
      danke

      gruß
      hande