Dans cette vidéo tutorielle, l’auteur montre pas à pas comment gérer un groupe de cases à cocher (checkbox) en PHP, depuis la définition du champ HTML jusqu’à la persistance des sélections dans une base de données MySQL via PDO. Il explique d’abord pourquoi les checkbox doivent partager le même nom avec des crochets (ex. name="ch[]") afin d’être traitées comme un tableau. Ensuite, il récupère les valeurs cochées avec $POST['ch'] et les affiche en une seule chaîne grâce à implode, en insérant un séparateur (tiret). Il montre comment mémoriser les sélections après le rechargement de la page en ajoutant conditionnellement l’attribut checked via inarray. La deuxième partie porte sur le stockage des valeurs dans une table « compétences » contenant un champ unique. L’auteur utilise une requête d’insertion préparée avec PDO, concatène les valeurs cochées avec implode en utilisant un séparateur rare (la barre verticale "|") pour éviter les collisions, puis insère la chaîne dans le champ. Enfin, il récupère l’enregistrement, explode la chaîne sur le séparateur pour reconstruire le tableau ch, et applique de nouveau la logique conditionnelle pour cocher les cases correspondantes. Le tutoriel conclut que la gestion des checkbox en PHP n’est pas compliquée lorsqu’on utilise les tableaux, implode/explode et les requêtes PDO préparées.
Chapters
Bonjour à tous et bienvenue dans cette vidéo où nous allons découvrir une nouvelle astuce de développement web. Aujourd'hui, nous allons voir comment gérer les checkbox en PHP. Il est rare où l'on trouve un formulaire qui ne contient pas de cases à cocher, mais la gestion de celles-ci est un peu différente de leurs homologues comme les zones de texte, les listes de sélection ou les textareas. Sur cette page, nous avons un formulaire qui renferme 3 checkbox qui ont respectivement les valeurs HTML, CSS et JavaScript. Il y a aussi un bouton de soumission du formulaire de type submit et le résultat sur le navigateur ressemble à ceci. La première opération à faire est de nommer ces checkbox. Donc on va ajouter l'attribut name comme ceci. Nous avons l'habitude de donner des noms différents aux champs de formulaires, mais pour les checkbox, remarquez bien qu'ils constituent un seul groupe. Alors il est judicieux de les nommer avec le même nom. On mettra donc ici ch Mais au lieu de conserver le nom comme ça, on va lui ajouter des crochets comme un tableau. Désormais, le code PHP qui va suivre va considérer tous ces checkbox comme étant des éléments d'un seul tableau. On va faire la même opération pour les autres checkbox. Ensuite, nous allons récupérer les posts avec du PHP. On mettra juste ch sans les crochets. Comme ça. Ensuite le bouton valider. Dans un premier temps nous allons juste afficher les valeurs des checkbox qui sont cochées. On mettra donc ici. Ça veut dire si on clique sur le bouton submit. Puis on affiche le message Vous avez coché les cases suivantes, suivi d'un retour à la ligne. Puis on mettra echo et on va afficher toutes les cases qui sont cochées. Figurez-vous bien que les cases à cocher forment un tableau PHP, mais seulement les cases qui sont réellement cochées appartiennent à ce tableau, c'est-à-dire que les cases qui ne sont pas cochées ne vont pas figurer dedans. Donc on va tout afficher d'un seul coup à l'aide de la fonction implode. Comme séparateur on mettra juste un tiret et dans mettra c'est h. Dans ce cas on va afficher une seule chaîne de caractères qui est constituée des éléments du tableau qui sont espacés par le tiret. Exécutons. Afin d'éviter ces notifications on mettra juste les@ comme d'habitude. De préférence là aussi Maintenant je vais cocher HTML et ça m'affiche, vous avez coché les cases suivantes, juste HTML. Bon, je vais aussi ajouter un séparateur, ma balise HR, pour qu'au moment de l'exécution sur le navigateur, les choses soient plus claires. Voilà, maintenant je vais cocher HTML, CSS et JavaScript et il m'affiche bien les cases qui ont été cochées. Voilà, encore. Donc maintenant HTML ne figure plus parce qu'il n'est pas coché. Il reste une chose à faire, c'est que les cases qui sont cochées ne sont pas mémorisées. Une fois la page est rechargée, les activations disparaissent. Donc si on met l'attribut checked, ça va automatiquement cocher la case. Voilà, ça coche automatiquement la case HTML. Mais dans ce cas, nous allons plutôt conditionner cet attribut. Alors on va mettre le tag PHP et on vérifie si la valeur HTML figure dans le tableau ch. Donc if in_array la valeur HTML du tableau ch, ça veut dire si ça figure, dans ce cas on va mettre l'attribut checked. Là encore on va mettre un@ afin d'échapper à une notification éventuelle. On exécute. Donc voilà, ça mémorise HTML. Maintenant, on va faire la même chose pour CSS et JavaScript. On va juste copier ce code et on change les valeurs. Exécutons. Voilà, on constate que ça marche bien. Maintenant on va voir comment stocker les valeurs des checkbox dans une base de données. En fait l'idée qui paraît intuitive c'est qu'on va créer 3 champs dans la table qui va accueillir ces checkbox. Un champ pour HTML, un champ pour CSS et un champ pour JavaScript. Mais ce n'est pas trop pratique parce que souvent on a un grand nombre de checkbox et si on veut intégrer autant de champs dans la table, dans ce cas ça sera difficile à gérer. La solution c'est de créer un seul champ qui va contenir toutes ces valeurs à la fois, ou plutôt toutes les valeurs qui sont cochées. Voilà, j'ai déjà prévu une table qui s'appelle compétences qui contient 2 champs: ID et compétences. ID c'est la clé primaire de la table qui va s'incrémenter automatiquement et compétences c'est le champ qui contiendra les valeurs qui sont cochées. Voilà ce qu'on va faire ici, c'est qu'une fois que l'utilisateur clique sur le bouton Submit, on va inclure la chaîne de connexion que j'ai déjà prévue ici. Le fichier connexion.php. Ensuite, je vais préparer une requête à l'aide de l'objet PDO. C'est la requête d'insertion. Le champ compétences, values, et on mettra un marqueur interrogatif. Ensuite on exécute et comme d'habitude on mettra un tableau qui contiendra une seule valeur dans ce cas parce qu'on a un seul marqueur. Cette valeur qui sera une chaîne de caractères contiendra toutes les valeurs des cases qui sont cochées. Dans ce cas on mettra toujours la fonction implode et comme séparateur, il vaut mieux choisir un séparateur qui est peu ordinaire, par exemple la barre verticale. Il faut toujours mettre un caractère ou bien un ensemble de caractères qui ne peuvent pas figurer dans les valeurs que vous avez prévues pour les cases à cocher. Et là on va mettre un CH. Exécutons pour voir ce que ça donne. Donc je mets HTML et CSS. Et voilà, dans la table j'ai bien les valeurs HTML et CSS qui ont été intégrées et qui ont été séparées par une barre verticale. Bon, maintenant je vais cocher aussi JavaScript. Et voilà, j'ai 3 valeurs espacées par la barre verticale. Ce qu'on va faire maintenant, c'est interroger la table afin de charger les informations qu'elle contient, que l'on va ensuite projeter sur les cases à cocher. C'est-à-dire si HTML figure dans l'enregistrement, donc je vais la cocher, sinon il sera décoché. Donc voilà ce qu'on va faire, on va modifier le code légèrement, on va enlever ça. Parce qu'on n'a pas vraiment besoin de poster le formulaire. Bon, je vais conserver l'autre code de vérification. Bon, je vais mettre toujours include connexion.php. Je vais préparer la requête de sélection. Where ID égal marqueur interrogatif. On mettra limite 1 pour se contenter d'un seul enregistrement qui est identifié par ID. Ensuite, setFetchMode avec la constante PDO FETCH_ASSOC. Après, on exécute. Et on passe l'argument avec la valeur 1 par exemple pour dire que je veux récupérer le premier enregistrement. Je crée le tableau qui contiendra la ligne entière. Bien sûr ces instructions je les ai déjà traitées dans les vidéos qui s'intéressent à l'objet PDO. Alors là, je suis censé récupérer l'enregistrement qui correspond à la ligne dont le ID vaut la valeur 1. Et n'oubliez pas que l'enregistrement a la forme suivante: c'est une chaîne de caractères qui contient les valeurs qui doivent normalement être cochées et espacées par la barre verticale. Donc ce que je vais faire, c'est récupérer cette chaîne et l'éclater au niveau de la barre verticale à l'aide de la fonction explode et mettre le tout dans un tableau qui sera nommé ch. On mettra tableau ch égal explode barre verticale ométab. Bon, puisque je n'ai qu'une seule ligne, alors je mettrai l'index 0 avec la clé compétences. Exécutons pour voir ce que ça va donner. Donc voilà, ça coche HTML et CSS, ce qui correspond au premier enregistrement. Maintenant je vais mettre la valeur 2 dans le code pour voir s'il va cocher les 3. Et voilà, donc il a bien coché les 3 cases. Donc c'est comme ça qu'on traite les cases à cocher avec le langage PHP, et à la fin ce n'est pas vraiment très compliqué. Merci pour votre attention et à la vidéo prochaine.