Rafraichir la page via choix dans liste

Résolu
pasdie Messages postés 2 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 14 août 2007 - 14 août 2007 à 11:28
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 14 août 2007 à 14:12
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 !
'.$query.'
'.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";
?>

<form class="CenteredForm" name="form_selects" id="form_selects" action="" method="" onsubmit="return false;">

<fieldset>

<legend>Faites un choix dans la liste de gauche
et observez le résultat dans celle de droite</legend>

            <?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>

';
            ?>

<select name="list2" id="list2" class="ButtonL">

<option value="" selected="selected">-*- LIGNES DE PRODUIT -*-</option>

</select>

</fieldset></form>



</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.

4 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 août 2007 à 12:27
il est vrai que mon exemple n'est pas avec ajax, mais au fond,
    ça ne change pas grand chose.
    la réponse du php sera affichée ou gérée par le  javascript.
<hr />


Cordialement                Bul         [mon Site]     [M'écrire]



<hr />






En généralement, c'est totalement absurde de généraliser.
3
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 août 2007 à 12:11
Bonjour,

lu chez SelfHTML,

eval()
Interprète un argument à transmettre et renvoie le résultat.
Si l'argument transmis peut être interprété comme une opération de calcul,
l'opération est effectuée et son résultat est retourné.
Cette méthode permet aussi des opérations de calcul complexes avec expressions entre parenthèses.
Cette fonctionnalité est très pratique pour, avec une seule commande, faire calculer des opérations
 notées en tant que chaînes de caractères.
Si l'argument transmis peut être interprété en tant qu'objet ou propriété d'objet, l'objet ou la propriété
 d'objet est retournée.
Ce qui est important quand une chaîne de caractères (par exemple le contenu d'un champ de formulaire
 ou le paramètre transmis à une fonction) doit être interprété en tant qu'objet.
Provoque un message d'erreur si l'expression transmise ne peut être interprétée.

on ne peut donc pas faire eval ici sur une réponse  de php.

c'est l'histoire des select liés.

de mémoire d'Alzheimer, il y a un exemple en php ici :
    http://www.codyx.org/snippet_listes-deroulantes-liees_89.aspx
sinon :
http://marcel-bultez.chez-alice.fr/documents/PHP/PHP.php 

    rechercher

    "Select qui dépend d'un autre

", c'est un exemple.






<hr />



Cordialement                Bul         [mon Site]     [M'écrire]



<hr />






Généralement, c'est absurde de généraliser.
0
pasdie Messages postés 2 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 14 août 2007
14 août 2007 à 13:58
Merci beaucoup! Vous êtes bien la première personne qui a pu me renseigner complètement ! Mais vous savez, c'est bizare que l'eval ne puisse pas fonctionner, enfin dans ce cas là oui...je suis d'accord, mais sur un tuto javascript, le code source était réalisé de cette manière et on traitait des noms...Cependant dans le forum accolé au tuto tout le monde se plaignait qu'eval() ne marchait pas !

En tout cas je vous remercie et les URL fournient je pense, pourront m'être d'une grande aide :)

Bonne journée à vous.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
14 août 2007 à 14:12
si ça ne convient pas, il devrait me falloir quelques minutes  ;-))
pour adapter mon exemple, mais pas de raisons...
<hr />


Cordialement                Bul         [mon Site]     [M'écrire]



<hr />




En général, c'est totalement absurde de généraliser.
0
Rejoignez-nous