Ik heb een lijst met checkboxen in een formulier, welke gegenereerd worden uit de database, en dat werkt.
Wanneer ik op zoeken klik in het formulier, dan worden alle checkboxen die ik aangevinkt had, als parameter in de url geplaatst.
De pagina ververst en plotseling zijn alle checkbox aangevinkt, zelfs degene die ik niet had aangevinkt.

Dit is de code die ik momenteel gebruik:


<?php
public static function custom_check_box($property=array(),$data=array(),$selected) 
    { 
        $chek_box = '<div class="upme-multi-select">'; 

        $values = $_GET['user_sports']; 

        $checked=''; 
        $chek_box2=''; 
        $chekValue=''; 

        if(is_array($property)) 
        { 
            foreach($property as $key=>$value) 
            {             
                $chek_box2 .=' '.$key.'="'.$value.'"'; 
            }     
        } 

        foreach ($data as $option2) { 
            $option2 = upme_stripslashes_deep(trim($option2)); 
         
            foreach ($values as $key => $value) { 

                if(trim($value) == trim($option2)) { 

                    $checked = ' checked="checked"'; 
                     
                } 
                 
            } 

        } 
         
        foreach ($data as $option) { 
            $option = upme_stripslashes_deep(trim($option)); 
             
            $chek_box .= '<input id="' . $option . '" '. $chek_box2 . ' type="checkbox" value="' . $option . '" '.$checked; 

            $chek_box .= '/><label data-toggle="tooltip" title="' . $option . '" for="' . $option . '" class="upme-checkbox">' . $option . '</label>'; 
        } 

        $chek_box .= '</div>'; 

        return $chek_box; 
    }
?>


Ik doe volgens mij iets niet goed met de meerdere foreach, maar zie niet wat.
- hoe ziet de uiteindelijke HTML voor de checkboxen er uit?
- hoe ziet de URL er uit?
- de checkboxen hebben in ieder geval geen name-attribuut noch array-haken die aangeven dat het gelijknamige/gelijksoortige checkboxen betreft...
- tijdens het genereren van de HTML (tweede foreach loop) is $checked mogelijk altijd gelijk aan ' checked="checked"' dus in dat opzicht is het niet zo verwonderlijk dat alles is aangevinkt... als er ten minste één checkbox aangevinkt was verandert $checked permanent naar deze waarde

Als je deze drie foreach-loops nu eens combineert tot één loop?

NB: wat doet de functie upme_stripslashes_deep()? Dit klinkt nogal dodgy...
NB #2: de functie custom_check_box is alles behalve generiek omdat deze een hardcoded $_GET parameter bevat; als je deze nu eens als argument aan de functie meegeeft, en ook de waarden die geselecteerd zouden moeten zijn voert aan de functie, dan kun je buiten deze functie/methode nog besluiten wat voor methode (GET, POST) je gebruikt of dat deze informatie (welke checkboxen geselecteerd zijn) mogelijk uit een database komt ofzo.
Dit is hoe de html eruit ziet van de checkboxen (sorry lange lijst).


