Checkbox => checked/none checked individuell erzeugen.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Checkbox => checked/none checked individuell erzeugen.

    Hallo, ich finde keine Lösung für mein Problem. Vllt ist es auch schon zu spätz..

    In der Datenbank gibt es ein Feld dort können die Werte von 0 bis 5 hintereinander mit komma getrennt stehen. also z.b. allow => 0,1,2,3 oder allow => 1,3,5

    Jetzt will ich, dass wenn einer der werte (allow) mit denen einer forschleife übereinstimmt, dass die checkbox checked anzeigt wird, und wenn der wert nicht drin vorkommt, dass die checkbox unchecked angezeigt wird.

    Mein lösungsversuch sah so aus:

    Quellcode

    1. <?
    2. $allow =$datenbankabfrage['allow'];
    3. $array = explode(",", $allow);
    4. for($i=0;$i<=count($array);$i++){
    5. if($array[$i]==0){
    6. echo "<input type=\"checkbox\" class=\"inputtext\" name=\"allow_contact1\" checked>";
    7. }else{ echo "<input type=\"checkbox\" class=\"inputtext\" name=\"allow_contact1\">"; }
    8. if($array[$i]==1){
    9. echo "<input type=\"checkbox\" class=\"inputtext\" name=\"allow_contact2\" checked>";
    10. }else{ echo "<input type=\"checkbox\" class=\"inputtext\" name=\"allow_contact2\">"; }
    11. //usw...
    12. }
    13. ?>
    Alles anzeigen


    Klappt ja soweit so gut..
    Nur nehmen wir an, $allow=="0,1,2,3,4";
    Dann tritt bei der if abfrage ja 4 mal bei jeder if abfrage der else fall ein.. Weil 4 mal $i nicht 0 bzw. 1,2,3 oder 4 sein wird..

    Ich hoffe ihr versteht was ich damit meine, ich find das gerade iwie was schwer logisch als text zu verfassen :-/

    Danke mal wieder im Vorraus



    EDIT:// Oder ich vereinfache das Bsp mal..


    Quellcode

    1. <?php
    2. $allow ="0,1,2,3,4,5";
    3. $array = explode(",", $allow);
    4. for($i=0; $i<count($array); $i++) {
    5. ?>
    6. //nr0
    7. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='0'){ echo "checked";}?> >
    8. //nr1
    9. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='1'){ echo "checked";}?> >
    10. //nr2
    11. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='2'){ echo "checked";}?> >
    12. //nr3
    13. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='3'){ echo "checked";}?> >
    14. //nr4
    15. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='4'){ echo "checked";}?> >
    16. //nr5
    17. <input type="checkbox" name="personal" value="checkbox" <? if($array[$i]=='5'){ echo "checked";}?> >
    18. <?
    19. }
    20. ?>
    21. Funktioniert auch super. Nur läuft die forschleife ja jetzt 6 mal durch. Das heißt. nr0-nr5 werden einmal korrekt angezeigt, und noch 5 mal unchecked. aber diese 5 stück will ich ja gar nicht haben. die sind sinnlos.
    22. Ist ja nur weil die forschleife 5 mal durchläuft.
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snowflake ()

  • So ich mach jetzt am besten mal ein doppelpost, damit es nicht zu unübersichtlich wird.

    Ich habs jetzt so gelöst..Aber das ist ja extrem aufwendig mit den if abfragen. Gibt es dafür eine simplere lösung?

    Quellcode

    1. <?php
    2. $allow ="0,1,2,3,4,5";
    3. $array = explode(",", $allow);
    4. for($i=0; $i<count($array); $i++) {
    5. if($i<1){
    6. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='0'){echo "checked"; } echo ">";
    7. }
    8. if($i<2 && $i > 0){
    9. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='1'){echo "checked"; } echo ">";
    10. }
    11. if($i<3 && $i > 1){
    12. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='2'){echo "checked"; } echo ">";
    13. }
    14. if($i<4 && $i > 2){
    15. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='3'){echo "checked"; } echo ">";
    16. }
    17. if($i<5 && $i > 3){
    18. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='4'){echo "checked"; } echo ">";
    19. }
    20. if($i<6 && $i > 4){
    21. echo "<input type=\"checkbox\" name=\"personal\" value=\"checkbox\""; if($array[$i]=='5'){echo "checked"; } echo ">";
    22. }
    23. }
    24. ?>
    Alles anzeigen
  • Wenn ich es richtig verstanden hab, ist das doch ganz einfach:

    //Edit: Doch falsch verstanden, muss ich erst noch mal dran ^^
    //Edit#2: So endlich gelöst ^^

    Quellcode

    1. $allow = '0,1,2,4,5';
    2. $array = explode(',', $allow);
    3. $values = array_values($array);
    4. for ($i=0; $i<6; $i++) {
    5. echo '<input type="checkbox" class="inputtext" name="allow_contact'.($i+1).'"';
    6. if (in_array($i, $values)) {
    7. echo ' checked';
    8. }
    9. echo '>'.PHP_EOL;
    10. }
    Alles anzeigen
    MfG dynambee

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von dynambee ()

  • Dumdidum.. Du hast doch ahnung dynambee ^^ :P Bevor ich wieder ein 50zeilen code habe. ^^

    Ich hab ja nachher
    • $_POST['allow_contact1']
    • $_POST['allow_contact2']
    • $_POST['allow_contact3']
    • $_POST['allow_contact4']
    • $_POST['allow_contact5']


    Wie würdest du das ganze am besten nachher lösen, um in die datenbank reinzuschreiben.

    Aussehen soll es ja nachher so:
    Nehmen wir an, allow_contact1,3 und 5 sind checked(on).
    Dann soll das ganze so in die datenbank geschrieben werden $variablenname=1,3,5;.... feld 2 und 4 interessiert mich in dem moment gar nicht weil sie ja unchecked(off) waren.

    Aber wie checke ich am einfachsten, ob allow_contact[1-5] checked war und wie verbinde ich die werte dann hitereinander mit einem komma? Ô.ô


    Ich hab wieder nur ne total umständliche variante dafür mit vielen if abfragen ^^
    Die sieht so aus *schäm* :D

    Quellcode

    1. if($_POST['allow_contact1']=="on"){
    2. $allow_c="0,";
    3. }if($_POST['allow_contact2']=="on"){
    4. $allow_c.="1,";
    5. }if($_POST['allow_contact3']=="on"){
    6. $allow_c.="2,";
    7. }
    8. ..usw


    Das Problem hier bei ist, dass allow_contact1 den wert 0 bekommen muss. genauso wie allow_contact2 den wert 1 immer bekommen muss. usw.
    Ansonsten könnte ich ja mit foreach arbeiten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snowflake ()

  • Habs dir mal dokumentiert:

    Quellcode

    1. <?php
    2. $checked = array();
    3. /**
    4. * Wiederhole 6 Mal um alle generierten Checkboxen zu prüfen
    5. */
    6. for ($i=0; $i<6; $i++) {
    7. /**
    8. * Wenn eine Checkbox geklickt wurde, ergibt die Überprüfung den Wert 1 und
    9. * die "wahre" ID (0 <= $i <= 5) wird an das Array $checked übergeben.
    10. */
    11. if (isset($_POST['allow_contact'.($i+1)])) {
    12. $checked[] = $i;
    13. }
    14. }
    15. /**
    16. * Die ID's der geklickten Checkboxen sind in $checked gespeichert und werden mit Hilfe
    17. * der Funktion implode() in einen String umgewandelt. Alle Array-Elemente werden mit
    18. * Kommatrennung verbunden.
    19. */
    20. $var2db = implode(',', $checked);
    21. ?>
    Alles anzeigen
    MfG dynambee