Wanneer een formulier met een aantal aangevinkte checkboxen wordt gepost, hoe krijg je dan de geselecteerde waardes in een array?

Ben net begonnen met PHP, maar hier kom ik even niet uit.

Bij bijv. het volgende script lukt het niet:

<?php
if($_SERVER['REQUEST_METHOD']=="POST"){
$kleur = ($_POST['kleur']);
foreach ($kleur as $key => $value) { echo "$key: $value<br>"; }
}else{

echo("
<form action=\"\" method=\"post\">
<input type=\"checkbox\" name=\"kleur[]\" value=\"blauw\">Blauw
<input type=\"checkbox\" name=\"kleur[]\" value=\"rood\">Rood
<input type=\"checkbox\" name=\"kleur[]\" value=\"geel\">Geel
<input type=\"submit\" value=\"Kies\">
</form>
");
}
?>
<?php
if($_SERVER['REQUEST_METHOD']=="POST"){
$kleur = ($_POST['kleur']);
$kleuren = array();
foreach ($kleur as $key => $value) {
$kleuren[] = $value;
}
}else{

echo("
<form action=\"\" method=\"post\">
<input type=\"checkbox\" name=\"kleur[]\" value=\"blauw\">Blauw
<input type=\"checkbox\" name=\"kleur[]\" value=\"rood\">Rood
<input type=\"checkbox\" name=\"kleur[]\" value=\"geel\">Geel
<input type=\"submit\" value=\"Kies\">
</form>
");
}
?>
Nu staan de kleuren in de array $kleuren. JE was al goed op weg.
kleine tip, het is misschien handig om een label bij checkboxes te gebruiken, voorbeeld:
<input type="checkbox" name="kleur" id="blauw" value="blauw"><label for="blauw"> Blauw</label>
Maakt het net even wat gebruikersvriendelijker, dan kun je ook op de tekst klikken om de checkbox aan te vinken.
Nog een tip: zorg er via je CSS voor dat de muis verandert als je er overheen zweeft. Dan is het meteen duidelijk voor de user dat hij op een label kan klikken om de checkbox aan/uit te vinken.

label        {cursor: pointer;}
Je kan labels toch ook zo gebruiken:
<label><input type="checkbox" name="kleur"value="blauw">Blauw</label>
Misschien dat het wel werkt Richard, maar zoals Arjan Schuurman het aangeeft is het eigenlijk volgens de standaarden. Probeer altijd volgens de standaarden en regeltjes te werken.

[edit]
Overigens vind ik het wel goede aanvullende tips van beide PHPhulpers. Vind dat dat ook wel eens gezegd mag worden! :)
[/edit]
Robert_Deiman schreef op 13.12.2007 11:26
Misschien dat het wel werkt Richard, maar zoals Arjan Schuurman het aangeeft is het eigenlijk volgens de standaarden. Probeer altijd volgens de standaarden en regeltjes te werken.

[edit]
Overigens vind ik het wel goede aanvullende tips van beide PHPhulpers. Vind dat dat ook wel eens gezegd mag worden! :)
[/edit]


Het is volgens de standaarden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
	<title>Test</title>
</head>
<body>
<p><label><input type="checkbox" name="kleur" value="blauw" />Blauw</label></p>
</body>
</html>


Geeft gewoon valid aan hoor (http://validator.w3.org/check)
Is blijkbaar wel valid inderdaad. Nadeel is dat je je label niet meer onafhankelijk van je input kunt stylen. Elke style die je op je label toepast wordt ook toegepast op je input, en dat is vaak niet wat je wilt...
Je kan je label toch een class meegeven?
edit: ja, daar heb je gelijk in...

Maar volgens mij dwalen we af en had er hier iemand een probleem met zn php code.
Bedankt, Robert.

Ik krijg toch nog een foutmelding "Warning: Invalid argument supplied for foreach()". Dat betekent dan toch dat er geen array $kleuren bestaat?

Hoe wordt deze array toegewezen als er alleen $kleuren = array(); staat?
Je bedoelt in deze code?
<?php
foreach ($kleur as $key => $value) {
$kleuren[] = $value;
}
?>
Dat betekent dus dat $kleur geen array is. Controleer dat eens...

Reageren