<div class="upme-multi-select">
    <input id="Aangepast sporten" class="css-checkbox" name="user_sports[]" type="checkbox" value="Aangepast sporten" checked="checked">
    <label data-toggle="tooltip" title="" for="Aangepast sporten" class="upme-checkbox" data-original-title="Aangepast sporten">Aangepast sporten</label>
    <input id="Aangepast sporten (auditieve beperking)" class="css-checkbox" name="user_sports[]" type="checkbox" value="Aangepast sporten (auditieve beperking)" checked="checked">
    <label data-toggle="tooltip" title="" for="Aangepast sporten (auditieve beperking)" class="upme-checkbox" data-original-title="Aangepast sporten (auditieve beperking)">Aangepast sporten (auditieve beperking)</label>
    <input id="Aangepast sporten (fysieke beperking)" class="css-checkbox" name="user_sports[]" type="checkbox" value="Aangepast sporten (fysieke beperking)" checked="checked">
    <label data-toggle="tooltip" title="" for="Aangepast sporten (fysieke beperking)" class="upme-checkbox" data-original-title="Aangepast sporten (fysieke beperking)">Aangepast sporten (fysieke beperking)</label>
    <input id="Aangepast sporten (verstandelijke beperking)" class="css-checkbox" name="user_sports[]" type="checkbox" value="Aangepast sporten (verstandelijke beperking)" checked="checked">
    <label data-toggle="tooltip" title="" for="Aangepast sporten (verstandelijke beperking)" class="upme-checkbox" data-original-title="Aangepast sporten (verstandelijke beperking)">Aangepast sporten (verstandelijke beperking)</label>
    <input id="Aangepast sporten (visuele beperking)" class="css-checkbox" name="user_sports[]" type="checkbox" value="Aangepast sporten (visuele beperking)" checked="checked">
    <label data-toggle="tooltip" title="" for="Aangepast sporten (visuele beperking)" class="upme-checkbox" data-original-title="Aangepast sporten (visuele beperking)">Aangepast sporten (visuele beperking)</label>
    etc.....
</div>


De url ziet er als volgt uit:
domein.nl/?user_sports%5B%5D=Aangepast+sporten

Zoals je ziet, volgens de url zou alleen de eerst checkbox aangevinkt moeten zijn, die heeft dezelfde waarde.
"mogelijk" verbetert de leesbaarheid van het topic als je de code tussen zgn code-tags zet

[c o d e] en [/ c o d e] (maar dan zonder de spaties)

---
verder denk ik dat
<?php
if(trim($value) == trim($option2)) {

$checked = ' checked="checked"';

}
?>

uitgebreid moet worden tot

<?php
if(trim($value) == trim($option2)) {
$checked = ' checked="checked"';
}
else {
$checked = '';
}
?>


[size=xsmall]Toevoeging op 21/07/2016 13:40:46:[/size]

want wat als je alleen de derde checkbox aanvinkt? Zijn dan de eerste 2 open?

[size=xsmall]Toevoeging op 21/07/2016 13:53:25:[/size]

je code is wat onleesbaar, zo zonder opmaak, maar het lijkt erop dat je eerst alle checkboxen doorloopt om te kijken of er gecheckt moet worden

en daarna nog een keer om ze op het scherm te zetten. Dat loopt fout, omdat je dan niet per checkbox onthouden hebt of dié checkbox gevinkt moet worden.
Ik heb er even opmaak omheen gezet.

Nu omdat die lege $checked = ''; else erbij is gezet, is niks aangevinkt zodra de pagina herlaad.

Ik had al geprobeerd alle foreach in 1 te zetten, maar toen kreeg ik dezelfde resultaat, alles aangevinkt.

Is hier een oplossing voor?
zorg dat de laatste checkbox aangevinkt is, en het zal resulteren in een lijst met alle checkboxen aangevinkt :-)



[size=xsmall]Toevoeging op 21/07/2016 15:52:57:[/size]

regel 37:

<?php
$checked = in_array($option, $_GET['user_sports']) ? ' checked="checked" ' : '';
?>


Dat blok van regel 12 / 33 kan weg.
het stuk waarin je $chek_box2 aanmaakt, moet je ook binnen de lus in de buurt van regel 37 zetten.

[size=xsmall]Toevoeging op 21/07/2016 15:56:00:[/size]

en ik zou de id van de checkbox niet afhankelijk maken van de value.

Stel dat de value dubbel voorkomt: een dubbele id mag niet in de htmlcode.

of stel dat een value een spatie zou bevatten: dat kan ook tot problemen leiden. (niet "stel", dat is zelfs zo)
Wow, was het zo simpel, en ik maar moeilijk doen.

Ik heb trouwens het blok van die $chek_box2 aan laten staan en dat werkt. Hoeft niet tussen die ene foreach.

Bedankt

Reageren