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

Langage PHP Discussion :

Formulaire, zone déroulante et ajax


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 247
    Par défaut Formulaire, zone déroulante et ajax
    Bonjour,

    J'ai un formulaire d'inscription qui demande un code postal et une localité.
    Dans ma base de données j'ai stocké tous les codes postaux et les localités.

    Quand j'encode les chiffres du code postal, la zone déroulante avec la(les) commune(s) correspondante se met a jour.

    Ex: je tape 5, la liste contient toutes les communes avec le code postal => 5000 à 5999; je tapes 51, j'ai toutes les communes de 5100 à 5199, etc

    Cela fonctionne très bien sous internet explorer par contre sous firefox la liste ne se met pas à jour, la zone deroulante contient une autre zone déroulante.

    ex:
    sous IE:


    sous Firefox:


    Voici le code php:
    Page avec le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
          <!-- code pour localité -->
          <tr>
           <td align="right"><label>Localité</td>
           <td><input class="zonesaisie" type="text" name="cpclient" id="cpclient" size="5" value="'.$localite.'" onkeyup="CPToLoc()"/>
           <div id="locclient" style="display:inline"><select class="zonesaisie" name="locclient" id="locclient" onchange="LocToCp()">';
     
    $sql = SQL_Query("select * from t_localite order by Localite");
    while ($obj = SQL_Object($sql))
    {
    	echo '<option value="' .$obj->IdLocalite .'">'.$obj->Localite .'</option>'."\n";
     
    }
    echo ' </select></div></td>
    code de la fonction Javascript
    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
    21
     
    function CPToLoc()
    {
    	var choix = document.forms[0].elements['cpclient'].value;
    	var xhr = getXhr()
    	// On définit 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){
    			//alert(xhr.responseText);
    			leselect = xhr.responseText;
    			// On se sert de innerHTML pour rajouter les options a la liste
    			//alert(leselect);
    			document.getElementById('locclient').innerHTML = leselect;
    		}
    	}
    	xhr.open("POST","includes/get_localites.php",true);
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	xhr.send("Loc=0&CodePostal="+choix);
    }
    la fonction GetHXR s'occure d'instancier XMLHTTPREQUEST pour firefox ou IE.

    Code du fichier php récupérant les données:
    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
     
    $connexion=SQL_Connexion();
    	echo '<select class="zonesaisie" name="locclient" id="locclient" onchange="LocToCp()">';
    	if (isset($_POST['CodePostal']))
    	{
    		$cp = $_POST['CodePostal'];
    		$sql = "select IdLocalite,CodePostal,Localite from t_localite where CodePostal like '$cp%' order by Localite";
    		$sql = SQL_Query($sql);
    		while($req = SQL_Array($sql))
    		{
    			echo '<option value="' .$req['IdLocalite'] .'">'.htmlentities($req['Localite']) .'</option>'."\n";
    		}
    	}
    	echo '</select>';
    SQL_Disconnect($connexion);
    Faut-il modifier autre chose pour que cela fonctionne sous les deux navigateurs ?

    Firefox version 2.0.0.3
    IE 7

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Par défaut
    si ça fonctionne sous internet explorer, c'est que le problème ne viens très certainement pas de php.

    ton problème semble provenir de javascipt. par consequent tu ne poste pas dans la bonne section.

  3. #3
    Invité
    Invité(e)
    Par défaut
    je sais pas pkoi ca marche sous ie ... :

    Ton fichier .php envoi une reponse de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select class="zonesaisie" name="locclient" id="locclient" onchange="LocToCp()">...[options]...</select>
    et ca tu l'insere dans un select s'appelant "locclient" donc tu insere bien un select dans un autre select.

    Soit tu vire le select dans ton fichier php qui genere la reponse.

    Soit tu fait un peu plus propre en envoyant un chti fichier xml et en utilisant comme il faut la dom, qui te permet d ajouter et d'enlever des option plus joliement et facilement que avec innerHtml, mais c'est a toi de voir ...

  4. #4
    Membre éclairé Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Par défaut
    Bonsoir,

    J'ai développé un script similaire (pays, code postaux et localité) mais avec la bibiliothèque XAJAX pour PHP, plus simple et conviviale que du ajax pur (cela m'arrange je n'aime pas trop le javascript à développer bien que très pratique pour certaine fonctionnalité)

    Pour ma part, je suis toujours au stade de développement et je tourne sous MAC et en local. Mais j'ai constaté que sous Safari mon script fonctionne et pas sous firefox (par contre je n'ai pas encore trouvé ma réponse.)

    Je suis en train de bosser dessus donc patience peut être que cela pourra t'aider.

    En attendant, je te propose d'aller voir le site de xajax si tu ne connais pas.

    http://www.xajaxproject.org/

    Aller à bientôt.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/03/2009, 15h50
  2. Formulaire Zone de liste déroulante
    Par ThieBEN dans le forum IHM
    Réponses: 6
    Dernier message: 17/07/2007, 13h43
  3. Réponses: 1
    Dernier message: 23/05/2007, 22h12
  4. [Formulaire]zone de liste déroulante
    Par pauline29 dans le forum IHM
    Réponses: 1
    Dernier message: 23/03/2007, 14h58
  5. [XL] Formulaires: zone de liste déroulante
    Par WagaSeb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/03/2007, 14h59

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