Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ 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 17/12/2011, 21h43   #1
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Par défaut Listes déroulantes dynamiques

Bonsoir,

Actuellement j'ai un fichier csv qui contient 3 champs et est composé de nombreuses lignes.

Chaque champs m'a permis de construire une liste déroulante.

Cependant actuellement il n'y a pas de dépendance entre les listes. Les liste ne sont pas liées les unes aux autres.

Voici mon code actuel :

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
<?php
	$fichier=$_SERVER['DOCUMENT_ROOT']."/csv/export.csv";
	$fp = fopen ($fichier, 'r') 
	if ($fp<>false) {
		flock ($fp, LOCK_SH);
		while (($data = fgetcsv($fp, 1000, ";")) !== FALSE) {
			$site[] = $data[0] ;
			$batiment[] = $data[1];
			$rack[] = $data[2];
		}
		flock ($fp, LOCK_UN);
		fclose ($fp);
	}
	$liste_site = array_unique($site);
	$liste_batiment = array_unique($batiment);
	$liste_rack = array_unique($rack);	
?>
 
<form>
	Site <select name="site">
	<?php
		foreach ($liste_site as $site) {
			echo "<option value=$site>".$site."</option>\n";
		}
	?>
	</select>
	Batiment <select name="batiment">
	<?php
		foreach ($liste_batiment as $batiment) {
			echo "<option value=$batiment>".$batiment."</option>\n";
		}
	?>
	</select>
	Baie <select name="baie">
	<?php
		foreach ($liste_rack as $rack) {
			echo "<option value=$rack>".$rack."</option>\n";
		}
	?>
	</select>
</form>
Est-ce possible de faire cela avec l'utilisation d'un csv ?
Comment structurer mon code et que faut-il faire pour arriver à un tel résultat ?

D'avance merci pour votre aide.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2011, 09h35   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Bonjour,

Tu veux lier les listes?
Listes déroulantes liées entre elles.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2011, 11h18   #3
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonjour,

J'ai déjà lu le lien suivant.
Le problème c'est que dans mon cas je n'interroge pas une bdd mais un fichier csv donc je souhaite savoir si ce traitement est adaptable dans ce cas.

Si c'est possible pouvez vous me donner quelques pistes d'adaptation à suivre car la je suis dans le flou.

Merci.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 12h01   #4
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
C'est adaptable, au lieu de lancer une requete sql, tu filtres seulement les lignes de ton csv.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 22h36   #5
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Citation:
Envoyé par andry.aime Voir le message
C'est adaptable, au lieu de lancer une requete sql, tu filtres seulement les lignes de ton csv.

A+.
Merci cependant comment puis-je filtrer mes lignes de csv ?

J'ai du mal à voir comment gérer cela au niveau du code.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 05h05   #6
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Citation:
Envoyé par gege765 Voir le message
Merci cependant comment puis-je filtrer mes lignes de csv ?

J'ai du mal à voir comment gérer cela au niveau du code.
Ouvre une nouvelle discussion pour ça sur le forum php .
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 18h36   #7
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonsoir,

Voilà j'ai réussi à lier deux listes déroulantes.
Voir en pièce jointe les fichiers site.php ou baie.php

Néanmoins j'ai essayé de lier 3 listes déroulantes (fichier appli.php)
Mais la troisième liste ne s'affiche pas correctement.

