Checkboxen gecheckt houden als ze in array zitten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Donovan -

Donovan -

23/02/2019 14:01:19
Quote Anchor link
hoi!

Ik heb een 10 tal checkboxen welke ik in een array heb opgeslagen. Dat lukt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    $kleuren = array();
      if (!empty($_POST['kleuren']))
      {

        foreach ($_POST['kleuren'] as $Kleur)
        {

            $kleuren[] = $Kleur;
        }
     }

      echo "<pre> <p>Kleuren ".print_r($kleuren,true)."</p> </pre>";
}

?>


En bij elke checkbox staat vervolgens

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php if (!(empty($_POST['Kleur'])) && (in_array($_POST['Kleur'], $kleuren))) echo "checked='checked'"; ?>


Alleen ik zie dat ze in de array zitten, maar ze blijven niet gecheckt. Hoe kan dat?
 
PHP hulp

PHP hulp

29/03/2020 03:00:33
 
Thomas van den Heuvel

Thomas van den Heuvel

23/02/2019 14:13:26
Quote Anchor link
> (in_array($_POST['Kleur'], $kleuren))
Het lijkt mij geen goede programmeergewoonte om direct na het POSTen weer het formulier te tonen.
is het nu trouwens $_POST['kleuren'] of $_POST['Kleur']?

Anyhow, dit is niet alle code voor de checkboxen.

Wellicht doe je er ook verstandig aan om de kleuren een volgnummer/index te geven? Dan kun je op deze key controleren, dat werkt doorgaans beter.
 
Donovan -

Donovan -

23/02/2019 14:17:44
Quote Anchor link
Thomas van den Heuvel op 23/02/2019 14:13:26:
> (in_array($_POST['Kleur'], $kleuren))
Het lijkt mij geen goede programmeergewoonte om direct na het POSTen weer het formulier te tonen.
is het nu trouwens $_POST['kleuren'] of $_POST['Kleur']?

Anyhow, dit is niet alle code voor de checkboxen.

Wellicht doe je er ook verstandig aan om de kleuren een volgnummer/index te geven? Dan kun je op deze key controleren, dat werkt doorgaans beter.


Het was kleuren, dus die sowieso aangepast. Alleen ik vind het gek dat als ik zeg als kleuren bestaat en zit in array dan echo check tekst, maar waarom werkt dat niet dan?
Gewijzigd op 23/02/2019 14:19:52 door Donovan -
 
Thomas van den Heuvel

Thomas van den Heuvel

23/02/2019 14:41:37
Quote Anchor link
Maar $_POST['kleuren'] is zelf een array, wat controleer je dan precies met in_array()?

Je moet nagaan of een element voorkomt in een array, niet of een array voorkomt in een array lijkt mij?

Hoe ziet dit array het formulier er precies uit?
Gewijzigd op 23/02/2019 15:02:02 door Thomas van den Heuvel
 
Donovan -

Donovan -

23/02/2019 16:00:05
Quote Anchor link
Dus ik zou dus alle Post van de in_array moeten wijzigen naar de waardes van de checkboxes?
Gebruik ik nu $kleuren[] niet als array?
 
Thomas van den Heuvel

Thomas van den Heuvel

23/02/2019 23:06:05
Quote Anchor link
Ik denk dat het handig is om de (toegestane) waarden op één plek te definiëren middels een array, en dit dan te gebruiken om:
- de formulierelementen op te bouwen bij:
* het toevoegen van informatie (leeg formulier)
* het wijzigen van informatie (vooringevuld formulier)
- geldige/toegestane waarde te valideren

Dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// all the color options
$colors = array(
    1 => 'red',
    2 => 'orange',
    3 => 'yellow',
    4 => 'green',
    5 => 'blue',
    6 => 'indigo',
    7 => 'violet',
);


// verified values, selected in a previous form
$selected = array(1, 2, 5);

foreach ($colors as $k => $v) {
    $id = 'colors_'.$k;
    $checked = (in_array($k, $selected) ? ' checked="checked"' : '');
    ?>
<input type="checkbox" name="colors[<?php echo $k; ?>]" id="<?php echo $id; ?>" value="1"<?php echo $checked; ?>>
    <label for="<?php echo $id; ?>"><?php echo $v; ?></label><br><?php
}
?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/02/2019 19:42:44
Quote Anchor link
Checkboxen komen alleen in de POST array voor als ze daadwerkelijk ge-checked zijn door de gebruiker. Je zult dus moeten controleren of ze "bestaan" of niet. Hier een werkend voorbeeldje

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// array met drie checkboxen initialiseren
$optieCheckboxen = array(
    1 => array(
        'label' => 'Dit is optie 1',
        'checked' => false,
    ),

    2 => array(
        'label' => 'Dit is optie 2',
        'checked' => false,
    ),

    5 => array(
        'label' => 'Dit is optie 3',
        'checked' => true,
    ),
);


// indien het formulier verstuurd is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    foreach($optieCheckboxen as $id => $checkbox)
    {

        // checkboxen komen enkel in de POST array als ze "aan" staan. Als ze dus niet aanwezig zijn betekent het dat de checkbox niet ge-checked was
        $optieCheckboxen[$id]['checked'] = false;
        
        // nu zetten we de checkbox weer op aan als ze wel in de POST array aanwezig zijn. de waarde is verder niet belangrijk. Het is aan of uit!
        if(isset($_POST['options'][$id])) {
            $optieCheckboxen[$id]['checked'] = true;
        }
    }

    
    // zo ziet de post array er uit...
    echo '<pre>' . print_r($_POST, TRUE) . '</pre>';
}

?>

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>een titel</title>
    </head>
    <body>
        <form action="" method="post">
            <?php foreach ($optieCheckboxen as $id => $checkbox) : ?>
            <div class="form-row">
                <label>
                    <input type="checkbox" name="options[<?php echo $id; ?>]"<?php if($checkbox['checked']) echo ' checked'; ?> />
                    <?php echo $checkbox['label']; ?>
                </label>
            </div>
            <?php endforeach; ?>
            <button type="submit">Verzenden</button>
        </form>
    </body>
</html>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.