Formulaire PHP avec boucle foreach et radio bouton
Résolu
etudiante_7710
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
débutant en langage PHP je ne parviens pas à créer un formulaire demandé pour un exercice. J'ai réussi à faire mon formulaire qui comprend 4 boutons radio et 1 submit mais je n'arrive pas à faire l'affiche des réponses.
Mon fomulaire :
L'objectif est d'avoir en réponse les différents mots du dictionnaire selon le choix de la langue (anglais, français ou espagnol) ou d'afficher tous les mots si l'on sélectionne "dictionnaire". Cependant, la difficulté est que le lien est entre les termes et non pas les langues. Comme selon le schéma suivant :

Pourriez vous m'aider à réaliser ce devoir je ne sais vraiment pas comment m'y prendre mais j'ai compris qu'il fallait faire un lien avec la boucle foreach et donc potentiellement créer des arrays.
Les langues : anglais, français, espagnol
Les mots:
terme1: dog, perro, chien
terme2: cat, gato, chat
terme3: horse, caballo, cheval
terme4: rabbot, conejo, lapin
terme5: hen, gallina,poule
débutant en langage PHP je ne parviens pas à créer un formulaire demandé pour un exercice. J'ai réussi à faire mon formulaire qui comprend 4 boutons radio et 1 submit mais je n'arrive pas à faire l'affiche des réponses.
Mon fomulaire :
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Dictionnaire exercice </title> </head> <body> <form> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="Afficher"> </form> </body> </html>
L'objectif est d'avoir en réponse les différents mots du dictionnaire selon le choix de la langue (anglais, français ou espagnol) ou d'afficher tous les mots si l'on sélectionne "dictionnaire". Cependant, la difficulté est que le lien est entre les termes et non pas les langues. Comme selon le schéma suivant :

