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 :

Récupération d'un SELECT


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut Récupération d'un SELECT
    Bonjour a tous,
    Mon problème se situe entre le HTML et le PHP: J'ai un formulaire avec plusieurs listes déroulantes (dont certaines conditionnées par du javascript) qui appelle une autre page de traitement qui va devoir récupérer les valeurs sélectionnées. Sa fait un bon momment que je m'arache les cheveux dessus et pourtant je ne comprend pas une des liste déroulante n'est pas récupérable(une seule), c'est une des deux qui est conditionnées par du javascript: voila le code source du 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
    15
    16
    17
    18
    <form method="post" action="index.php?action=consultdonne&amp;comparDonnee=ok&amp;DonneesComparform1=remplis&amp;valid=ok&amp;ecran1=ok">
    <fieldset>
    <label>Secteur</label>
    	<select name='secteur' id='secteur' onchange='go()'  >
    		<option value='-1'>Aucun</option>
    		<option value='5' >Consommation de l'industrie</option><option value='4' >Consommation du bâtiment</option><option value='3' >Consommation du transport</option><option value='2' selected='selected'>Production d'électricité</option><option value='2' >Production d'électricité</option><option value='1' >Production d'hydrogène</option><option value='6' >Production de chaleur</option></select>
    <label for="techno">Technologie 1</label>
    	<div id='technos' class="divdislpay">
    	<select name="techno" id="techno">
    		<option value='-1'>Choisir un secteur</option>//LISTE PARAMETRABLE PAR DU JS
    	</select>
    	</div>
    <label for="technocompar">Technologie 2</label>
    	<div id='technoss' class="divdislpay">
    		<select name="technocompar" id="technocompar">
    			<option value='-1'>Choisir un secteur</option>//LISTE PARAMETRABLE PAR DU JS
    		</select>
            </div>//SUIVE D'AUTRE LISTE
    pour récupérer les variable de l'autre coté je procède de manière on ne peut plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (isset($_POST['techno']))
    {
    //traitement
    }
    if (isset($_POST['technocompar']))
    {
    //traitement
    }
    Mais voila, sa ne marche pas en tout cas pas pour la liste "technocompar". je n'ai vraiment aucune idée d'où vient le problème. si vous avez une idée, Merci d'avance.

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Le problème n'a pas l'air de venir de ton html... et si tu nous montrais le js qui agit sur ces deux select ? ^^

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    Je suis d'acord avec toi car le premier marche très bien en plus le code java script était a la base fait pour marcher sur une seul liste, voila le code:

    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
    <script type='text/javascript'>
    	function getXhr()
    	{
            var xhr = null; 
    		if(window.XMLHttpRequest) // Firefox et autres
    			xhr = new XMLHttpRequest(); 
    		else if(window.ActiveXObject)
    		{ // Internet Explorer 
    			try 
    			{
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		    } 
    			catch (e) 
    			{
    			    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		}
    		else 
    		{ // XMLHttpRequest non supporté par le navigateur 
    		    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    			xhr = false; 
    		} 
            return xhr;
    	}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    	function go()
    	{		
    		var xhr = getXhr();
    		xhr.onreadystatechange = function(){
    			if(xhr.readyState == 4 && xhr.status == 200)
    			{
    				leselect = xhr.responseText;
    				document.getElementById('techno').innerHTML = leselect;
    			}
    		}
    		// Ici on va voir comment faire du post
    		xhr.open("POST","ajaxTechno.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 de l'auteur
    		sel = document.getElementById('secteur');
    		secteur = sel.options[sel.selectedIndex].value;
    		xhr.send("secteur="+secteur);
    	}
    </script>
    je l'ai trouvé dans les faq et il marchait impeccable tant qu'il n'y avait qu'une liste mais pour les besoins du prjet je dois faire une nouvelle page avec deux liste qui utilise cette fonction

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    derriere il y'a de l'ajax dont voici le code:
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
    </head>
    <body>
    <?php
    	session_start();
    	echo "<select name='techno'>";
    	if(isset($_POST["secteur"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("maquette_refcost");
    		$res = mysql_query("SELECT NUMTECHNO, NOMTECHNO FROM techno 
    			WHERE NUMSECTEUR=".$_POST["secteur"]." ORDER BY NOMTECHNO");
    		while($row = mysql_fetch_assoc($res))
    		{
    			if(isset($_SESSION['techno'])and $_SESSION['techno']==$row["NOMTECHNO"])
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'selected='selected'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    			else
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    		}
    	}
    	echo "</select>";
    ?>
    </body>
    </html>
    l'erreur ne viendrait elle pas de la ligne "echo "<select name='techno'>";" au début de ce script?

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Heu... on a un problème de structure, là...
    La portion de code html renvoyée par ton php reprend tous les éléments d'une page complète (html, head, body, etc.) et tu vas l'insérer dynamiquement dans le contenu d'un select ?

    >>> a priori ce morceau de php appelé par ajax ne devrait renvoyer que la partie à insérer, c'est-à-dire le code correspondant au contenu de ton select, c'est-à-dire une série d'options (sans <select proprieteMachin="truc"></select> qui ne correspond pas au "contenu" mais au "contenant"). Ca te permettra d'ailleurs d'insérer ce même contenu dans tes 2 select, de manière à ce qu'ils conservent leur name différent.

    Essaie ceci :
    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
    <?php
    	session_start();
    	//echo "<select name='techno'>";
    	if(isset($_POST["secteur"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("maquette_refcost");
    		$res = mysql_query("SELECT NUMTECHNO, NOMTECHNO FROM techno 
    			WHERE NUMSECTEUR=".$_POST["secteur"]." ORDER BY NOMTECHNO");
    		while($row = mysql_fetch_assoc($res))
    		{
    			if(isset($_SESSION['techno'])and $_SESSION['techno']==$row["NOMTECHNO"])
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'selected='selected'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    			else
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    		}
    	}
    	//echo "</select>";
    ?>
    et côté js tu insères le fragment dans chacun des select (j'ai conservé ta structure mais soit dit en passant : ça serait mieux avec les fonctions de construction DOM plutot qu'avec innerHTML, notamment pour des select... ^^ fais une recherche à ce sujet : "select DOM innerHTML" dans les forums web et tu verras de quoi je veux parler )
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		xhr.onreadystatechange = function(){
    			if(xhr.readyState == 4 && xhr.status == 200)
    			{
    				options = xhr.responseText;
    				document.getElementById('techno').innerHTML = options;
    				document.getElementById('technocompar').innerHTML = options;
    			}
    		}

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    en transformant le script comme tu me le dit:
    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
    <?php
    	session_start();
     
    	if(isset($_POST["secteur"])){
    		mysql_connect("localhost","root","");
    		mysql_select_db("maquette_refcost");
    		$res = mysql_query("SELECT NUMTECHNO, NOMTECHNO FROM techno 
    			WHERE NUMSECTEUR=".$_POST["secteur"]." ORDER BY NOMTECHNO");
    		while($row = mysql_fetch_assoc($res))
    		{
    			if(isset($_SESSION['techno'])and $_SESSION['techno']==$row["NOMTECHNO"])
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'selected='selected'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    			else
    			{
    				echo "<option value='".$row["NUMTECHNO"]."'>".htmlentities($row["NOMTECHNO"])."</option>";
    			}
    		}
    	}
     
    ?>
    J'oobtient un résultat assez bizzard: il me met le label (Techologie 1) suivi de toutes les options a la suite commes des éléments texte et après il fait pareil avec la seconde technologie, donc si j'enleve la ligne
    echo "<select name='techno'>"; sa ne marche plus du tout.
    je vais regarder avec DOM voir ce que sa donne

Discussions similaires

  1. [PHP-JS] Récupération d'un <select>
    Par bremer dans le forum Langage
    Réponses: 14
    Dernier message: 17/12/2006, 23h45
  2. récupération des requêtes select dans un log
    Par aemag dans le forum Oracle
    Réponses: 1
    Dernier message: 01/12/2006, 16h16
  3. [Tableaux] Pb de récupération d'un select multiple
    Par Manuxy dans le forum Langage
    Réponses: 18
    Dernier message: 06/09/2006, 16h50
  4. Récupération d'un select à partir de l'évènement OnChange
    Par c_may dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/05/2006, 17h31
  5. Récupération d'un Select en PHP
    Par Rekiem dans le forum Langage
    Réponses: 3
    Dernier message: 13/04/2006, 14h57

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