Général

Les PCRE

Les POSIX

Pratique

Linux

Spécial php

Les billets de fred

Les cases à cocher, comment faire ?

Chacun d'entre-vous connait ces petites cases carrées que l'on trouve dans les formulaires.

Mais si chacun les connait, vous êtes peu nombreux, du moins chez les débutants à les appréhender correctement.
Surtout lorsqu'elles sont plusieurs et qu'elles ont un "name" en commun.

Ma case à cocher 1
Ma case à cocher 2
Ma case à cocher 3

Je vais vous détailler plusieurs procédures qui vont vous permettre de vous familiariser avec leur récupération.

C'est parti !

Comment récupérer plusieurs checkbox d'un même nom ?

Mise en place de notre formulaire sur une page appelée "checkbox.php"

Exemple N°1

<?php
error_reporting(E_ALL);
if(!empty($_POST))
{
echo '<pre>';
echo print_r($_POST['choix'],true);
echo '</pre><br />
Faire un autre test : <a href="checkbox.php">Tester à nouveau</a>';
}
else
{
echo '<b>Test de récupération dans le cas de checkbox multiple</b>';

echo '<form method="POST" action="checkbox.php">
    <input type="checkbox" name="choix[]" value="1"> nom 1<br>
    <input type="checkbox" name="choix[]" value="2"> nom 2<br>
    <input type="checkbox" name="choix[]" value="3"> nom 3<br>
    <input type="checkbox" name="choix[]" value="4"> nom 4<br>
    <input type="checkbox" name="choix[]" value="5"> nom 5<br>
    <input type="submit" value="test">
    </form>';
}
?>

Voilà, le formulaire est en place, vous pouvez le tester tel qu'il est. Ne le copié pas bêtement essayé au moins de le comprendre.
Vous avez remarqué, la manière dont sont nommées les checkbox, comme un array choix[]
Et c'est là le principe simple d'une selection multiple de checkbox d'un même nom, on utilise un tableau.

Remarque importante

Peut-être avez vous remarquer le !empty($_POST) placé au début qui est sensé vérifier que le tableau $_POST existe bien à la soumission du formulaire.
Faites un test de soumission sans cocher de case.
Vous avez vu ? Le formulaire reste sur sa position d'affichage du formulaire.
Il faut savoir que les checkbox ont cette particularité de "ne pas exister" si elles ne sont pas cochées.
En clair, le tableau $_POST n'existe pas dans ce cadre précis.

Par contre, si j'avais mis un "name" au bouton submit, ou si j'avais eu en plus dans le formulaire un simple champ text, le tableau $_POST deviendrait existant, mais pas le tableau $choix[] correspondant aux checkbox.

Comment gérer ces checkbox après la soummission ?

Pour répondre à cette question, il faut savoir à quoi vous destiniez ces valeurs. Comme vous êtes tous sensé le savoir, la manière d'exploiter un tableau consiste généralement à le parcourir avec foreach().

Exemple N°2:

On reprend la même présentation que le code précédent, mais on va exécuter une boucle foreach()
après la soumission.
<?php
error_reporting(E_ALL);
if(!empty($_POST['choix']))
{
echo 'Les valeurs des cases cochées sont :<br />';
foreach($_POST['choix'] as $val)
{
echo $val,'<br />';
}
echo '<br />
Faire un autre test : <a href="checkbox3.php">Tester à nouveau</a>';
}
else
{
echo 'Test de récupération dans le cas de checkbox multiple
<br /><br />
<form method="POST" action="checkbox3.php">
    <input type="checkbox" name="choix[]" value="1"> nom 1<br>
    <input type="checkbox" name="choix[]" value="2"> nom 2<br>
    <input type="checkbox" name="choix[]" value="3"> nom 3<br>
    <input type="checkbox" name="choix[]" value="4"> nom 4<br>
    <input type="checkbox" name="choix[]" value="5"> nom 5<br>
    <input type="submit" value="test">
</form>';
}
?>


Voilà, ce n'est pas bien compliqué, il vous suffit d'adapter à vos besoins.

Je vais quand même vous donner un 3ème exemple de l'utilisation d'une liste de checkbox. Je l'ai souvent vu comme demande dans les forums, je vais vous expliquer comment gérer la suppression d'enregistrements en une seule fois dans une table.

Supprimer des enregistrements via des checkbox

Pour gérer cela, vous devez créer votre formulaire à la volée via une requête réalisée sur une table de votre base de données. Prenons comme exemple un répertoire téléphonique.
Notre table s'appelle "Repertoire" et est composée de 4 champs :

CREATE TABLE `repertoire`
(
`id` INT( 11 ) UNSIGNED DEFAULT '0' NOT NULL ,
`nom` VARCHAR( 50 ) NOT NULL ,
`prenom` VARCHAR( 50 ) NOT NULL ,
`telephone` VARCHAR( 15 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

Notre requête et affichage de notre liste tableau avec les checkbox.

<?php
$req="select id,nom,prenom,telephone from repertoire order by nom asc,prenom asc";
$res=mysql_query($req);

echo '<form method="post" action="supprimer_telephone.php">
<table>
<tr>
<td>Nom</td><td>Prénom</td><td>N° de Téléphone</td><td>Supprimer</td>
</tr>';

while($data=mysql_fetch_assoc($res))
{
echo '<tr>
<td>',$data['nom'],'</td>
<td>',$data['prenom'],'</td>
<td>',$data['telephone'],'</td>
<td><input type="checkbox" name="id_rep[]" value="',$data['id'],'" /></td>
</tr>';
}

echo '<tr><td colspan="4"><input type="submit" value="Effacer les numéros cochés" /></td></tr>
</table>
</form>';
?>

ADAM Benjamin 2008 | Admin