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 basique de la case à cocher:

  • Exemple:

    FORMULAIRE :
    Case à cocher simple .
    Cochez-la ou pas puis cliquez sur Voir pour connaitre le résultat.


    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 :
    1. Si vous aviez voulu la case à cochée initialement cochée, il vous suffit d'ajouter après value='on' le terme checked.
    2. 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 :
    echo$case;
    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 :
    Merci de cocher vos 2 couleurs préférées:
    Jaune
    Bleu
    Vert
    Orange
    Rouge
    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 :
    id (auto_increment) noms (varchar) phone (varchar ou int)

    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 :
    Noms Téléphones Choix
    Durand 04 66 66 66
    Blanchard 04 66 66 67
    Blanc 04 66 66 68
    Ferrari 04 66 66 69


    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é.