Plusieurs Select sans recharger la page

Eléphant du PHP | 100 Messages

22 avr. 2012, 17:21

Bonjour à Toutes et à Tous,

je me permets de vous demander conseil:

J'ai trois select alimentés par 3 tables

Lorsque je choisis le 1er select (marque) puis le 2èmee(modele) et ensuite le 3ème select(piece)
tout se passe bien, si marque ne possède pas de modele tout se passe bien

mon soucis est que si je sélectionne une marque avec modele et qu'ensuite je
re-sélectionne mon select marque avec des modeles, il me trouve bien mon nombres d'enregistrements désirés mais
mon select modele garde en mémoire le modele précédemment demandé avec mes modeles actuellemnt demandés
je n'arrive pas à initialiser mon select modele

merci de votre compréhension et j'espère savoir où je galère

Amicalement
bernard25
:oops:

Code : Tout sélectionner

<form class="formarticle" id='formulaire' action="index.php" method="post"> <p class="selectcentrer"> <!-- Recherche par champ 'marque' --> <select size=1 name="marque" id="marque" onchange="form.submit()"> <option value="<?php if (isset($_POST['marque'])){echo $_POST['marque'];} ?>"><?php if (isset($_POST['marque'])){echo $_POST['marque'];} else { echo '--liste Marque--';}?></option> <?php $resultmarque = mysql_query("SELECT * FROM marque" ); while($data1 = mysql_fetch_array($resultmarque)) { echo '<option value="'.$data1[1].'">'.$data1['marque']; echo '</option>'."\n"; } ?> </select> <script type="text/javascript"> //<![CDATA[ function change_valeur() { select = document.getElementById("marque"); choice = select.selectedIndex // Récupération de l'index du <option> choisi marque = select.options[choice].value; // Récupération du texte du <option> d'index "choice" } //]]> </script> <!-- Récupère la valeur 'Marque' --> <?php if(isset($_POST['marque'])){ $marquevoiture= $_POST['marque']; $resultmarque = mysql_query("SELECT * FROM marque WHERE marque LIKE '".$_POST['marque']."' ORDER BY marque" ); $row = mysql_fetch_row($resultmarque); $reference =$row[2]; $resultmodele = mysql_query("SELECT * FROM modele WHERE refmarque LIKE '".$reference."' ORDER BY refmarque" ); $nb_modele=mysql_num_rows($resultmodele); } ?> <!-- Recherche et filtre le champ 'modele' par rapport au champ 'marque' --> <?php if(!isset($_POST['marque']) OR $_POST['marque']=='' OR $nb_modele==0){ unset($_POST['modele']); echo '<select size=1 name="modele" id="modele" disabled="disabled" onchange="form.submit();">'; } else {echo '<select size=1 name="modele" id="modele" onchange="form.submit();"> '; } ?> <option value="<?php if (isset($_POST['modele'])){echo $_POST['modele'];} ?>"><?php if (isset($_POST['modele'])){echo $_POST['modele'];} else { echo '--liste Modèle--';}?></option> <?php $resultmodele = mysql_query("SELECT * FROM modele WHERE refmarque LIKE '".$reference."' ORDER BY refmarque" ); while($data2 = mysql_fetch_array($resultmodele)) { echo '<option value="'.$data2[1].'">'.$data2['modele']; echo '</option>'."\n"; } echo '</select>'."\n"; ?> <script type="text/javascript"> //<![CDATA[ function change_valeur() { select = document.getElementById("modele"); choice = select.selectedIndex // Récupération de l'index du <option> choisi modele = select.options[choice].value; // Récupération du texte du <option> d'index "choice" } //]]> </script> <!-- Récupère la valeur 'modele' --> <?php if(isset($_POST['modele'])){ $modelevoiture= $_POST['modele']; $resultmodele = mysql_query("SELECT * FROM modele WHERE modele LIKE '".$_POST['modele']."%' ORDER BY modele" ); $row = mysql_fetch_row($resultmodele); $refmodele =$row[4]; $resultpiece = mysql_query("SELECT * FROM piece WHERE modele LIKE '".$_POST['modele']."%' ORDER BY modele" ); $nb_piece=mysql_num_rows($resultpiece); } ?> <!-- Recherche et filtre le champ 'piece' par rapport au champ 'modele' --> <?php if(!isset($_POST['modele']) OR $_POST['modele']=='' OR $nb_piece==0){ unset($_POST['piece']); echo '<select size=1 name="piece" id="piece" disabled="disabled" onchange="form.submit();">'; } else {echo '<select size=1 name="piece" id="piece" onchange="form.submit();"> '; } ?> <option value="<?php if (isset($_POST['piece'])){echo $_POST['piece'];} ?>"><?php if (isset($_POST['piece'])){echo $_POST['piece'];} else { echo '--liste Pièce--';}?></option> <?php $resultpiece = mysql_query("SELECT * FROM piece WHERE modele LIKE '".$_POST['modele']."%' ORDER BY modele" ); while($data3 = mysql_fetch_array($resultpiece)) { echo '<option value="'.$data3[1].'">'.$data3['piece']; echo '</option>'."\n"; } echo '</select>'."\n"; ?> <script type="text/javascript"> //<![CDATA[ function change_valeur() { select = document.getElementById("piece"); choice = select.selectedIndex // Récupération de l'index du <option> choisi piece = select.options[choice].value; // Récupération du texte du <option> d'index "choice" } //]]> </script> <!-- Récupère la valeur 'piece' --> <?php if(isset($_POST['piece'])){ $piecevoiture= $_POST['piece']; $resultpiece = mysql_query("SELECT * FROM piece WHERE piece LIKE '".$_POST['piece']."%' ORDER BY piece" ); $row = mysql_fetch_row($resultpiece); $refid =$row[0]; $piecevoiture =$row[1]; $photo =$row[5]; $prix =$row[6]; $refpiece =$row[7]; } ?> </br> <?php echo '</br>'; echo '<strong class="textegras">Vous avez choisi :</strong>'; echo '</br>'; //Si la valeur 'marque' existe alors on l'afiche if(isset($_POST['marque'])){ echo '- Marque Véhicule : <strong class="textegras">'.$marquevoiture.'</strong></br>'; } //Si la valeur 'modele' existe alors on l'afiche if(isset($_POST['modele'])){ echo '- Modèle Véhicule : <strong class="textegras"> '.$modelevoiture.'</strong></br>'; } //Si la valeur 'piece' existe alors on l'afiche if(isset($_POST['piece'])){ echo '- Pièce Véhicule : <strong class="textegras">'.$piecevoiture.'</strong>'; echo '</br>'; // Filtre sur le champ 'piece' $result = mysql_query("SELECT * FROM piece WHERE piece LIKE '".$_POST['piece']."%' ORDER BY id" ); $nb_total=mysql_num_rows($result); $row = mysql_fetch_row($result); // Trouve tous les enregistrements de la même pièce while($row = mysql_fetch_array($result)) { $idpiece=$row[0]; $piecevehicule=$row[1]; $modelepiece=$row[2]; $refmarquepiece=$row[3]; $refmodelepiece=$row[4]; $photo=$row[5]; $prix=$row[6]; } echo '</br>'; // Filtre sur piece d'un même modele $result = mysql_query('SELECT * FROM piece WHERE piece="'.$_POST['piece'].'" AND modele="'.$_POST['modele'].'"ORDER BY modele' ); $row = mysql_fetch_row($result); $idpiece=$row[0]; $piecevehicule=$row[1]; $modelepiece=$row[2]; $refmarquepiece=$row[3]; $refmodelepiece=$row[4]; $photo=$row[5]; $prix=$row[6]; $nb_total=mysql_num_rows($result); // Affiche l'enregistrement echo 'Désignation : '.$piecevehicule.' '.$modelepiece.' Prix : '.$prix.' €</br>'; echo '<strong class="imagecentrer"><img src="'.$photo.'" width="100" height="100" alt="Photo 01" />'.'</strong></br>'; echo '<strong class="textegras">'.$nb_total.'</strong> enregistrement(s) trouvé(s)'; } ?> </p> </form>

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

