Remplissage liste en fonction choix autre liste

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 08:40

Bonjour à tous,

Je viens vous demander un petit coup de main

Je souhaiterai afficher dans une liste des choix mais ces choix seraient proposés en fonction du choix que j'aurai fait dans une première liste.

Voilà la page du code de mon premier choix (celle là fonctionne bien !! :) )

Code : Tout sélectionner

<html> <head> <link href="style.css" rel="stylesheet" media="all" type="text/css"> </head> <?php include('connexion.inc'); if(isset($_POST['liste1'])){ //si la liste a été "postée" c'est à dire choix fait $liste1=$_POST['liste1']; }else{ $liste1=-1; } ?> <TABLE border=0 width=97% BGCOLOR=#FFFFFF> <TR align="center"> <TD><h1> R&eacute;servation mobile</h1></TD> </TR> </TABLE> <BR><BR> Sélectionnez une marque : <form name="form1" method="post" action="modele.php"> <select name="liste1" onchange=" form1.submit();"> <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement --> <?php $requete = "SELECT * FROM marques"; $execution_requete = mysql_query($requete); while($total = mysql_fetch_array($execution_requete)) //Liste déroulante { echo "<option value=\"".$total["nom_marque"]."\""; echo ">".$total['nom_marque']."</option>\n"; } ?> </select> </form> </html>
Et voilà le code la page où je récupère le choix de la première liste et où je dois faire mon choix dans la seconde

Code : Tout sélectionner

<html> <head> <link href="style.css" rel="stylesheet" media="all" type="text/css"> </head> <?php include('connexion.inc'); if(isset($_POST['liste1'])){ //si la liste a été "postée" c'est à dire choix fait $liste1=$_POST['liste1']; }else{ $liste1=-1; } ?> <TABLE border=0 width=97% BGCOLOR=#FFFFFF> <TR align="center"> <TD><h1> R&eacute;servation mobile</h1></TD> </TR> </TABLE> <BR><BR> <?php echo $_POST['liste1']; if(isset($_POST['liste2'])){ //si la liste a été "postée" c'est à dire choix fait $liste2=$_POST['liste2']; }else{ $liste2=-1; } ?> <br><br> Sélectionnez un modèle : <form name="form2" method="post" action="mobile.php"> <select name="liste2" onchange=" form2.submit();"> <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement --> <?php $requete2 = mysql_query("SELECT * FROM marques AS m, modeles AS n WHERE m.num_marque = n.num_marque AND m.num_marque= ".$_POST['liste1']."'") OR die (mysql_error()); $execution_requete2 = mysql_query($requete2); while($total2 = mysql_fetch_array($execution_requete2)) //Liste déroulante { echo "<option value=\"".$total2["nom_modele"]."\""; echo ">".$total2['nom_modele']."</option>\n"; } ?> </select> </form> <a href="accueil.php">Retour Accueil</a> </html>
Merci d'avance pour le coup de main :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 juil. 2015, 09:19

Bonjour,

Il y a un tutoriel assez complet sur PHPfrance qui pourra probablement t'aider : faq-tutoriels/listes-liees-avec-html-ja ... 55580.html
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 09:33

Je suis pas ultra calé en dev et là il y a du html, javascript et php....a la limite que la page se recharge ne me dérange pas mais je ne dois pas être loin du résultat voulu, j'ai juste besoin de l'aide d'un expert ;-)

Mammouth du PHP | 688 Messages

24 juil. 2015, 09:45

que se passe-t-il exactement dans la seconde page ?

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 09:58

En fait je n'arrive pas dans la liste de ma deuxième page à afficher mes modèles, je pense que ça vient en partie d'un problème de récupération du numéro de la marque sélectionnée dans la page précedente, mais je ne vois pas comment faire, j'ai déjà essayé pas mal de trucs

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 juil. 2015, 10:08

Bonjour,

Ta requête SQL contient une erreur :
$requete2 = mysql_query("SELECT * FROM marques AS m, modeles AS n 
WHERE m.num_marque = n.num_marque 
AND m.num_marque= ".$_POST['liste1']."'")

D'une part tu utilises $_POST['liste1'] sans tester si celui-ci a bien été envoyé (encore que quelques lignes plus haut tu définis $liste1 proprement pour pouvoir l'utiliser :)) et d'autre part, la valeur que tu utilises ici et que tu envois dans ta requête n'est pas délimitée par une apostrophe d'ouverture (il y a bien l'apostrophe de fin "'", mais tu n'en as pas après le m.num_marque= pour commencer la chaine SQL.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 10:31

Merci pour toutes ces infos.

J'ai corrigé l'erreur dans ma requête pour l'apostrophe.

Rien ne change effectivement je dois pas récupérer de valeurs dans variable.

D'après toi depuis ma première page je récupère le numéro de la marque? parce que j'en ai besoin dans ma seconde page pour afficher mes résultats dans ma liste.

Comment puis je tester le remplissage de ma variable?

Merci encore

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 11:10

Dans ma page accueil j'ai ajouter un input en hidden qui doit récupérer mon num_marque et l'envoyer à la page suivante

Code : Tout sélectionner

<html> <head> <link href="style.css" rel="stylesheet" media="all" type="text/css"> </head> <?php include('connexion.inc'); if(isset($_POST['liste1'])){ //si la liste a été "postée" c'est à dire choix fait $liste1=$_POST['liste1']; }else{ $liste1=-1; } ?> <TABLE border=0 width=97% BGCOLOR=#FFFFFF> <TR align="center"> <TD><h1> R&eacute;servation mobile</h1></TD> </TR> </TABLE> <BR><BR> Sélectionnez une marque : <form name="form1" method="post" action="modele.php"> <select name="liste1" onchange=" form1.submit();"> <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement --> <?php $requete = "SELECT * FROM marques"; $execution_requete = mysql_query($requete); while($total = mysql_fetch_array($execution_requete)) //Liste déroulante { echo "<option value=\"".$total["nom_marque"]."\""; echo ">".$total['nom_marque']."</option>\n"; } echo "<input type='hidden' name='num_marque' value=\"".$total["num_marque"]."\">"; ?> </select> </form> </html>
Mais ça marche pas ma variable ne récupère rien dans page suivante

Mammouth du PHP | 571 Messages

24 juil. 2015, 11:27

si tu souhaites transmettre le numéro de la marque dans le champ select, alors tu peux mettre ce numéro dans l'attribut value du select:
<form name="form1" method="post" action="modele.php">
<select name="liste1" onchange=" form1.submit();">
<option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement -->
<?php


$requete = "SELECT * FROM marques";
$execution_requete = mysql_query($requete);
while($total = mysql_fetch_array($execution_requete))

//Liste déroulante
{

echo "<option value='".$total["num_marque"]."'>{$total['nom_marque']}</option>";



}

?>
</select>
</form>
pour s'assurer que le numéro selectionné est bien transmise à la page modele.php, il te suffit d'afficher la variable $_POST['liste1']:
//page modele.php
//à mettre avant le isset($_POST['liste1'])
var_dump( $_POST['liste1'] );

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 11:32

Merci ça marche nickel

Par contre dernière petite question.

Sur ma page modèle au lieu de m'afficher le nom_marque il m'affiche le num-marque :-)

et accessoirement il ne me renvoi pas les modèle dans ma liste non plus

Mammouth du PHP | 571 Messages

24 juil. 2015, 12:17

si aucun modèle n'est renvoyé, tu peux afficher la 2ème requête qui sélectionne les modèles, la copier puis l'exécuter dans phpmyadmin pour tester si la requête sql marche.Pour ce faire, sur la page 1, tu sélectionnes(avec la liste déroute) la marque et tu verras la requête s'afficher dans la page modèle:
$sql_modeles = "SELECT * FROM marques AS m, modeles AS n 
WHERE m.num_marque = n.num_marque 
AND m.num_marque=' ".$_POST['liste1']."'";
echo "$sql_modeles  <br>";//une fois la requête affichéé, copies-la puis tu l'exécute dans phpmyadmin
$requete2 = mysql_query($sql_modeles );

Eléphanteau du PHP | 18 Messages

24 juil. 2015, 14:10

J'ai copié ton code dans ma page

Code : Tout sélectionner

<html> <head> <link href="style.css" rel="stylesheet" media="all" type="text/css"> </head> <?php include('connexion.inc'); if(isset($_POST['liste1'])){ //si la liste a été "postée" c'est à dire choix fait $liste1=$_POST['liste1']; }else{ $liste1=-1; } ?> <TABLE border=0 width=97% BGCOLOR=#FFFFFF> <TR align="center"> <TD><h1> R&eacute;servation mobile</h1></TD> </TR> </TABLE> <BR><BR> <?php if (isset($_POST['liste1'])) { echo $_POST['liste1']; }else{ echo "variable vide"; } if(isset($_POST['liste2'])){ //si la liste a été "postée" c'est à dire choix fait $liste2=$_POST['liste2']; }else{ $liste2=-1; } ?> <br><br> Sélectionnez un modèle : <form name="form2" method="post" action="mobile.php"> <select name="liste2" onchange=" form2.submit();"> <option value=-1>-- Choisissez -- </option> <!-- il faut cette ligne pour avoir obliagtoirement un changement --> <?php $sql_modeles = "SELECT * FROM marques AS m, modeles AS n WHERE m.num_marque = n.num_marque AND m.num_marque=' ".$_POST['liste1']."'"; echo "$sql_modeles <br>" ;//une fois la requête affichéé, copies-la puis tu l'exécute dans phpmyadmin $requete2 = mysql_query($sql_modeles ); while($total2 = mysql_fetch_array($execution_requete2)) Liste déroulante { echo "<option value=\"".$total2["ean_modele"]."\""; echo ">".$total2['nom_modele']."</option>\n"; } ?> </select> </form> <a href="accueil.php">Retour Accueil</a> </html>
Mais rien ne se passe