Comment récupérer les valeurs d'un checkbox multiple?

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Partons d'un simple formulaire constitué de 3 cases à cocher portant le même nom (attribut name) :
<form name="monform" method="post">
choix 1 : <input type="checkbox" name="choix" value="1"><br />
choix 2 : <input type="checkbox" name="choix" value="2"><br />
choix 3 : <input type="checkbox" name="choix" value="3"><br />
<input type="submit" name="go" value="go">
</form>
Pour obtenir la valeur des chexkbox cochées il faut déclarer un tableau en ajoutant simplement une paire de crochet [] au nom des checkboxs. Ainsi, name="choix" devient name="choix[]".
Notre formulaire devient donc :
<form name="monform" method="post">
choix 1 : <input type="checkbox" name="choix[]" value="1"><br />
choix 2 : <input type="checkbox" name="choix[]" value="2"><br />
choix 3 : <input type="checkbox" name="choix[]" value="3"><br />
<input type="submit" name="go" value="go">
</form>
Passons maintenant à la récupération des valeurs des cases cochés.
On teste si le formulaire a été envoyé et si au moins une case a été coché :
<?php
if(isset($_POST['go']) && !empty($_POST['choix'])){
//Ici le reste du code
}
else{
    echo 'Sélectionner un choix!';
}
?>
Si nous sélectionnons toute les cases et que nous effectuons un print_r() de la variable $_POST['choix'] comme ci-dessous ... :
<?php
if(isset($_POST['go']) && !empty($_POST['choix'])){
    echo '<pre>';
    print_r($_POST['choix']);
    echo '</pre>';
}
else{
    echo 'Sélectionner un choix!';
}
?>
... nous obtenons un tableau indexé donnant le résultat suivant :
Array
(
 [0] => 1
 [1] => 2
 [2] => 3
)
A partir de ce tableau, nous pouvons donc récupérer toute les valeurs en utilisant une simple boucle for() :
<?php
if(isset($_POST['go']) && !empty($_POST['choix'])){
	echo '<pre>';
	print_r($_POST['choix']);
	echo '</pre>';
	//on déclare une variable
	$choix ='';
	//on boucle
	for ($i=0;$i<count($_POST['choix']);$i++)
	{
	//on concatène
	$choix .= $_POST['choix'][$i];
	}
	echo $choix;
}
else{
	echo 'Sélectionner un choix!';
}
?>
Le résultat nous donnera donc pour cet exemple "123". Et voila, vous savez maintenant comment récupérer toutes les valeurs de plusieurs checkboxs portant le même nom .
 
Et la vous allez me dire : "C'est bien beau ton truc mais tout est "collé" alors je fais comment pour sortir chaque résultat individuellement si j'enregistre ça en base de données?".
 
Pour résoudre ce petit soucis, nous allons utiliser un séparateur sur la variable $choix :
$choix .= $_POST['choix'][$i];
deviendra donc :
$choix .= $_POST['choix'][$i].'|';
Le résultat nous donnera donc maintenant la valeur 1|2|3|.
Pour obtenir chaque valeur indépendamment, nous allons utiliser la fonction explode() sur le séparateur :
$explore = explode('|',$choix);
Si on effectue un print_r() sur la variable $explore, on obtient le résultat suivant :
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 
)
Reste plus qu'à utiliser une petite boucle foreach() pour extraire chaque valeur :
    foreach($explore as $valeur){
    if(!empty($valeur)){
    echo $valeur.'<br/>';
    }
Voir/déposer un commentaire (0) | Signaler un problème