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

AJAX Discussion :

[AJAX] Champ text et liste liés en AJAX


Sujet :

AJAX

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 58
    Points
    58
    Par défaut [AJAX] Champ text et liste liés en AJAX
    Bonjour,

    Je bloque sur mon formulaire d'inscription:
    Mon but est de remplir une liste déroulante avec des informations présentes dans ma base de données en fonction d'un champ du formulaire de type text (Concrètement, on tape un code postal dans un champ, et à la perte du focus, la liste qui suit propose les villes correspondantes à ce code postal)
    Jusque là ça fonctionne, la liste se créer correctement.
    Par contre, après validation du formulaire, je ne récupère aucune information de la liste.
    Donc au final je peux pas m'en servir...

    Mon formulaire:
    Code xhtml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form name="inscription" method="post" action="index.php?page=inscription-valide">
     
    Code postal:
    <input id="cp" class="obligatoire" type="text" name="on_cp" size="10" maxlength="15" onBlur="liste('cp', 'ville', 'ajax.php');">
    Ville:
    <div id="ville">
    	<select name="oc_ville">
    		<option value="-1">Choisir</option>
    	</select>
    </div>

    Ma fonction javascript:
    Code javascript : 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
     
    function liste(id1, id2, file)
    {
    	var xhr = getxhr();
    	xhr.onreadystatechange = function()
    	{
    		if (xhr.readyState == 4 && xhr.status == 200)
    		{
    			leselect = xhr.responseText;
    			document.getElementById(id2).innerHTML = leselect;
    		}
    	}
    	xhr.open("POST", file, true);
    	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    	sel = document.getElementById(id1);
    	cp = sel.value;
    	xhr.send("cp="+cp);
    }

    La page appelée par la fonction:
    Code php : 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
    22
    23
    24
     
    <?php 
     
    	if (isset($_POST['cp']))
    	{
    		$cp = $_POST['cp'];
     
    		$db = my_connect();
    		$sql = "select * from ville where cp = '$cp' order by ville";
    		$result= exec_req($sql);
     
    		echo "<select name='oc_ville'>";	
     
    		while($liste= mysql_fetch_array($result))
    		{
    			$id = $liste['idville'];
    			$ville = $liste['ville'];
    			echo "<option value=\"$id\"";	
    			echo ">$ville</option>";
    		}	
    	}		
    		echo "</select>";
    		deconnect($db);
    ?>

    La récupération des données du formulaire:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    $idville = $_POST['oc_ville']; //c'est la ligne 15
    ?>

    Sur la page de récupération j'ai le message d'erreur suivant:
    "Notice: Undefined index: oc_ville in C:\wamp\www\eboutique\inscription-valide.php on line 15"

    Pour info, j'ai suivi ce tuto pour faire des listes liées, je n'ai pas eu de problème, j'ai donc repris le même principe pour ce formulaire, et malgré un bon week end de recherche, je n'ai trouvé aucune erreur de syntaxe (ce qui ne veut pas dire qu'il n'y en a pas ^^) et aucune information pouvant m'aider sur les forums.
    Si quelqu'un pouvait me débloquer...

    Merci beaucoup.

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    C'est courant: ne pas reconstruire l'intégralité du select pour l'injecter sous forme de innerHTML, car cela fait sortir l'élément select du DOM.
    Il est préférable de récupérer tes données, supprimer le contenu du select et ajouter ensuite chaque option d'un point de vue programmation DOM comme expliquer dans la faq


    ERE

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Ok merci je vais étudier ça, mais pourquoi ça fonctionne dans le cas de 2 listes liées alors? Je vois pas en quoi c'est différent

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par bergie Voir le message
    Salut,

    Ok merci je vais étudier ça, mais pourquoi ça fonctionne dans le cas de 2 listes liées alors? Je vois pas en quoi c'est différent
    Plus d'infos sur ces posts: http://www.developpez.net/forums/d29...ect-innerhtml/ et http://www.developpez.net/forums/d44...elect-sous-ie/

    Bon dev,

    ERE

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Merci pour les liens ^^
    Alors j'ai fait autrement mais ça ne fonctionne toujours pas (la liste ne se rempli pas cette fois).

    Mon formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <form name="inscription" method="post" action="index.php?page=inscription-valide">
     
    Code postal:
    <input id="cp" class="obligatoire" type="text" name="on_cp" size="10" maxlength="15" onBlur="liste('cp', 'ville', 'ajax.php');">
    Ville:
    <select id="ville" name="oc_ville">
    	<option value="-1">Choisir</option>
    </select>
    Ma 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function liste(id1, id2, file)
    {
    	var leselect = document.getElementById(id2);
    	var xhr = getxhr();
    	xhr.onreadystatechange = function()
    	{
    		if (xhr.readyState == 4 && xhr.status == 200)
    		{
    			if (xhr.responseText != '')
    			{
    				var i,villes,nb,ville;
    				villes = xhr.responseText.split('/');
    				nb = villes.length;
    				leselect.options.length = 0;
     
    				for (i=0; i<nb; i++)
    				{
    					ville = villes[i].split('*');
    					leselect.option[i] = new Option(ville[1],ville[0]);
    				}
    			}
    			else
    			{
    				alert('la chaine retournée est vide...');
    			}
     
    		}
    	}
    	xhr.open("POST", file, true);
    	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    	sel = document.getElementById(id1);
    	cp = sel.value;
    	xhr.send("cp="+cp);
    }
    La page appelée par la fonction:
    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
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php 
    include("admin/bibliotheque/mysql.php");
     
            if (isset($_POST['cp']))
            {
                    $cp = $_POST['cp'];
                    
                    $db = my_connect();
                    $sql = "select * from ville where cp = '$cp' order by ville";
                    $result= exec_req($sql);
                            
                    while($liste = mysql_fetch_assoc($result))
                    {       
                            $id = $liste['idville'];
                            $ville = $liste['ville'];
                            if (isset($string))
                            {               
                                    $string = $string."/".$id."*".$ville;   
                            }
                            else
                            {
                                    $string = $id."*".$ville;
                            }
                    }       
            echo $string;
            }               
                    deconnect($db);
    ?>
    Apparement le problème se situerait au niveau de la création des options (leselect.option[i] = new Option(ville[1],ville[0]))
    Encore une fois je ne comprends pas pourquoi...
    Merci.

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut Etourderie
    Salut,

    ERE

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Points : 58
    Points
    58
    Par défaut

    Le boulet...
    Merci beaucoup tout fonctionne correctement maintenant
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formulaire avec champ texte et listes deroulantes liées
    Par tarah01 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/03/2011, 18h26
  2. [AC-2007] Requête sur un champ texte avec liste de choix
    Par chrisbou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/03/2010, 11h00
  3. champs texte rempli Liste (sans bouton valider)
    Par sami117 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/02/2009, 13h31
  4. Réponses: 1
    Dernier message: 19/03/2008, 18h52
  5. champ texte et liste déroulante
    Par angeleyes24 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/03/2008, 09h32

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