Deux listes liées

Signaler
Messages postés
27
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
6 décembre 2010
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour,

je veux crée deux liste liées j'utilise un code ajax que j'ai trouvé dans un forum,mais j'arrive pas a le faire fonctioner,

voici les deux listes dans le formulaire

<tr>

<td width="230">famille:

<select name="typeproduit" id="typeproduit" onchange='go()'>

<?php

$rs=mysql_query("SELECT DISTINCT desg from typeproduit");

while($ligne=mysql_fetch_array($rs)){

echo"<option>".$ligne['desg']."</option>";

}

?>

</select></td>

<td width="233">produit:





</td>

voici le script

<script type='text/javascript'>

function getXhr(){

var xhr = null;

if(window.XMLHttpRequest) // Firefox et autres

xhr = new XMLHttpRequest();

else if(window.ActiveXObject){ // Internet Explorer

try {

xhr = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

}

else { // XMLHttpRequest non supporté par le navigateur

alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");

xhr = false;

}

return xhr;

}

/**

* Méthode qui sera appelée sur le click du bouton

*/

function go(){

var xhr = getXhr();

// On défini ce qu'on va faire quand on aura la réponse

xhr.onreadystatechange = function(){

// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState 4 && xhr.status 200){

leselect = xhr.responseText;

// On se sert de innerHTML pour rajouter les options a la liste

document.getElementById('produit').innerHTML = leselect;

}

}

// Ici on va voir comment faire du post

xhr.open("POST","ajaxproduit.php",true);

// ne pas oublier ça pour le post

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

// ne pas oublier de poster les arguments

// ici, l'id de l'auteur

sel = document.getElementById('typeproduit');

codeTypeP = sel.options[sel.selectedIndex].value;

xhr.send("codeTypeP="+codeTypeP);

}

</script>

voici le fichier de réponse

<?php

echo'<select name="produit" id="produit">';

if(isset($_POST["codeTypeP"])){

$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

mysql_select_db("sbd_gestion_commerciale") or die(mysql_error());

$rs=mysql_query("SELECT DISTINCT nom from produit where codeTypeP='".$_POST["codeTypeP"]."'");

while($ligne=mysql_fetch_array($rs)){

echo"<option>".$ligne['nom']."</option>";

}

}

echo'</select>'.'</td>';

?>

merci d'avance

5 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,

ben déjà, il me semble  qu'il y a plusieurs id="produit" non ?

echo'<select name="produit" id="produit">';
      [ sans parler des name, pour IE c'est pareil ! ]

ensuite, il faut mieux cerner ton problème !
dans la réponse du php ?
fais des alert, du pas à pas...

des exemples de select liés ( ajax ou pas ) qui fonctionnent,
il y en a des masses
le mien ( si on peut dire, car c'est toujours pareil en fait )

Cordialement [mon Site] [M'écrire] Bul
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
en plus tu dois avoir des errurs "html" !
tu es déjà dans  un td, pourquoie en rajouter
dans la réponse du serveur ?
par exemple : echo'</select>'.'</td>';
Messages postés
27
Date d'inscription
samedi 26 janvier 2008
Statut
Membre
Dernière intervention
6 décembre 2010

tout d'abord bul3 merci pour ta réponse
j'ai utilisé ton code mais malheureusement ma deuxième liste est encore vide
 voici le code que j'utilise

<head>
<script type="text/javascript">
function xmlhttp()
{ var x;
try {
 x = new ActiveXObject("Microsoft.XMLHTTP"); }
 catch (e)
 { try
 { x = new ActiveXObject("Msxml2.XMLHTTP"); }
 catch (e) { try { x = new XMLHttpRequest(); } catch (e) { x=false; } } } return x; } function appel() { var xml = xmlhttp(); if(!xml) { alert("XmlHttpRequest non supporté"); } else { xml.onreadystatechange = function() { if(xml.readyState==4) { var opt=xml.responseText.split("\t"); tb2.length=0; for ( var n=1;n<opt.length;n++ ) { tb2.length++; tb2.options[tb2.length-1].text=opt[n]; } } } xml.open("GET", "Ajaxproduit.php?tbl2="+tb1.options[tb1.selectedIndex].text, true); xml.send(null); } }
</script>
voici le formulaire 

<tr>
             <td width="230">famille:
          <select name="tb1" id="tb1"  onchange='appel();'>
          <option value='-1'>Aucun</option>

              <?php
       
          $rs=mysql_query("SELECT DISTINCT desg from typeproduit");
          while($ligne=mysql_fetch_array($rs)){
          echo"<option value='".$ligne['codeTypeP']."'>".$ligne['desg']."</option>";

}
         
         
?>
          </select></td>
          <td width="233">produit:
          <select    name="tb2" id="tb2"> 
      </select></td>

voici la réponse

<?php
header('Content-type:text/html;charset=ISO-8859-1');
$co=mysql_connect("localhost","root","");
$dbnom="produit";
 $db=mysql_select_db($dbnom,$co);
 $rch="WHERE t2t1ind='".$_GET["tbl2"]."'";
 $res=mysql_query("SELECT * FROM produit ".$rch,$co); $max=@mysql_num_rows($res);
 $t="";
 for ($nb=0;$nb<$max;$nb++) {
 $i=mysql_result($res,$nb,"t2ind");
 $t.="\t".$i; }
 echo $t; mysql_close($co);
?>

merci d'avance
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
1° tu utilises tb2 où est définie cette variable ?
2° contrôle la réponse d'ajax
    dans appel()  fais un alert(xml.responseText);

Navigateurs |Quelques Explications |----
Chrome
, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger FireBug, ----
Internet
Explorer
, activer le deboggage : Outils/options Internet/Avancés
dans la liste, sous "Navigation" : décocher
o Afficher une notification de chaque erreur de script
o Désactiver le débogage de Scripts (Internet Explorer)
et mieux (pour IE < 8) : télécharger le Debogger IE
voir aussi : DebugBar et Companion JS, ----
K-Meleon
, utils / Cons, ----
Opera
, utils / Asole d'erreurs, ----
Safari
, Debug / Show JavaScript Console
° modifier Fichier com.apple.Safari.plist situé dans le
répertoire : Support:\Documents and Settings\utilisateur
\Application Data\Apple Computer\Safari\Preferences\
y ajouter <key>IncludeDebugMenu</key>
----
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
il doit aussi te falloir adapter les noms des champs de la bse de données : $rch"WHERE t2t1ind '".$_GET["tbl2"]."'";
la clé primaire est bien nommée t2t1ind ?