Pourriez vous m'aider à réaliser ce devoir je ne sais vraiment pas comment m'y prendre mais j'ai compris qu'il fallait faire un lien avec la boucle foreach et donc potentiellement créer des arrays.
Les langues : anglais, français, espagnol
Les mots:
terme1: dog, perro, chien
terme2: cat, gato, chat
terme3: horse, caballo, cheval
terme4: rabbot, conejo, lapin
terme5: hen, gallina,poule
EDIT : Ajout des balises de code
A voir également:
- Formulaire PHP avec boucle foreach et radio bouton
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Radio française - Télécharger - Médias et Actualité
- Formulaire de reclamation instagram - Guide
- Mon pc s'allume et s'éteint en boucle - Forum Matériel & Système
6 réponses
Bonjour,
Déjà, lorsque tu postes du code sur le forum, tu dois utiliser les BALISES DE CODE.
Explications à lire entièrement disponibles ici :
Ensuite, ta balise form n'est pas complète.
Tu dois y ajouter des attributs method et action
De là, dans tonfichier.php tu peux récupérer les variables en utilisant la super globale $_POST
Vu qu'il s'agit d'un exercice je ne t'en dirai pas plus.... je t'invite à revenir nous voir avec tes tentatives de code si tu rencontres des soucis.
Déjà, lorsque tu postes du code sur le forum, tu dois utiliser les BALISES DE CODE.
Explications à lire entièrement disponibles ici :
Ensuite, ta balise form n'est pas complète.
Tu dois y ajouter des attributs method et action
<form method="post" action="tonfichier.php">
De là, dans tonfichier.php tu peux récupérer les variables en utilisant la super globale $_POST
Vu qu'il s'agit d'un exercice je ne t'en dirai pas plus.... je t'invite à revenir nous voir avec tes tentatives de code si tu rencontres des soucis.
Bonjour,
je ne connais pas encore le fonctionnement du site, je pensais que la mise en forme sous balise se faisait automatiquement (dans votre message je ne vois pas le lien vers l'explication). Pour mes précédentes tentatives voici ce que j'ai fait. Tout d'abord tenter de mettre les données dans des arrays pour ensuite les faire rentrer automatiquement dans mon formulaire avec la boucle foreach. J'ai fait 2 présentations. La première:
La seconde:
Mais je ne sais pas où mettre la boucle foreach j'ai essayé
je ne connais pas encore le fonctionnement du site, je pensais que la mise en forme sous balise se faisait automatiquement (dans votre message je ne vois pas le lien vers l'explication). Pour mes précédentes tentatives voici ce que j'ai fait. Tout d'abord tenter de mettre les données dans des arrays pour ensuite les faire rentrer automatiquement dans mon formulaire avec la boucle foreach. J'ai fait 2 présentations. La première:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Dictionnaire exercice </title> </head> <body> <?php $dictionnaire_liste = array( array("anglais"=>"dog", "espagnol"=>"perro", "français"=>"chien"), array("anglais"=>"cat", "espagnol"=>"gato", "français"=>"chat"), array("anglais"=>"horse", "espagnol"=>"caballo", "français"=>"cheval"), array("anglais"=>"rabbit", "espagnol"=>"conejo", "français"=>"lapin"), array("anglais"=>"hen", "espagnol"=>"gallina", "français"=>"poule")); ?> <form method="post" action="dictionnaire.php"> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="afficher"> </form> </body> </html>
La seconde:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Dictionnaire exercice </title> </head> <body> <?php $terme0() = array (); $terme0['anglais'] ='dog'; $terme0['français'] ='chien'; $terme0['espagnol'] = 'perro'; $terme1()= array (); $terme0['anglais'] ='cat'; $terme0['français'] ='chat'; $terme0['espagnol'] ='gato'; $terme2()= array (); $terme0['anglais'] ='horse'; $terme0['français'] ='cheval'; $terme0['espagnol'] ='caballo'; $terme3()= array (); $terme0['anglais'] ='rabbit'; $terme0['français'] ='lapin'; $terme0['espagnol'] ='conejo'; $terme4()= array (); $terme0['anglais'] ='hen'; $terme0['français'] ='poule'; $terme0['espagnol'] ='gallina'; $dictionnaire_liste=array($terme0,$terme1,$terme2,$terme3,$terme4); ?> <form> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="Afficher"> </form> </body> </html>
Mais je ne sais pas où mettre la boucle foreach j'ai essayé
<?php if(isset($_POST['langue'])){ $langue =$_POST ['langue']; print "Vous avez selectionné les termes $langue"; } foreach ($listemot as $key =>$value) { print "Vous avez selectionné tout les termes du dictionnaire $value"; } ?>
Oui j'ai oublié de coller le lien... mais visiblement tu as trouvé comment faire.
Je t'invite, au passage, à prendre quelques bonnes habitudes
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et pour ce qui est de où mettre ta boucle.. comme tu sembles travailler dans un seul fichier ( ton formulaire et le code php de traitement étant dans le même..) dans ce cas, dans le "action" de ton form, tu peux le mettre à vide
Ensuite, pour ta liste de mots, la première présentation sera certainement la plus simple pour boucler dessus
ça devrait donner un truc du genre :
Je t'invite, au passage, à prendre quelques bonnes habitudes
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Et pour ce qui est de où mettre ta boucle.. comme tu sembles travailler dans un seul fichier ( ton formulaire et le code php de traitement étant dans le même..) dans ce cas, dans le "action" de ton form, tu peux le mettre à vide
<form method="post" action="">
Ensuite, pour ta liste de mots, la première présentation sera certainement la plus simple pour boucler dessus
ça devrait donner un truc du genre :
<?php //Affichage des erreurs PHP: error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //on défini le dictionnaire $dictionnaire_liste = array( array("anglais"=>"dog", "espagnol"=>"perro", "français"=>"chien"), array("anglais"=>"cat", "espagnol"=>"gato", "français"=>"chat"), array("anglais"=>"horse", "espagnol"=>"caballo", "français"=>"cheval"), array("anglais"=>"rabbit", "espagnol"=>"conejo", "français"=>"lapin"), array("anglais"=>"hen", "espagnol"=>"gallina", "français"=>"poule")); //récupération PROPRE de la variable AVANT de l'utiliser ( via l'écriture TERNAIRE ) $langue =!empty($_POST ['langue']) ? $_POST ['langue'] : 'TOUTES'; print "<br>Vous avez selectionné les termes $langue"; //Boucle sur les mots du dictionnaire foreach ($dictionnaire_liste as $numTerm =>$traductions) { echo "<br>Mot N° " . $numTerm +1; //boucle sur les langues de chaque terme foreach ($traductions as $lng =>$motTraduit ){ //Si la langue correspond à celle choisi ou qu'on veut toutes les afficher if($langue == $lng || $langue =='TOUTES' ){ echo "<br>".$langue . " -> " . $motTraduit; } } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Dictionnaire exercice </title> </head> <body> <form method="post" action="dictionnaire.php"> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="afficher"> </form> </body> </html>
Merci pour votre réponse elle m'est d'une grande aide ! J'ai quelques questions par rapport à ce codage, pourquoi nous n'utilisons pas le 'print' pour afficher les données inscrites et pourquoi avoir donné comme clé $numTerm. Je ne sais pas si cela a un rapport mais j'ai une erreur qui s'affiche dans mon codage sur cette ligne.
<?php //Affichage des erreurs PHP: error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //on défini le dictionnaire $dictionnaire_liste = array( array("anglais"=>"dog", "espagnol"=>"perro", "français"=>"chien"), array("anglais"=>"cat", "espagnol"=>"gato", "français"=>"chat"), array("anglais"=>"horse", "espagnol"=>"caballo", "français"=>"cheval"), array("anglais"=>"rabbit", "espagnol"=>"conejo", "français"=>"lapin"), array("anglais"=>"hen", "espagnol"=>"gallina", "français"=>"poule")); //récupération PROPRE de la variable AVANT de l'utiliser ( via l'écriture TERNAIRE ) $langue =!empty($_POST ['langue']) ? $_POST ['langue'] : 'TOUTES'; print "<br>Vous avez selectionné les termes $langue"; //Boucle sur les mots du dictionnaire foreach ($dictionnaire_liste as $numTerm =>$traductions) { echo "<br>Mot N° " . intval($numTerm +1 ); //boucle sur les langues de chaque terme foreach ($traductions as $lng =>$motTraduit ){ //Si la langue correspond à celle choisi ou qu'on veut toutes les afficher if($langue == $lng || $langue =='TOUTES' ){ echo "<br>".$langue . " -> " . $motTraduit; } } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> Dictionnaire exercice </title> </head> <body> <form method="post" action=""> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="afficher"> </form> </body> </html>
Merci beaucoup, j'ai oublié de dire l'erreur. Les termes s'affichent dans la page du formulaire mais je voudrais qu'ils n'apparaissent que lorsque je clique sur le radio bouton qui correspond.
Exemple
Selection : Tous les mots en espagnol
Résultat :
Vous avez choisi d'afficher les mots espagnol </br>
Espagnol</br>
perro</br>
gato</br>
caballo</br>
conejo</br>
gallina</br>
Exemple
Selection : Tous les mots en espagnol
Résultat :
Vous avez choisi d'afficher les mots espagnol </br>
Espagnol</br>
perro</br>
gato</br>
caballo</br>
conejo</br>
gallina</br>
if(isset($_POST ['langue'])){ //récupération PROPRE de la variable AVANT de l'utiliser ( via l'écriture TERNAIRE ) $langue =!empty($_POST ['langue']) ? $_POST ['langue'] : 'TOUTES'; print "<br>Vous avez selectionné les termes $langue"; //Boucle sur les mots du dictionnaire foreach ($dictionnaire_liste as $numTerm =>$traductions) { echo "<br>Mot N° " . intval($numTerm +1 ); //boucle sur les langues de chaque terme foreach ($traductions as $lng =>$motTraduit ){ //Si la langue correspond à celle choisi ou qu'on veut toutes les afficher if($langue == $lng || $langue =='dictionnaire' ){ echo "<br>".$langue . " -> " . $motTraduit; } } } }
D'accord ça fonctionne merci beacoup !! Dernière question pour l'affichage des mots du dictionnaire, lorsque l'on selectionne l'option "afficher tout le dictionnaire" est-ce possible d'afficher les mots selon l'odre suivant : anglais - espagnol - français ?
Exemple : dog - perro - chien
Exemple : dog - perro - chien
Bonsoir,
j'ai fait mes recherches et je pense avoir trouvé une solution mais je n'arrive pas à l'appliquer. J'ai pu comprendre que la fonction "implode" permet de faire des chaînes depuis des données de tableaux.
J'ai tenté différentes approche mais je ne sais pas comment faire pour que ça fonctionne.
Ma tentative :
Cependant, mon problème est que les termes du dictionnaire apparaissent 3 fois et je n'arrive pas à insérer un </br> pour ne pas mettre les élement en dessous de la phrase d'introduction.
j'ai fait mes recherches et je pense avoir trouvé une solution mais je n'arrive pas à l'appliquer. J'ai pu comprendre que la fonction "implode" permet de faire des chaînes depuis des données de tableaux.
J'ai tenté différentes approche mais je ne sais pas comment faire pour que ça fonctionne.
Ma tentative :
<!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <?php //TEST if(!isset($_POST["afficher"])) { ?> <!--FORMULAIRE--> <form method="post" action=""> Que désirez-vous afficher ?</br> <input type="radio" name="langue" value="anglais"> Tous les mots en anglais</br> <input type="radio" name="langue" value="espagnol">Tous les mots en espagnol</br> <input type="radio" name="langue" value="français">Tous les mots en français</br> <input type="radio" name="langue" value= "dictionnaire">Tous le dictionnaire</br> </br> <input type="submit" name="afficher" value="Afficher"> </form> <?php exit(); } //TESTS $erreur=0; if(!isset($_POST["langue"])) { print "Veuillez choisir une langue."; $erreur=1; } if($erreur==1) { print "</body></html>"; exit(); } //ÉTAT DU MONDE $choix=$_POST["langue"]; $soum=$_POST["afficher"]; //on défini le dictionnaire $dictionnaire_liste = array( array("anglais"=>"dog", "espagnol"=>"perro", "français"=>"chien"), array("anglais"=>"cat", "espagnol"=>"gato", "français"=>"chat"), array("anglais"=>"horse", "espagnol"=>"caballo", "français"=>"cheval"), array("anglais"=>"rabbit", "espagnol"=>"conejo", "français"=>"lapin"), array("anglais"=>"hen", "espagnol"=>"gallina", "français"=>"poule")); if(isset($_POST ['langue'])){ //PROGRAMME $langue =!empty($_POST ['langue']) ? $_POST ['langue'] : 'TOUTES'; print "<br>Vous avez selectionné les termes $langue"; foreach ($dictionnaire_liste as $numTerm =>$traductions) { foreach ($traductions as $lng =>$motTraduit ){ //Si la langue correspond à celle choisi ou qu'on veut toutes les afficher if($langue == $lng){ echo "<br>" . " - " . $motTraduit; } if ($langue ==$langue){ $separateur =implode("-", $traductions); echo "$separateur"; } } } } ?> </body> </html>
Cependant, mon problème est que les termes du dictionnaire apparaissent 3 fois et je n'arrive pas à insérer un </br> pour ne pas mettre les élement en dessous de la phrase d'introduction.
J'ai réussi a avoir un résultat avec implode donc j'ai continué avec. Oui je connais l'équivalent qui est "sort" mais depuis le site d'aide PHP https://www.php.net/manual/fr/intro-whatis.php la fonction qui avait l'explication la plus pertinente était implode. Je vais tenter avec sort.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En repartant du code que je t'ai donné, il te suffit de retirer les <br> pour que ça s'affiche sur une seule ligne
if(isset($_POST ['langue'])){ //Boucle sur les mots du dictionnaire foreach ($dictionnaire_liste as $numTerm =>$traductions) { echo "<br>Mot N° " . intval($numTerm +1 ); //On tri le tableau qui contient les traductions du mot //boucle sur les langues de chaque terme foreach ($traductions as $lng =>$motTraduit ){ //Si la langue correspond à celle choisi ou qu'on veut toutes les afficher if($langue == $lng || $langue =='dictionnaire' ){ echo " ". $lng . " -> " . $motTraduit; } } } }