Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 01/07/2009, 11h13   #1 (permalink)
Membre habitué
 
Date d'inscription: avril 2009
Localisation: Rennes
Messages: 146
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 :
<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 :
 
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.
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 11h25   #2 (permalink)
Membre émérite
 
Avatar de RomainVALERI
 
Date d'inscription: avril 2008
Localisation: Nancy (54)
Âge: 33
Messages: 979
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 ? ^^
__________________
Pour ceux qui s'ennuient ou qui ont envie de se changer les idées :
>>> essayez mon générateur de phrases aléatoires (attention : version IE/Opera non encore opérationnelle, utilisez un autre navigateur (FF, GoogleChrome, Safari, etc.) s'il vous plaît )

(un peu plus de (4.8 x 10 puissance 74) phrases possibles actuellement )

---
>>> ou entrez dans la spirale des labyrinthes... ^^ (duels entre joueurs, avec éditeur de labyrinthes intégré et moteur 3D très propre)(pour vous mesurer à moi, cherchez : "toshir0")
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 11h33   #3 (permalink)
Membre habitué
 
Date d'inscription: avril 2009
Localisation: Rennes
Messages: 146
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 :
<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
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 11h38   #4 (permalink)
Membre habitué
 
Date d'inscription: avril 2009
Localisation: Rennes
Messages: 146
Par défaut

derriere il y'a de l'ajax dont voici le code:
Code :
 
<!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?
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 12h00   #5 (permalink)
Membre émérite
 
Avatar de RomainVALERI
 
Date d'inscription: avril 2008
Localisation: Nancy (54)
Âge: 33
Messages: 979
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 :
<?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 :
		xhr.onreadystatechange = function(){
			if(xhr.readyState == 4 && xhr.status == 200)
			{
				options = xhr.responseText;
				document.getElementById('techno').innerHTML = options;
				document.getElementById('technocompar').innerHTML = options;
			}
		}
 
__________________
Pour ceux qui s'ennuient ou qui ont envie de se changer les idées :
>>> essayez mon générateur de phrases aléatoires (attention : version IE/Opera non encore opérationnelle, utilisez un autre navigateur (FF, GoogleChrome, Safari, etc.) s'il vous plaît )

(un peu plus de (4.8 x 10 puissance 74) phrases possibles actuellement )

---
>>> ou entrez dans la spirale des labyrinthes... ^^ (duels entre joueurs, avec éditeur de labyrinthes intégré et moteur 3D très propre)(pour vous mesurer à moi, cherchez : "toshir0")
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/07/2009, 12h11   #6 (permalink)
Membre habitué
 
Date d'inscription: avril 2009
Localisation: Rennes
Messages: 146
Par défaut

en transformant le script comme tu me le dit:
Code :
<?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
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 08h23.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.