fichier appli.php
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<html>
	<head>
		<title>Test ajax liste déroulante</title>
		<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;
			}
 
			function go(){
				var xhr = getXhr();
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
						document.getElementById('batiment').innerHTML = leselect;
					}
				}
				// poste l'id du site
				xhr.open("POST","traitementAjax.php",true);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				var sel = document.getElementById('site');
				var idsite = sel.options[sel.selectedIndex].value;
				xhr.send("site="+idsite);
			}
			function goesp(){
				var xhr = getXhr();
				xhr.onreadystatechange = function(){
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						document.getElementById('baie').innerHTML = leselect;
					}
				}
				xhr.open("POST","ajaxBatiment.php",true);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				var sel = document.getElementById('batiment');
				var idbatiment = sel.options[sel.selectedIndex].value;
				xhr.send("batiment="+idbatiment);
			}
		</script>
	</head>
	<body>
		<form action="traitement.php" method="post">
			<fieldset style="width: 700px">
				<legend>Liste liées</legend>
				<label>Sites</label>
				<select name='site' id='site' onchange='go()'>
					<option value='-1'>Choisir un site</option>
					<?php
						$fichier="export.csv";
						$fp = fopen ($fichier, 'r')  // opening file
							or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
						if ($fp<>false) { // if file is found
							flock ($fp, LOCK_SH);  // file is locked by a shared lock
							while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
									$site[] = $data[0];
							}
							flock ($fp, LOCK_UN);  // unlock file
							fclose ($fp);
 
							$liste_site = array_unique($site);
						}
 
						foreach($liste_site as $id_site) {
							echo "<option value=$id_site>".$id_site."</option>\n";
						}
					?>
				</select>
				<label>Batiments</label>
				<div id='batiment' style='display:inline'>
					<select name='batiment' id='batiment' onchange ="goesp()">
						<option value='-1'>Choisir un batiment</option>
					</select>
				</div>
				<label>Baies</label>
				<div id='baie' style='display:inline'>
					<select name='baie' id='baie'>
						<option value='-1'>Choisir une baie</option>
					</select>
				</div>
			</fieldset>
			<input class="submit" type="submit" value="Envoyer">
		</form>
	</body>
</html>
fichier traitementAjax.php
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
50
51
52
53
54
<?php
	echo "<select name='batiment'>";
	$fichier="export.csv";
	$choixS = $_POST["site"];
	//$choixS = "Paris";
	$fp = fopen ($fichier, 'r')  // opening file
		or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
	if ($fp<>false) { // if file is found
		flock ($fp, LOCK_SH);  // file is locked by a shared lock
		while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
			$bool = true;
			if(!empty($choixS) && $choixS != $data[0])
				$bool = false;
			if($bool)
					$batiment[] = $data[1];
		}
		flock ($fp, LOCK_UN);  // unlock file
		fclose ($fp);
 
		$liste_batiment = array_unique($batiment);	
		foreach($liste_batiment as $id_batiment) {
			echo "<option value=$id_batiment>".$id_batiment."</option>\n";
		}
	}
	echo "</select>";
 
	echo "<select name='baie'>";
	$fichier="export.csv";
	$chxSite = $choixS;
	$chxBat = $_POST["batiment"];
 
	$fp = fopen ($fichier, 'r')  // opening file
		or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
	if ($fp<>false) { // if file is found
		flock ($fp, LOCK_SH);  // file is locked by a shared lock
		while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
			$bool = true;
			if(!empty($chxSite) && $chxSite != $data[0])
					$bool = false;
			if(!empty($chxBat) && $chxBat!= $data[1])
					$bool = false;
			if($bool)
				$baie[] = $data[2];
		}
		flock ($fp, LOCK_UN);  // unlock file
		fclose ($fp);
 
		$liste_baie = array_unique($baie);	
		foreach($liste_baie as $id_baie) {
			echo "<option value=$id_baie>".$id_baie."</option>\n";
		}
	}
	echo "</select>";
?>
Les autres fichiers sont disponibles en pièce jointe.

Pouvez vous m'aider ?

D'avance merci.
Fichiers attachés
Type de fichier : zip ajax.zip (6,8 Ko, 3 affichages)
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 19h43   #8
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Bonsoir,

Ton 2ème liste généré n'a pas d'id.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 19h57   #9
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Merci de ton aide et ta réponse rapide.

Malheureusement je ne vois pas où est l'id manquant car j'ai bien :
Code :
1
2
3
<select name='batiment' id='batiment' onchange ="goesp()">
						<option value='-1'>Choisir un batiment</option>
					</select>
Peux-tu m'en dire plus ?
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 06h50   #10
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Citation:
<?php
echo "<select name='batiment'>";
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 07h16   #11
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Je suis passé à coté. Désolé.

Je viens de modifier cela :
Code :
echo "<select name='batiment' id='batiment'>";
et cela
Code :
echo "<select name='baie id='baie'>";
Mais cela ne change rien.

