Faire une sélection multiple

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Faire une sélection multiple

par Xenon_54 » 03 janv. 2008, 08:05

Tu sembles avoir 2 pages avec sensiblement le même contenu, pourquoi? (ajax.php et region.php)

J'ai récemment écrit un article sur l'utilisation d'AJAX avec PHP5 et YUI:
http://www.generationphp.net/2007/12/30 ... hp-et-yui/

Peut-être peux-tu t'en inspirer? Il y a un exemple fonctionnel proposé en téléchargement. Je crois qu'il serait relativement facile d'y inclure une 3e liste déroulante une fois que le principe d'AJAX est compris.

par sadeq » 03 janv. 2008, 04:27

OK, j'ai pas bien vu ton passage de post par ajax mais cette fois je croix bien voir que tu as oublié de passer le paramètre $_POST["idValeur"] par ajax dans le second script region.php qui appelle la page ville.php.

Faire une sélection multiple

par ayntic » 24 déc. 2007, 13:20

Merci !
Mais je pense que le problème réside ailleurs. Je m'explique :
sadeq a dit
Les noms des paramètres $_POST que tu utilise dans les conditions SQL WHERE ne correspondent pas aux noms des listes qui normalement correspondent à ses paramètres.
En effet les noms des listes sont récupérées à travers cette méthode présente dans mon code AJAX:

Code : Tout sélectionner

sel = document.getElementById('pays'); idpays = sel.options[sel.selectedIndex].value;
Ensuite, elles sont acheminées via la méthode POST de mon formulaire par cette méthode :

Code : Tout sélectionner

xhr.send("idPays="+idpays);
Ce qui revient à dire que la nouvelle valeur qui doit être maintenant prise en compte est "idPays" d'où la présence de $_POST["idPays"] et non $_POST["pays"]. (d'après ma compréhension d'AJAX).

par sadeq » 21 déc. 2007, 23:04

ça ne risque pas de marcher car t'as un problème de noms de variables.
Les noms des paramètres $_POST que tu utilise dans les conditions SQL WHERE ne correspondent pas aux noms des listes qui normalement correspondent à ses paramètres.

Par exemple:
Dans la requête SQL des régions:
$res = mysql_query("SELECT * FROM region 
            WHERE id_pays=".$_POST["idPays"]." ORDER BY nom") or die ('EREUR'.mysql_error()); 
Le paramètre $_POST["idPays"] ne correspond pas au nom de la liste des pays telque c'est écrit dans HTML, je cite :

Code : Tout sélectionner

<select name='pays' id='pays' onchange='go1()'>
Correction: Dans HTML, le nom de la liste doit être le même que celui utilisé dans $_POST par PHP.

A vrai dire, tu as commi cette erreur pour toutes les listes et $_POST dans tes codes.

Faire une sélection multiple

par ayntic » 21 déc. 2007, 18:31

Je veux faire une sélection multiple et voici :
le script qui me permet de sécetionner le pays :
ajax.php
<html>

	<head>
	
<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 go1(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				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('region').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","region.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('pays');
				idpays = sel.options[sel.selectedIndex].value;
				xhr.send("idPays="+idpays);
			}
			
			
			
		</script>

	</head>
	
<body>

		<form>
			<fieldset style="width: 760px">
				<legend>Liste liées</legend>
				<label>Pays</label>
				<select name='pays' id='pays' onchange='go1()'>
					<option value='-1'>[ Choisir un pays ]</option>
					<?
						mysql_connect("localhost","gelux","facturier");
						mysql_select_db("test");
						$res = mysql_query("SELECT * FROM pays ORDER BY nom");
						while($row = mysql_fetch_assoc($res)){
							echo "<option value='".$row["id_pays"]."'>".$row["nom"]."</option>";
						}
					?>
				</select>
				<label>Région</label>
				<div id='region' style='display:inline'>
				<select name='region'>
					<option value='-1'>[ Choisir une région ]</option>
				</select>
				<label>Ville</label>
				<div id='ville' style='display:inline'>
				<select name='ville'>
					<option value='-1'>[ Choisir une ville ]</option>
				</select>
				</div>
			</fieldset>
		</form>

</body>

</html>
Le second script sert à sélectionner la région du pays choisi:
region.php
<html>

	<head>
	
<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 go2(){
				var xhr = getXhr();
				// On défini ce qu'on va faire quand on aura la réponse
				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('ville').innerHTML = leselect;
					}
				}

				// Ici on va voir comment faire du post
				xhr.open("POST","ville.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('region');
				idregion = sel.options[sel.selectedIndex].value;
				xhr.send("idRegion="+idregion);			
			}
			
			
			
			
		</script>

	</head>
	
	
<body>

<?php

	echo '<input type="hidden" id="valeur" name="valeur" value="'.$_POST["idPays"].'">';

	echo "<select name='region' id='region' onchange='go2()'>";
	if(isset($_POST["idPays"])){
		mysql_connect("localhost","gelux","facturier");
		mysql_select_db("test");
		$res = mysql_query("SELECT * FROM region 
			WHERE id_pays=".$_POST["idPays"]." ORDER BY nom") or die ('EREUR'.mysql_error());
		while($row = mysql_fetch_assoc($res)){
			echo "<option value='".$row["id_region"]."'>$row[nom] ($row[id_region]) </option>";
		}
	}
	echo "</select>";
	
?>
	

				<label>Ville</label>
				<div id='ville' style='display:inline'>
				<select name='ville'>
					<option value='-1'>[ Choisir une ville ]</option>
				</select>
				</div>
		
				
</body>

</html>
La troisième page me permet enfin de sélectionner la ville associée:
ville.php

<?php
	echo "<select name='ville'>";
	if(isset($_POST["idRegion"]) AND isset(($_POST["idValeur"]))){
		mysql_connect("localhost","gelux","facturier");
		mysql_select_db("test");
		$res = mysql_query("SELECT * FROM ville 
			WHERE id_pays=".$_POST["idValeur"]." AND id_region=".$_POST["idRegion"]." ORDER BY nom") or die ('EREUR'.mysql_error());
		while($row = mysql_fetch_assoc($res)){
			echo "<option value='".$row["id_ville"]."'>$row[nom] ($row[id_region]) </option>";
		}
	}
	echo "</select>";
	
?>

Mon gros problème est que les deux dernières pages ne répondent pas.

SVP, aidez moi à trouver une solution car cela fait longtemps que je traine sur ce code.

Merci pour tout !!!