Tuto checkboxs et PHP
Nous allons voir ici quelques exemples d'utilisations des cases à cocher
«checkbox».
* Notez que ce tuto est compatible avec php < 4.2 , vous saurez modifier les scripts en fonction de votre version php.
je vous rappelle juste que les variables provenant d'un formulaire en métode 'post',
se récupèreront à partir de php > 4.2 de la forme suivante $_POST['variable'] et non plus $variable.
- 1- Utilisation simple
- 2- Utilisation multiple (tableau)
- 3- Utilisation avec une base de données (SQL)
1- Utilisation basique de la case à cocher:
Exemple:
Script simple du formulaire:
<form method='POST' action='fenetre.php'> <input type='checkbox' name='case' value='on'> Case à cocher simple .<br> Cochez-la ou pas puis cliquez sur Voir pour connaitre le résultat. <br><input type='submit' name='exple1' value='Voir'> </form>
|
// ** Notez que :
- Si vous aviez voulu la case à cochée initialement cochée,
il vous suffit d'ajouter après value='on' le terme checked.
- Vous pouvez donner la valeur (value) que vous voulez à cette case, vous retrouverez cette valeur dans le
traitement du formulaire
Traitement du formulaire / résultat:
<? if(!empty($case)){ echo"Vous avez coché la case";} else {echo"Vous n'avez pas coché la case"; } ?>
|
//** Si vous aviez voulu retrouver la valeur donnée à cette case,
il vous suffisait de faire un :
dans notre cas il aurait retourné « on »
2- Choix multiple - tableau (array)
Imaginons un cas précis:
Vous avez un questionnaire et vous voudriez connaitre
les 2 couleurs préférés de l'internaute parmi 5 couleurs.
Bien-sûr la première méthode pourrait tout de même s'appliquer en donnant des noms spécifiques
à chaque checkbox et faire un contrôle de chaque checkbox, mais reconnaissez que dans
le cas d'une quinzaine de ces checkbox, cela deviendrait vite lourd !!
Il est donc beaucoup plus interressant de passer par un tableau.
Exemple :
Code du formulaire :
<form method='POST' action='fenetre.php'> Merci de cocher vos 2 couleurs préférées:<br> <input type="checkbox" name="couleur[]" value="jaune"> Jaune<br> <input type="checkbox" name="couleur[]" value="bleu"> Bleu<br> <input type="checkbox" name="couleur[]" value="vert"> Vert<br> <input type="checkbox" name="couleur[]" value="orange"> Orange<br> <input type="checkbox" name="couleur[]" value="rouge"> Rouge<br> <input type="submit" name="exple2" value="Résultats"> </form>
|
Explications:
Nous avons passé nos checkboxs par un tableau que nous avons nommé couleur[].
Notons que nous aurions encore pu simplifier le script :
<? $colors = array(jaune,bleu,vert,orange,rouge); for($i=0;$i<sizeof($colors);$i++){
echo"<input type='checkbox' name='couleur[]' value='".$colors[$i]."'>".$colors[$i]."<br>"; } ?>
|
Traitement du formulaire / résultat:
<? $ctrl=sizeof($couleur); if($ctrl!=2 ){ echo"Attention vous n'avez pas cochez le bon nombre de cases !!"; exit; } else{ echo"Vous avez choisi comme couleurs:<br>"; foreach ($couleur as $valeur){ echo"le ". $valeur.".<br>"; } } ?>
|
Explications:
Nous allons tout d'abord vérifier que l'internaute
n'a coché que 2 cases grâce à la fonction: sizeof() qui
nous retourne le nombre de ligne du tableau couleur.
Ensuite, nous utilisons une boucle foreach() pour lire toutes
les lignes du tableau et extraire la valeur par la variable $valeur.
Notons que ces fonctions se comprennent trés aisemment avec une petite connaissance
de l'anglais:
size of ==> taille de
foreach... as ..==> pour chaque... comme ..
3- Utilisation avec une base de données (SQL)
Là, nous attaquons les choses sérieuses et de plus en plus interessantes.
Imaginons encore un cas précis. (apprendre par l'exemple, c'est le meilleur)
Vous avez une table "contact" avec toutes les coordonées de vos amis, et personnes que vous connaissez.
Dans cette table que vous pouvez afficher facilement, vous voudriez afficher pour
chacun une case à cocher (checkbox) qui, servirait à éliminer ce contact, et pouvoir faire
cette opération en cochant plusieurs cases donc éliminations multiples.
Exemple de la table contact :
Script pour l'affichage de la table contact:
<form method='POST' action='fenetre.php'> <table border="1"> <tr> <td width=''>Noms</td> <td width=''>Téléphones</td> <td width=''>Choix</td> </tr>
< ? $db = mysql_connect('localhost', 'login', 'password') or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>'); mysql_select_db('nomdelabase',$db); $query="Select * from contact" ; $result = mysql_query( $query )or exit ('Erreur SQL !'.$query.'<br>'.mysql_error()); while($data = mysql_fetch_array($result)) { echo"<tr><td>".$data['noms']."</td>"; echo"<td>".$data['phone']."</td>"; echo"<td><input type='checkbox' name='delete[]' value='".$data['id']."'></td>"; echo"</tr>"; } mysql_close(); ?> </form> </table>
|
Notez la partie importante, celle de la checkbox, nous lui avons
donné comme nom : delete et elle est passée en tableau donc delete[] avec comme valeur celle de l'id de votre contact.
Affichage de votre table :
Voyons désormais le traitement du formulaire et la requête SQL pour supprimer
tous les contacts qui ont été cochés.
Une fois encore, nous pourrions utiliser exactement la même technique pour faire
un UPDATE de la table, ou utiliser le résultat pour un envoi groupé de
Newsletters, ou une boutique virtuelle, etc...
Traitement du formulaire / résultats /requête.
< ? if (sizeof($delete)==0){ header('Location:pageformulaire.php'); exit;} else{
$db = mysql_connect('localhost', 'login', 'password') or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>'); mysql_select_db('nomdelabase',$db); foreach ($delete as $valeur){ $sql="DELETE FROM contact where id='$id'"; $req= mysql_query($sql); } mysql_close(); header('Location:pageformulaire.php'); exit; } ?>
|
Explications :
Nous vérifions tout d'abord que l'internaute n'ait pas
appuyé par erreur sur le bouton Eliminer, grâce à la fonction
sizeof().
Dans ce cas nous le redirigeons vers le formlaire et y ajoutons un
exit de sécurité.
Une fois cette vérification effectuée, nous pouvons nous attacher au
traitement du formulaire.
Nous employons toujours la même methode du choix multiples de
cases à cocher grace à la fonction foreach (pour chaque).
Cette fonction créée une boucle qui va, pour chaque cases cochées, donc chaque id
choisie, supprimer l'enregistrement en question.
Notons ici le choix volontaire de l'id comme valeur de la
checkbox qui donne ainsi, sans aucune equivoque possible,
la bonne ligne d'enregistrement à supprimer.
Notez encore que la connexion et la deconnexion à votre base
s'effectue en dehors de la boucle pour la raison évidente d'
éviter de répéter ces opérations inutilement.
Enfin, à la fin du traitement nous renvoyons l'internaute à la page
initiale, à vous de vous faire plaisir en y ajoutant, (par exemple window.alert()) un
petit message indiquant le succès de l'opération.
Si des doutes persistent, des questions spécifiques, des petits problèmes de mise en place,
n'hésitez pas à consulter le forum référence en php :
www.AllHtml.com
Tutos:
Cases à cocher Tronquer un texte
Moteur de recherche
Tableau (Array) et boucles
Caddie virtuel
Calendrier
Notes:
Notez que de toute façon ces scripts ne sont qu'à titre d'exemples et n'en sont donc que trés
partiels, il vous faudra bien-sûr les intégrer dans l'environnement de votre page, de votre site,
mais la méthode est là et elle fonctionne.
Autre point important, ces morceaux de scripts notament, lorsqu'il y a connexion à votre base de données, ne font aucune référence à certains problèmes de
sécurité.