Voici le HTML généré si cela peut aider:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
<html>
	<head>
		<title>Test ajax liste déroulante</title>
		<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;
			}
 
			function go(){
				var xhr = getXhr();
				xhr.onreadystatechange = function(){
					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
						// On se sert de innerHTML pour rajouter les options a la liste
 
				document.getElementById('batiment').innerHTML = leselect;
					}
				}
 
				// poste l'id du site
				xhr.open("POST","traitementAjax.php",true);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				var sel = document.getElementById('site');
				var idsite = sel.options[sel.selectedIndex].value;
				xhr.send("site="+idsite);
			}
 
			function goesp(){
				var xhr = getXhr();
				xhr.onreadystatechange = function(){
					if(xhr.readyState == 4 && xhr.status == 200){
						leselect = xhr.responseText;
					document.getElementById('baie').innerHTML = leselect;
					}
				}
				xhr.open("POST","ajaxBatiment.php",true);
				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				var sel = document.getElementById('batiment');
				var idbatiment = sel.options[sel.selectedIndex].value;
				xhr.send("batiment="+idbatiment);
			}
		</script>
	</head>
	<body>
		<form action="traitement.php" method="post">
			<fieldset style="width: 700px">
				<legend>Liste liées</legend>
				<label>Sites</label>
				<select name='site' id='site' onchange='go()'>
					<option value='-1'>Choisir un site</option>
					<option value=Paris>Paris</option>
<option value=Rouen>Rouen</option>
				</select>
				<label>Batiments</label>
				<div id='batiment' style='display:inline'>
					<select name='batiment' id='batiment' onchange ="goesp()">
						<option value='-1'>Choisir un batiment</option>
					</select>
				</div>
				<label>Baies</label>
				<div id='baie' style='display:inline'>
					<select name='baie' id='baie'>
						<option value='-1'>Choisir une baie</option>
					</select>
				</div>
			</fieldset>
			<input class="submit" type="submit" value="Envoyer">
		</form>
	</body>
</html>
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 10h51   #12
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Citation:
<div id='batiment' style='display:inline'>
<select name='batiment' id='batiment' onchange ="goesp()">

Un id doit être unique dans un document, modifie celui du div et n'oublie pas de modifier le javascript.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 18h07   #13
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Merci de ton aide.

J'ai retructuré un peu mon code.

