IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Listes déroulantes


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Points : 67
    Points
    67
    Par défaut [AJAX] Listes déroulantes
    Bonjour!!

    Je dois mettre à jour 5 listes déroulantes en cascade, chacune en fonction du contenu de la précédente.
    J'ai fait quelque chose qui marche, mais mon problème est que lorsque l'une des valeurs contient une apostrophe ca ne marche plus.

    je vous donne le code pour les 2 premières listes, je saurais me débrouiller pour les autres... Je précise que je vais chercher mes valeurs dans une base Oracle.

    Voilà :


    Première liste en PHP qui va appeler l'ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <select name='batiment' id='batiments' onclick='change_batiment()'>
            <?php
            $sql = new oracle();
            $sql->connect();
            $query = "select distinct LOCATION from LOCATION order by LOCATION";
                    $sql->execute($query);
                 for ($i=0;$i<$sql->nbresults();$i++)
            {
                echo '<option value="'.$sql->recup($i,"LOCATION").'">'.$sql->recup($i,"LOCATION").'</option>';
            }
          
            $sql->fermer();
            ?>
        </select>
    Code Ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function change_batiment(){
                    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){
                            di = document.getElementById('activites');
                            di.innerHTML = xhr.responseText;
                        }
                    }
                    // on va envoyre les infos
                    xhr.open("POST","activite.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 du batiment
                    idbatiment = document.getElementById("batiment").options[document.getElementById("batiment").selectedIndex].value;
                    xhr.send("idbatiment="+idbatiment);
                 }

    2ème liste en php appelée par l'ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <select name='activite' onchange='change_activite()'>
    <?php
        if(isset($_REQUEST["idbatiment"])){
            include("oracle.php");
            $sql = new oracle();
            $sql->connect();
    $batiment=$_REQUEST["idbatiment"];
                    
            $query = "select distinct SUBLOCATION1 from LOCATION WHERE LOCATION='".$batiment."'";           
                    $sql->execute($query);
                       for ($i=0;$i<$sql->nbresults();$i++)
                {
                    echo '<option value="'.$sql->recup($i,"SUBLOCATION1").'">'.$sql->recup($i,"SUBLOCATION1").'</option>';
                }
                $sql->fermer();
        }
        else
            echo "<option value='-1'>Choisir un site</option>";
        echo "</select>";
    ?>

    et enfin quelque part dans le code, l'id pour afficher la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <label>Activite</label>
    <div id='activites' >
        <select name='activite' onclick='change_activite()'>
            <option value='-1'>Choisir une activité</option>
        </select>
    </div>
    J'ai déjà essayé quelques trucs avec des addslashes ou autre mais sans succès.

    Merci de votre aide

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par gscorpio
    J'ai fait quelque chose qui marche, mais mon problème est que lorsque l'une des valeurs contient une apostrophe ca ne marche plus.
    A quel niveau est-ce que ça ne marche pas?

    Tu as essayé htmlentities en PHP?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    Salut!

    Merci d'avoir répondu.
    En fait j'ai aucune erreur donc je ne sais pas vraiment ce qui cloche.
    Avec tous les tests que j'ai fait, il semble que ca soit au niveau du remplissage des listes en PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      echo '<option value="'.$sql->recup($i,"LOCATION").'">'.$sql->recup($i,"LOCATION").'</option>';
    Ici on remplit la première (la value et le texte affiché contiennent une apostrophe) mais la liste s'affiche en entier (l'apostrophe ne gêne pas le remplissage du reste de la liste).

    Ensuite on a l'ajax (je maitrise pas donc peut etre qu'il y a un problème aussi)
    Notamment sur cette ligne (pure supposition) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idbatiment = document.getElementById("batiment").options[document.getElementById("batiment").selectedIndex].value;
    Et enfin (là ou je pense le plus que le problème se situe), au niveau de l'extraction dans la base. (si on rajoute addslashes ou htmlentities, le test est faux : l\'entracte!=l'entracte)...

    Voici le code qui va chercher la valeur de la liste "batiment", qui est censées sélectionner les activités en lien avec ce batiment, les afficher dans la liste, et éventuellement en selectionner une si elle a déjà été remplie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $batiment=$_REQUEST["idbatiment"];
     
            $query = "select distinct SUBLOCATION1 from LOCATION WHERE LOCATION='".$batiment."'";		
    		$sql->execute($query);
           // if ($sql->execute($query)=="ok")
        //    {
                for ($i=0;$i<$sql->nbresults();$i++)
                {
                    echo '<option value="'.$sql->recup($i,"SUBLOCATION1").'"';
    					if ($sql->recup($i,"SUBLOCATION1")==$activite) echo' selected="selected"';
    				echo'>'.$sql->recup($i,"SUBLOCATION1").'</option>';
                }

Discussions similaires

  1. [AJAX] Listes déroulantes liées
    Par Jiraiya42 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/04/2008, 09h58
  2. [AJAX] Liste déroulante et tableau
    Par Ludodor dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/02/2008, 11h52
  3. [AJAX] Liste déroulante pour afficher les informations en ajax div ?
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 17/11/2006, 09h06
  4. [AJAX] Liste déroulante qui ne s'actualise pas avec XMLHttpRequest
    Par zoom61 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/11/2006, 09h52
  5. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo