Bonjour à tous,
Voilà mon problème :
J'ai une page PHP contenant deux listes.
Ma première liste est remplie via une requete sur mon serveur (je possède EasyPHP).
Au clique sur une valeur de la liste, je veux mettre à jour ma seconde liste.
Pour effectuer cela, j'utilise le code suivant :
test1.php------------------------------------------<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/javascript">
function requestmenu(f)
{
var l1 = f.elements["list1"]; //Prendre de la liste des briques
var l2 = f.elements["list2"]; //Prendre la liste des lignes de produit
var index = l1.selectedIndex; // Prendre la valeur sélectionnée dans la liste des briques
if(index < 1)
l2.options.length = 0;
else {
var xhr_object = null;
if(window.XMLHttpRequest) // Sous Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) //Sous Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
xhr_object.open("POST", "test1.php", true);
xhr_object.onreadystatechange = function anonymous() {
if(xhr_object.readyState == 4)
eval(xhr_object.responseText);
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var data = "brique="+escape(l1.options[index].value)+"&form="+f.name+"&select=list2";
xhr_object.send(data);
}
}
</script>
</head>
<?php
include ("commun/connexion.inc.php"); // Ouvrir une connexion à la BD
echo" <script language=\"javascript\"> \n";
$query = "SELECT `DOM_VENTE` FROM `ligne_produits` WHERE `BRIQUE` = '".$_POST["brique"]."'";
$query .= " ORDER BY `DOM_VENTE`";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 0;';
while($r = mysql_fetch_array($result))
echo 's.options[s.options.length] = new Option("'.$r["DOM_VENTE"].'");';
echo "</script>\n";
?>
<body>
<form class="CenteredForm" name="form_selects" id="form_selects" action="" method="" onsubmit="return false;">
<fieldset>
<legend>Faites un choix dans la liste de gauche<br />et observez le résultat dans celle de droite</legend>
<div class="Left">
<?php
//On sélectionne toutes les lignes de produit
$sql="SELECT DISTINCT (BRIQUE)
FROM ligne_produits
ORDER BY DOM_VENTE ASC";
//On exécute la requete
$req= mysql_query($sql);
//on créer une liste de lignes de produit
echo '<select name="list1" id="list1" onchange="requestmenu(this.form)">
<option value="" selected="selected">-*- BRIQUES -*-</option>';
while($row = mysql_fetch_array($req))
{
echo '<option value="'.$row['BRIQUE'].'">'.$row['BRIQUE'].'</option>';
}
echo '</select><br/><br/>';
?>
<select name="list2" id="list2" class="ButtonL">
<option value="" selected="selected">-*- LIGNES DE PRODUIT -*-</option>
</select>
</div></fieldset></form>
</body>
</html>
------------------------------------------Sous FF (v1.5.0.7) : rien ne se passe quand je clique sur un choix.
Sous Ie (v 6.0) :j'obtiens un message "syntax error" au niveau de ma fonction eval( ... ).
Ma question : Pouvez vous m'aider à comprendre pourquoi la fonction eval me pose problème ?
Note : La connexion à la BD et l'affichage de la première liste se fait correctement mais j'ai l'impression que je rentre correctement dans la fonction requestmenu(f) uniquement quand je choisi la premiere valeur de ma list1, soit la valeur déjà mise en selected.
Je vous remercie d'avance et j'espère que vous pourrez me venir en aide.