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] Conflit entre 2 listes déroulantes


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [AJAX] Conflit entre 2 listes déroulantes
    Bonjour,

    J'appelle à l'aide car je ne m'en sors pas et cela commence à me décourager alors que je suis sûre que c'est un truc bénin. Mais pour le résoudre il me faut des yeux neufs sur mon code.

    Je vous explique : je fais un back-office pour de l'archéologie. J'ai créé des personnes dans ma base via ce back-office. Une personne a obligatoirement 1 nom, 1 prénom, 1 email, 1 profession et 1 date de naissance. Facultativement, 1 adresse, 1 téléphone et une ville. La profession et la ville sont à choisir dans une liste déroulante. Jusque là, j'espère ne pas vous avoir perdu !?
    Mon soucis commence : la création se fait correctement. Mais quand je choisis une des personnes pour vérifier si je récupère bien les informations saisies précédemment ou pour modifier (comme dans un cas standard de back-office), ma liste déroulante de professions s'alimente avec les villes comme ma liste déroulante de villes......

    N.B. : A la validation de création d'une personne, je choisis au hasard une ville si elle n'a pas été sélectionnée (pour des raisons de facilité).

    Voici mon code quand je choisis une personne :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    function Choisir(chx, quoi)
    {
    	a=getxhr();
    	a.open("POST","../php/choisir.php",true);
    	a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	a.onreadystatechange = function()
    	    { 
    	        if(a.readyState  == 4)
    	        {
    	            if(a.status  == 200)	
    				{					
    					result=a.responseText.split(';');
    					switch (quoi)
    					{
    						case "Cate" :
    							divf='<form method="post"><label for="idca">Identifiant : </label><input id="idca" type="text" readonly="readonly" name="idca" value="'+result[0]+'"/><br/><br/>';
    							divf+='<label for="nomca">Nom : </label><input id="noca" type="text" name="ncat" value="'+result[1]+'"/>';
    							divf+='</form>';
    							break;
    						case "Conse" :
    							divf='<form method="post"><label for="idco">Identifiant : </label><input id="idco" type="text" readonly="readonly" name="idco" value="'+result[0]+'"/><br/><br/>';
    							divf+='<label for="nomco">Nom : </label><input id="noco" type="text" name="ncons" value="'+result[1]+'"/>';
    							divf+='</form>';
    							break;
    						case "Pays" :
    							divf='<form method="post"><label for="niso">N° ISO : </label><input id="idp" type="text" readonly="readonly" name="numiso" value="'+result[0]+'"/><br/><br/>';
    							divf+='<label for="siso">Sigle ISO : </label><input id="sigp" type="text" name="sgliso" value="'+result[1]+'"/><br/><br/>';
    							divf+='<label for="nomp">Nom : </label><input id="nomp" type="text" name="npays" value="'+result[2]+'"/>';
    							divf+='</form>';
    							break;
    						case "Pers" :
    							divf='<form method="post"><label for="idpe">Identifiant : </label><input id="idpe" type="text" readonly="readonly" name="idpe" value="'+result[0]+'"/><br/><br/>';
    							divf+='<label for="nompe">Nom : </label><input id="nope" type="text" name="npers" value="'+result[1]+'"/><br/><br/>';
    							divf+='<label for="pnompe">Prénom : </label><input id="pnope" type="text" name="pnpers" value="'+result[2]+'"/><br/><br/>';
    							divf+='<label for="pnompe">Email : </label><input id="emape" type="text" name="empers" value="'+result[6]+'"/><br/><br/>';
    							divf+='<label for="nompr">Profession : </label>';
    							divf+='<SELECT id="spro" name="nprof[]" onchange="this.options[this.selectedIndex].value">';
    								getid("form").innerHTML=divf; //permet d'alimenter la liste des professions	
    									//alert(result[10]);
    								ListerProf(result[10]);
    							divf+='</SELECT><br/><br/>';
    							//divf+='<label for="nompr">Profession : </label><input id="nopr" type="text" name="nprof" value="'+result[9]+'"/><br/><br/>';
    							divf+='<label for="ddnpe">Né(e) le : </label><input id="ddnpe" type="text" name="ddnpers" value="'+result[3]+'"/><br/><br/>';
    							divf+='<label for="telpe">Téléphone : </label><input id="telpe" type="text" name="telpers" value="'+result[4]+'"/><br/><br/>';
    							divf+='<label for="adrpe">Adresse : </label><input id="adrpe" type="text" name="adrpers" value="'+result[5]+'"/><br/><br/>';
    							divf+='<label for="cpv">CP : </label><input id="cpv" type="text" name="cpv" value="'+result[7]+'" onchange="RecupererVille(0)"/><br/><br/>';
    							divf+='<label for="nomv">Ville : </label><select id="novi" name="nvil[]">';
    								getid("form").innerHTML=divf; //permet d'alimenter la liste des villes
    								RecupererVille(result[8]);
    							divf+='</select><br/><br/>';
    							//divf+='<label for="cpv">CP : </label><input id="cpv" type="text" name="cpv" value="'+result[7]+'"/><br/><br/>';
    							//divf+='<label for="nomv">Ville : </label><input id="novi" type="text" name="nvil" value="'+result[8]+'"/>';	
    							divf+='</form>';
    							break;
    						case "Prof" :
    							divf='<form method="post"><label for="idpr">Identifiant : </label><input id="idpr" type="text" readonly="readonly" name="idpr" value="'+result[0]+'"/><br/><br/>';
    							divf+='<label for="nompr">Nom : </label><input id="nopr" type="text" name="nprof" value="'+result[1]+'"/>';
    							divf+='</form>';
    							break;						
    					}
     
    					getid("btn_mod").disabled=false;
    					getid("btn_sup").disabled=false;
    					getid("btn_crt").disabled=true;
    					getid("form").innerHTML=divf;
    	            }
    				else 
    	                alert("Error code " + a.status);
    	        }
    	    };
    	a.send("chx="+chx+"&obj="+quoi);
    }
    Le code pour la liste déroulante des villes :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    function RecupererVille(nb)
    {
    	a=getxhr();
    	a.open("POST","../php/recuperer_ville.php",true);
    	a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	a.onreadystatechange = function()
    	{ 
    		if(a.readyState  == 4)
    		{
    			if(a.status  == 200)	
    			{		
    				if (a.responseText!="-1")
    				{
    					result=a.responseText.split('*');
    					if (nb==0)
    					{
    						getid('novi').innerHTML='<OPTION value="0" SELECTED>Sélectionner une ville';
    					}
    					for(i=0;i<result.length-1;i++)
    					{
    						enreg=result[i].split(';');
     
    						if (nb==enreg[0])
    						{
    							getid('novi').innerHTML+='<OPTION value="'+enreg[0]+'" SELECTED>'+enreg[1];
    						}
    						else
    						{
    							getid('novi').innerHTML+='<OPTION value="'+enreg[0]+'">'+enreg[1];
    						}
    					}
    				}
    				else
    				{
    					alert ("Le code postal n'existe pas.");
    				}
    			}
    			else 
    				alert("Error code " + a.status);
    		}
    	};
    	a.send("cp="+getid('cpv').value);
     
    }
    Le code de la liste déroulante des professions :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function ListerProf(id)
    {
    	alert('id : '+id);
    	a=getxhr();
    	a.open("POST","../php/lister_prof.php",true);
    	a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	a.onreadystatechange = function()
    	{
    		alert ('state : '+a.readyState);
    		if(a.readyState == 4)
    		{
    			if(a.status == 200)
    			{
    				alert ('response : '+a.responseText);
    				if (a.responseText!="-1")
    				{
    					result=a.responseText.split('*');
    					if (id==0)
    					{
    						getid('spro').innerHTML='<OPTION value="0" SELECTED>Sélectionner une profession';
    					}
    					for(i=0;i<result.length-1;i++)
    					{
    						enreg=result[i].split(';');
    						alert ('enreg :'+enreg[0]);
    						if (id==enreg[0])
    						{
    							getid('spro').innerHTML+='<OPTION value="'+enreg[0]+'" SELECTED>'+enreg[1];
    						}
    						else
    						{
    							getid('spro').innerHTML+='<OPTION value="'+enreg[0]+'">'+enreg[1];
    						}
    					}
    				}
    				else
    				{
    					alert ("Aucune profession a été créée.");
    				}
    			}
    			else
    				alert("Error code " + a.status);
    		}
    	};
    	a.send();
    }

    Merci de m'avoir lue et par avance merci de vos réponses.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Alors avec le code source que tu donne tel quel il ne semble pas y avoir de problème.

    Si ta liste s'alimente mais pas avec les bonnes données c'est qu'il semblerais que tu n'est pas modifié un de tes copier/coller.

    recuperer_ville.php
    lister_prof.php

    A tu la possibilité d'afficher le code de ces pages ? J'aurais tendance à penser que les requêtes SQL associées à tes deux pages sont les même et liste les villes.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Mes deux pages php récupèrent bien des choses différentes car lors de la création de la personne, elles fonctionnent mais je poste sans soucis leur code.

    recuperer_ville.php :
    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
    25
    26
    <?php
    	if (isset($_POST['cp']) && !empty($_POST['cp']))
    	{
    		$trouve=false;
    		$ma_bd=new PDO('mysql:host=localhost;dbname=archeo','root','');
    		$ma_bd->exec("SET NAMES UTF8");
    		$req="SELECT * FROM villes WHERE cp LIKE '".$_POST['cp']."%' ORDER BY nomVille ASC";
    		try
    		{
    			foreach($ma_bd->query($req) as $vil)
    			{
    				echo $vil['idVille'].";".$vil['nomVille']."*";
    				$trouve=true;
    			}
    			$ma_bd=null;
    		}
    		catch(Exception $e)
    		{
    			echo 'Exception reçue',  $e->getMessage(), "\n";
    		}
    		if (!$trouve)
    		{
    			echo "-1";
    		}
    	}
    ?>

    lister_prof.php :
    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
    <?php
    	$trouve=false;
    	$ma_bd=new PDO('mysql:host=localhost;dbname=archeo','root','');
    	$ma_bd->exec("SET NAMES UTF8");
    	$req="SELECT * FROM professions ORDER BY nomProfession ASC";
    	try
    	{
    		foreach($ma_bd->query($req) as $prof)
    		{
    			echo $prof['idProfession'].";".$prof['nomProfession']."*";
    			$trouve=true;
    		}
    		$ma_bd=null;
    	}
    	catch(Exception $e)
    	{
    		echo 'Exception reçue',  $e->getMessage(), "\n";
    	}
    	if (!$trouve)
    	{
    		echo "-1";
    	}
    ?>

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Plusieurs points de contrôle :

    - Tester RecupererVille() sans rien d'autre en test unitaire.
    - Tester Choisir() en test unitaire (avec tout les cas du case).

    - RecupererVille est il ok ?
    - Choisir est il ok ?

    - Cas non ok ?
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Tout est ok.

    Le cas qui ne fonctionne pas est quand je choisis une personne (=> case "Pers") pour pouvoir modifier un de ses attributs, la liste déroulante des professions s'alimente avec la liste des villes au lieu de la liste des professions.

    lister_prof fonctionne également car elle est appelée quand je crée une personne et tout est correcte.

    Mes formulaires de création et de modification sont les mêmes : ils contiennent les mêmes éléments mais alimentés soit à vide pour la création soit avec la base de données en modification.

  6. #6
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Dans ce cas,

    Breakpoint sur : result=a.responseText.split(';');
    Valeur de result? (si 'quoi' = 'Pers')
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    si quoi = 'pers'
    result =" idPers;nomPers;pnomPers;ddnPers;telPers;adrPers;emailPers;cpVil;idVil;nomProf;idProf".

  8. #8
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    ça c'est le fonctionnelle, pas un cas concret, donne moi le résultat de la variable quand ça déconne, sinon on va pas avancer..
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  9. #9
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    6,Adamn,Jean-Pierre,0000-00-00,,,jp.adamn@yahoo.fr,56690,21652,Anthropologue,1

    Voilà ce que j'ai dans result actuellement (ma liste déroulante des professions ne s'alimente pas ou avec les villes ayant le même code postal présent dans result)

  10. #10
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Dans ton code tu as plusieurs fois a=getxhr();.

    Peut tu mettre var devant et changer de nom de variable dans chaque fonction, histoire d'être sûr que ça ne pose aucun problème.

    • var ajx_recupVille = getxhr();
    • var ajx_choisir = getxhr();
    • ...
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  11. #11
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Golgotha, you are my God !!!!!! Cela fonctionne !! ^^ (essai rapide avant d'aller dormir, je regarderai cela plus amplement après une bonne nuit)

    Je mets en résolu mais attention au retour éventuel !!

  12. #12
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/06/2013, 16h24
  2. [AJAX] Positionnement dans une liste déroulante
    Par Paul75 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/04/2007, 11h25
  3. [AJAX] Comment rafraîchir une liste déroulante alimentée par ajax
    Par lodan dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/03/2007, 09h01
  4. [AJAX] Conflit entre Ajax et Javascript
    Par cocaetjusdorange dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/05/2006, 18h16
  5. [AJAX] Synchronisation de deux listes déroulantes
    Par Le Rebel dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/03/2006, 23h28

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