Formulaire PHP avec boucle foreach et radio bouton [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020
-
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
-
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 :
<!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

6 réponses

Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176
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
<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.


Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

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:

<!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";
}

?>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

<?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>
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020
>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

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>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

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;
            }
        }
    }
 }

Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020
>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

Merci beaucoup vraiment c'est beaucoup plus clair avec les commentaires je comprends bien les différentes actions du codage mais j'ai encore un souci (désolé j'ai vraiment du mal). Je voudrais que les résultats apres avoir appuyé sur le bouton "submit" s'affichent sur une autre page. Dès que j'ouvre la page j'ai la liste des termes hors je ne voudrais avec que le formulaire. Pareil pour l'affichage de tous les termes du citionnaire je voudrais qu'ils ne se mondtre qu'après avoir actionné le bouton correspondant ( "Tous le dictionnaire") et sans la numérotation juste les termes listés. J'ai tenté de le faire de mon côté mais j'ai des messages d'erreurs.
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020


je voudrais que les résultats apres avoir appuyé sur le bouton "submit" s'affichent sur une autre page.

Dans l'attribut ACTION de ton form, tu mets le nom du fichier php où tu veux afficher ces infos
et tu déplaces, dans ce fichier, le code php que je t'ai donné

et sans la numérotation juste les termes listés

Il suffit de retirer la ligne qui contient le echo avec la numérotation
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

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
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176
Renseignes toi sur les fonctions de tri des array
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020
>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

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 :
<!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.
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176 >
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

comment, en cherchant les fonctions qui permettent de faire des tri sur des tableaux, tu as pu arriver sur la fonction implode ?
Connais-tu le mot anglais qui traduit le verbe trier ?
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020
>
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021

Je ne comprends pas comment je peux faire un affichage en ligne à l'aide du tri. J'arrive à modifier l'ordre d'affichage mais pas la forme (colonne vers ligne) de plus, j'ai des répétitions dans l'affichage du dictionnaire en antier ... je ne m'en sors pas :(
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

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.
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176
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;
            }
        }
    }
 }



Cordialement,
Jordane
Messages postés
10
Date d'inscription
jeudi 3 décembre 2020
Statut
Membre
Dernière intervention
6 décembre 2020

Bonsoir j'ai compris ce point mais je n'arrive pas à faire une ligne avec
terme 1 anglais - espagnol - français </br>
terme 2 anglais - espagnol - français </br>
terme 3 anglais - espagnol - français </br>
terme 4 anglais - espagnol - français </br>
...

Je ne sais pas si c'est clair.
Messages postés
31010
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2021
3 176
Tu as testé le code que je viens de te donner ?