Checkboxen gecheckt houden als ze in array zitten
Ik heb een 10 tal checkboxen welke ik in een array heb opgeslagen. Dat lukt.
Code (php)
En bij elke checkbox staat vervolgens
Code (php)
Alleen ik zie dat ze in de array zitten, maar ze blijven niet gecheckt. Hoe kan dat?
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.
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 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 -
in_array()?
Je moet nagaan of een element voorkomt in een array, niet of een array voorkomt in een array lijkt mij?
Hoe zietdit array het formulier er precies uit?
Maar $_POST['kleuren'] is zelf een array, wat controleer je dan precies met Je moet nagaan of een element voorkomt in een array, niet of een array voorkomt in een array lijkt mij?
Hoe ziet
Gewijzigd op 23/02/2019 15:02:02 door Thomas van den Heuvel
Gebruik ik nu $kleuren[] niet als array?
- 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
}
?>
// 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
}
?>
Code (php)
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
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>
// 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>