Cela fonctionne presque maintenant néanmoins si après avoir fait une premiere sélection je décide de changer le site le choix de l'ancienne baie reste actif. Or j'aimerai que l'affichage soit réinitialisé et qu'il soit affiché (Choisissez d'abord un batiment).

Comment faire cela ?

Autre question actuellement ce code ne fonctionne pas sous Internet explorer 7, 8 et 9 ?
Il me dit qu'il y a une erreur à la ligne :
Code :
	var sel = document.getElementById('site');
Je reposte ci dessous l'ensemble de mes codes.
export.csv
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Paris;a;bt0;10.0.0.1
Paris;a;bt60;10.0.0.2
Paris;b;lt1;10.0.0.3
Paris;b;bt00;10.0.0.4
Paris;b;bt01;10.0.0.5
Paris;b;bt02;10.0.0.6
Paris;c;dc1;10.0.0.9
Paris;c;dc1;10.0.0.10
Paris;c;dc2;10.0.0.11
Paris;c;dc3;10.0.0.12
Rouen;1;deo3-1;10.0.0.13
Rouen;1;deo3-2;10.0.0.14
Rouen;1;deo3-3;10.0.0.15
appli.php
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
50
51
52
53
54
55
56
57
<html>
	<head>
		<title>Test ajax liste déroulante</title>
		<script src="ajaxListe.js" type="text/javascript"></script>
	</head>
	<body>
		<form action="traitement.php" method="post">
			<fieldset style="width: 700px">
				<legend>Liste liées</legend>
				<p>
					<label>Sites</label>
					<select name='site' id='site' onchange='go()'>
						<option value="0">Choisir un site...</option>
						<?php
							$fichier="export.csv";
							$fp = fopen ($fichier, 'r')  // opening file
								or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
							if ($fp<>false) { // if file is found
								flock ($fp, LOCK_SH);  // file is locked by a shared lock
								while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
										$site[] = $data[0];
								}
								flock ($fp, LOCK_UN);  // unlock file
								fclose ($fp);
 
								$liste_site = array_unique($site);
							}
 
							foreach($liste_site as $id_site) {
								echo "<option value=$id_site>".$id_site."</option>\n";
							}
						?>
					</select>
				</p>
				<p>
					<label>Batiments</label>
					<span id='spbatiment'>
						<select name='batiment' id='batiment' onchange ="goesp()">
							<option value="0">(Choisissez d'abord un site)</option>
						</select>
					</span>
				</p>
				<p>
					<label>Baies</label>
					<span id='spbaie'>
						<select name='baie' id='baie'>
							<option value="0">(Choisissez d'abord un batiment)</option>
						</select>
					</span>
				</p>
				<p>
					<input class="submit" type="submit" value="Envoyer">
				</p>
			</fieldset>
		</form>
	</body>
</html>
ajaxListe.js
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
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;
}
 
function go(){
	var xhr = getXhr();
	xhr.onreadystatechange = function(){
		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
		if(xhr.readyState == 4 && xhr.status == 200){
			leselect = xhr.responseText;
			// On se sert de innerHTML pour rajouter les options a la liste
			document.getElementById('batiment').innerHTML = leselect;
		}
	}
	// poste l'id du site
	xhr.open("POST","traitementAjaxL1.php",true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var sel = document.getElementById('site');
	var idsite = sel.options[sel.selectedIndex].value;
	xhr.send("site="+idsite);
}
function goesp(){
	var xhr = getXhr();
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && xhr.status == 200){
			leselect = xhr.responseText;
			document.getElementById('baie').innerHTML = leselect;
		}
	}
	xhr.open("POST","traitementAjaxL2.php",true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var sel = document.getElementById('batiment');
	var idbatiment = sel.options[sel.selectedIndex].value;
	xhr.send("batiment="+idbatiment);
}
traitementAjaxL1.php
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
<?php
	$fichier="export.csv";
	$choixS = $_POST["site"];
 
	if(isset($_POST['site']) && $_POST['site']!="0") {
		$fp = fopen ($fichier, 'r')  // opening file
			or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
		if ($fp<>false) { // if file is found
			flock ($fp, LOCK_SH);  // file is locked by a shared lock
			while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
				$bool = true;
				if(!empty($choixS) && $choixS != $data[0])
					$bool = false;
				if($bool)
						$batiment[] = $data[1];
			}
			flock ($fp, LOCK_UN);  // unlock file
			fclose ($fp);
 
			$liste_batiment = array_unique($batiment);	
			echo "<select id='batiment' name='batiment'>";
			echo "<option value=\"0\">Choisissez ...</option>";
			foreach($liste_batiment as $id_batiment) {
				echo "<option value=$id_batiment>".$id_batiment."</option>\n";
			}
		}
		echo "</select>";
	}
	else { 	// SI PAS de liste 1 choisie (0) ou erreur : on remet le select "par defaut" :
		?>
		<select id="batiment" name="batiment">
			<option value="0">(Choisissez d'abord un site)</option>
		</select>
	<?php
	}
?>
traitementAjaxL2.php
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
<?php
	$fichier="export.csv";
 
	if((isset($_POST['batiment']) &&  isset($_POST['site'])) || ($_POST['batiment']!="0" && $_POST['site']!="0")) {	
		$fp = fopen ($fichier, 'r')  // opening file
			or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
		if ($fp<>false) { // if file is found
			flock ($fp, LOCK_SH);  // file is locked by a shared lock
			$chxSite = $_POST['site'];
			$chxBat = $_POST["batiment"];
			while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
				$bool = true;
				if(!empty($chxSite) && $chxSite != $data[0])
						$bool = false;
				if(!empty($chxBat) && $chxBat!= $data[1])
						$bool = false;
				if($bool)
					$baie[] = $data[2];
			}
			flock ($fp, LOCK_UN);  // unlock file
			fclose ($fp);
 
			$liste_baie = array_unique($baie);
			echo "<select id='baie' name='baie'>";
			echo "<option value=\"0\">Choisissez ...</option>";
			foreach($liste_baie as $id_baie) {
				echo "<option value=$id_baie>".$id_baie."</option>\n";
			}
		}
		echo "</select>";
	}
	else { 	// SI PAS de liste 1 choisie (0) ou erreur : on remet le select "par defaut" :
		?>
		<select id="baie" name="baie">
			<option value="0">(Choisissez d'abord un batiment)</option>
		</select>
<?php
}
?>
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 08h02   #14
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonjour,

Voilà j'ai éditer mon dernier message, peut-être que cela peut vous aider à m'aider.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 10h19   #15
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Citation:
document.getElementById('batiment').innerHTML = leselect;
Code :
document.getElementById('spbatiment').innerHTML = leselect;
Citation:
echo "<select id='batiment' name='batiment'>";
Code php :
echo "<select id='batiment' name='batiment'  onchange ='goesp()'>";
Citation:
si après avoir fait une premiere sélection je décide de changer le site le choix de l'ancienne baie reste actif.
j'y pige que dalle.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h01   #16
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonsoir,
Grâce à ton aide j'ai modifié mon code les listes fonctionnent maintenant.
Avant cela je n'ai quasiment pas fait de js donc avec les id je m'y perd un peu.

Qu'est ce que tu comprend pas ?

Par contre j'ai des erreurs php


Uploaded with ImageShack.us

PHP dit que les variables ne sont pas initialisées mais il affiche comme même la troisième liste est celle-ci est correcte.
Comment faire pour corriger ces erreurs ?

Il est peut être possible d'optimiser mon code.

Je reposte les fichier que j'ai modifié :

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
<?php
	$fichier="export.csv";
 
	// Notice: Undefined index: site in traitementAjaxL2.php on line 4
	// Notice: Undefined index: site in traitementAjaxL2.php on line 9
 
	if((isset($_POST['batiment']) &&  isset($_POST['site'])) || ($_POST['batiment']!="0" && $_POST['site']!="0")) {	
		$fp = fopen ($fichier, 'r')  // opening file
			or trigger_error('Le fichier '.$fichier.' est introuvable.', E_USER_WARNING);
		if ($fp<>false) { // if file is found
			flock ($fp, LOCK_SH);  // file is locked by a shared lock
			$chxSite = $_POST['site'];
			$chxBat = $_POST["batiment"];
			while (($data = fgetcsv($fp, 64, ";")) !== FALSE) {
				$bool = true;
				if(!empty($chxSite) && $chxSite != $data[0])
						$bool = false;
				if(!empty($chxBat) && $chxBat!= $data[1])
						$bool = false;
				if($bool)
					$baie[] = $data[2];
			}
			flock ($fp, LOCK_UN);  // unlock file
			fclose ($fp);
 
			$liste_baie = array_unique($baie);
			echo "<select id='baie' name='baie'>";
			echo "<option value=\"0\">Choisissez ...</option>";
			foreach($liste_baie as $id_baie) {
				echo "<option value=$id_baie>".$id_baie."</option>\n";
			}
		}
		echo "</select>";
	}
	else { 	// SI PAS de liste 1 choisie (0) ou erreur : on remet le select "par defaut" :
		?>
		<select id="baie" name="baie">
			<option value="0">(Choisissez d'abord un batiment)</option>
		</select>
<?php
}
?>

et ajaxListe.js
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
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;
};
 
function go(){
	var xhr = getXhr();
	xhr.onreadystatechange = function(){
		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
		if(xhr.readyState == 4 && xhr.status == 200){
			leselect = xhr.responseText;
			// On se sert de innerHTML pour rajouter les options a la liste
			document.getElementById('spbatiment').innerHTML = leselect;
		}
	}
	// poste l'id du site
	xhr.open("POST","traitementAjaxL1.php",true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var sel = document.getElementById('site');
	var idsite = sel.options[sel.selectedIndex].value;
	xhr.send("site="+idsite);
};
function goesp(){
	var xhr = getXhr();
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4 && xhr.status == 200){
			leselect = xhr.responseText;
			document.getElementById('spbaie').innerHTML = leselect;
		}
	}
	xhr.open("POST","traitementAjaxL2.php",true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	var sel = document.getElementById('batiment');
	var idbatiment = sel.options[sel.selectedIndex].value;
	xhr.send("batiment="+idbatiment);
};
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 18h16   #17
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonsoir,
Pour ne pas avoir l'erreur de variable je pense passé par une variable de session afin de pouvoir utiliser la variable $site de traitementAjaxL1.php dans traitementAjaxL2.php.

Est-ce une bonne solution ?
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 05h50   #18
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Bonjour,

Peux-tu citer le message d'erreur ici ou joindre l'image sur ton post car j'ai pas accès au site .

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 07h46   #19
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonjour,

Les message d'erreur sont :

Notice: Undefined index: site in traitementAjaxL2.php on line 7
Notice: Undefined index: site in traitementAjaxL2.php on line 12

Merci.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 08h09   #20
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 139
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 139
Points : 7 276
Points : 7 276
Bonjour,

Parce que dans la fonction function goesp(), tu n'envoies que la variable bâtiment mais pas site. Or que dans ton PHP tu l'utilises.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web