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.
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";
}
?>
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>
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;
}
}
}
}
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.
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
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 ?
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.
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 ?
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 :(
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.
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;
}
}
}
}
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>
...