Listes déroulantes avec AJAX

dam_37 Messages postés 32 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 27 février 2006 - 24 févr. 2006 à 09:34
dam_37 Messages postés 32 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 27 février 2006 - 27 févr. 2006 à 09:17
Salut à tous!
Je réalise un formulaire dont 3 listes déroulantes sont dépendantes l'une de l'autre, je vous explique:
J'ai un champ (channel), en sélectionnant se champ, je fais une requete sur ma liste de références pour n'afficher que celles appartenant au channel.
Quand je chosis une référence, je dois alors, dans une autre liste, faire une requête pour n'afficher que les champs dont la référence est celle de la précédente liste.

Pour actualiser mes listes, j'ai utilisé de l'AJAX et de l'XMLHTTPRequest.
j'arrive à faire marcher l'interractivité entre 2 listes mais pas entre les 3, càd la 1ère et la 2ème ou la 2ème et la 3ème ms pas les trois.

Quelqu'un saurait si une autre méthode que l'ajax serait préférable ou comment pouvoir faire fonctionner les 3.
Voici mon code:

formulaire.php
<TD><select name="ref" id='produits' onchange="change_pk();">
<option value=''>------------------------------</option>
<?
$res = mysql_query("SELECT * FROM produits ORDER BY ref");
while($valeur = mysql_fetch_assoc($res))
{
echo "<option value= ".$valeur["id_prod"];
if($id_prod==$valeur["id_prod"]) echo ' selected ';
echo ">".$valeur["ref"]."</option>";
}
?>

<TD><select name="pk">
<option value=''>------------------------------</option>
<?
$requete = "SELECT distinct pk FROM package order by pk";
requete_liste_deroul($requete,$pk,'pk');
?>
</select>



<TD><select name="ch" id='channelprod' onchange="change_ref();">
<option value=''>---------------------</option>
<?
$res = mysql_query("SELECT * FROM channelprod ORDER BY ch");
while($valeur = mysql_fetch_assoc($res))
{
echo "<option value= ".$valeur["id_ch"];
if($id_ch==$valeur["id_ch"]) echo ' selected ';
echo ">".$valeur["ch"]."</option>";
}
?>
</select>


menu.js:
function change_ref()
{
getXhr();
xhr.open("POST","change_ref.php",true);
xhr.onreadystatechange = function(){ if(xhr.readyState 4 && xhr.status 200){
document.getElementById("produits").innerHTML =xhr.responseText;
}
}

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sel = document.getElementById('channelprod');
idchannel = sel.options[sel.selectedIndex].value;
xhr.send("id_ch="+idchannel);
}

change_ref.php
<select name='ref'><option value=''>------------------------------</option>
<?
$id_ch=$_POST["id_ch"];
$_SESSION['id_ch']=$id_ch;
$ref=$_SESSION['ref'];

$res = mysql_query("SELECT ref FROM produits WHERE id_ch='$id_ch' ORDER BY ref");
while($valeur = mysql_fetch_assoc($res))
{
echo "<option value= ".$valeur["ref"];
if($ref==$valeur["ref"]) echo ' selected ';
echo ">".$valeur["ref"]."</option>";
}
?>
</select>

Voilà, si vous savez, à vous les mecs!
merci d'avance
dam-37

2 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 févr. 2006 à 14:02
Salut,


change_ref.php
<select name="ref"><option value="">------------------------------</option>
<?php
$id_ch=$_POST['id_ch'];
$_SESSION['id_ch']=$id_ch;
$ref=$_SESSION['ref'];
$res = mysql_query('SELECT ref FROM produits WHERE id_ch="'.$id_ch.'" ORDER BY ref') or die('ERREUR SQL ligne : '.__LINE__.mysql_error(););
while($valeur = mysql_fetch_assoc($res))
{
echo '<option value= '.$valeur['ref'];
if($ref==$valeur['ref']) echo ' selected ';
echo '>'.$valeur['ref'].'</option>';
}
?>
</select>

Bon, j'ai fais que corriger des imperfections, et non ton problème... sinon, il doit te manquer un session_start();...



envoi nous des sources javascript et non des sources php, sinon, tu t'es trompé de forum...


pour vérifier tes valeurs :

remplace :

xhr.send("id_ch="+idchannel);



par :



alert(id_channel);

xhr.send("id_ch="+idchannel);



Bonne chance: )


In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
0
dam_37 Messages postés 32 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 27 février 2006
27 févr. 2006 à 09:17
Salut,
AJAX signifie Asynchronous Javascript and XML et c'est la méthode que j'utilise.
Je pense donc que le meilleur forum pour poser ma question, c'est javascriptfr et non phpcs mais si quelqu'un connais un forum plus adéquate pour ma question, je le veux volontiers! j'ai tout de même scruté les forums quelques heures avant de poser ma question et j'avoue que ce sujet n'est pas très redondant.

Merci sinon pour t'es correction, c'est toujours utile.
J'utilise un session_start(); je ne mets pas l'intégralité du code pour pas allourdir la page.
je vais tester le alert().
merci @+

dam-37
0
Rejoignez-nous