22 avr. 2012, 17:38

Salut,

Pour forcer une sélection dans un sélect il faut utiliser l'attribut selected sur l'option et non forcer un option en plus.

Par exemple
<?php
//requête 
while($data = mysql_fetch_assoc($query)){
echo '<option value="'.$data['laclefprimaire'].'"';
if(isset($_POST['le nom du champ'])){
if($_POST['le nom du champ'] == $data['laclefprimaire']){
echo  ' selected="selected"';
}
}
echo $data['le truc en clair'];
}
?>
[php]

Un truc dans le genre ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 100 Messages

22 avr. 2012, 18:05

merci moogli pour ta réponse,

en fait si le premier select à déjà été sélectionné une fois avec pour le 2ème select des éléments trouvés, on fait un nouveau choix dans le premier select et là le 2ème select garde en premier l'élément de la précédente sélection et ajoute les éléments nouveaux, j'aimerai connaitre le code pour qu'il ne m'affiche que ma nouvelle sélection

Merci encore

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

22 avr. 2012, 18:34

C'est ce que je t'ai donné. Tu fait ça pour chaque liste et chaque modification seront "gardées" lors du ré affichage.

Tu a trois fonctions js avec le même nom ce qui n'est pas possible.
D'ailleurs les fonctions ne font rien :/

Explique nous un peu plus en détails ce qui te gêne.

Pour reprendre ton titre, tu de raid avoir une utilisation d'ajax dans tes fonctions JS pour recharger les selects.
Tu a un tuto ici sur les liste déroulantes.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 100 Messages

22 avr. 2012, 18:40

Merci Moogli ,pour ta compassion,

En fait tout fonctionne bien la première fois

1er select(marque) choix de la marque exemple : citroen ensuite 2eme select(modele) exemple C1

Je refais un choix avec 1er select(marque) choix de la marque exemple : renault ensuite 2eme select(modele) exemple Megane

Il me donne bien en choix Megane, Scenic etc mais le premier de ma liste est C1 qui avait été sélectionné auparavent

C1
Megane
Scenic

Ce n'est pas évident à expliquer, j'espère que je suis assez explicite, sinon veuillez m'excuser

En tous les cas un grand merci à Moogli pour le temps perdu pour moi
Amicalement
bernard25

Eléphant du PHP | 100 Messages

22 avr. 2012, 18:56

En fait ce que je n'arrive pas à solutionner, c'est lors d'un nouveau choix du 1er select si j'affiche les enregistrements du 2ème select il sont bien filtrés par rapport au nouveau choix du 1er select mais j'ai un résiduel restant à l'affichage venant du 1er choix

Amicalement
bernard25