Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les 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
Membre du Club
 
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 48
Points : 48
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 :
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 :
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.
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 11h25   #2
Expert Confirmé
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 500
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 500
Points : 3 953
Points : 3 953
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 :
>>> beta-test : générateur de phrases aléatoires (+ le générateur de sondages !)
>>> et pour les amateurs de labyrinthes...
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 11h33   #3
Membre du Club
 
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 48
Points : 48
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 :
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
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 11h38   #4
Membre du Club
 
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 48
Points : 48
derriere il y'a de l'ajax dont voici le code:
Code :
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?
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 12h00   #5
Expert Confirmé
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 500
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 500
Points : 3 953
Points : 3 953
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 :
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 :
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;
			}
		}
__________________
Pour ceux qui s'ennuient ou qui ont envie de se changer les idées :
>>> beta-test : générateur de phrases aléatoires (+ le générateur de sondages !)
>>> et pour les amateurs de labyrinthes...
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 12h11   #6
Membre du Club
 
Inscription : avril 2009
Messages : 167
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : avril 2009
Messages : 167
Points : 48
Points : 48
en transformant le script comme tu me le dit:
Code :
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
dirty_harry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web