lier des champ de formuaire donnée venant de sql

Eléphant du PHP | 150 Messages

20 déc. 2012, 13:44

bonjour j'ai un formulaire en 3 pages

dans la première page les donnée client "la tout marche très bien"

dans le 2 eme les donnée emplacement "c'est cette partie que je c pas comment faire "

dans cette page j'ai 4 liste déroulantes

une pour la catégorie
une pour la sous catégorie
une pour la salle
une pour l'emplacement

voici le script pour ces 4 menu deroulant :
<tr>
		<td width="191"><p><label for="name">Categorie<font size="3" color="FF0000">*</font></label></p></td>
		<td width="259">
			<?php
			$sql = " SELECT cat_bou FROM categorie "; 
			$result = mysql_query($sql) or die("Requete pas comprise"); 
			echo "<select name='cat_bou'>"; 
			while ($row=mysql_fetch_array($result)) 
			{ echo"<option>$row[0]</option>"; } echo"</select>";
		$cat_bou=$row[0];			
			?> 
		</td>
		</tr>
		<tr>
		<td width="191"><p><label for="name">Sous-Categorie<font size="3" color="FF0000">*</font></label></p></td>
		<td width="259">
		<?php
			$sql = " SELECT sous_categorie FROM sous_categorie "; //where '$cat_bou' 
			$result = mysql_query($sql) or die("Requete pas comprise"); 
			echo "<select name='sous_categorie'>"; 
			while ($row=mysql_fetch_array($result)) 
			{ echo"<option>$row[0]</option>"; } echo"</select>"; 
			?>
		</td>
		</tr>
		<tr>
		<td><p><label for="name">Salle<font size="3" color="FF0000">*</font></label></p></td>
		<td>
		
		<?php
			$sql = " SELECT salle FROM salle "; //where '$cat_bou' 
			$result = mysql_query($sql) or die("Requete pas comprise"); 
			echo "<select name='salle'>"; 
			while ($row=mysql_fetch_array($result)) 
			{ echo"<option>$row[0]</option>"; } echo"</select>"; 
			?>
		
		</td>
		</tr>
		<tr>
		<td><p><label for="name">Emplacement<font size="3" color="FF0000">*</font></label></p></td>
		<td>
		
		<?php
			$sql = " SELECT emp FROM emplacement "; //where '$cat_bou' 
			$result = mysql_query($sql) or die("Requete pas comprise"); 
			echo "<select name='emp'>"; 
			while ($row=mysql_fetch_array($result)) 
			{ echo"<option>$row[0]</option>"; } echo"</select>"; 
			?>
		</td>
		</tr>

ce que je souhaite faire c'est lier ces 4 liste déroulante

c'est a dire si dans la catégorie je met " livre " dans la sous catégorie je ne veut pas voir apparaître les " film" ainsi de suite pour les salle et les emplacement

j'ai trouver quelque tuto sur le web mais j'arrive pas a les mettre en oeuvre car c plus du php mais du ajax qu'il faudrait apparemment

merci de votre aide

ps j'avais trouver sa mai je ne c pas du tout comment le mettre en place dans mon cas :http://siddh.developpez.com/articles/ajax/#LIV-A

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 déc. 2012, 14:45

salut,

effectivement il te faut du javascript (dont de l'ajax) et un peu de php pour répondre a la demande ajax ;)

le principe
- le premier select contient un attribut onselect (qui correspond à un évènement) dans lequel tu indique le nom d'une fonction javascript.
- lorsque l'on choisit une nouvelle ligne l’évènement onselect est déclenché et le navigateur exécute la fonction JS qui est indiqué dans l'attribut onselect.
- La fonction JS va
  • Récupérer la valeur courent du select (le "value" pas la valeru affichée).
  • faire un requête ajax (sur le serveur),avec en paramètre le "value", vers un script php qui va récupérer cette valeur
  • Le script php retourne la liste des infos a mettre dans la seconde liste
  • La fonction JS récupère les infos et génère la seconde liste
ainsi de suite pour les 2 autres liste.

conseil :
- Il faut que tu utilise l'attribut value des options (<option value=" xxxx ">le truc affiché</option>) car dans ces "value" tu indique la clef primaire (l'identifiant si tu préfère) de la ligne, cela va te permettre de récupérer les infos associées.
- Commence par faire le script php qui répond a la requête AJAX : il prend dans l'url l'id de la ligne sélectionnée ($_GET) et fait la requête sql qui va bien.
- Le script PHP retourne du JSON (assez simple a exploiter ensuite coté JS) => json_encode (le retour c'est un simple echo)
- lorsque le script fonctionne comme tu veux (test simplement avec ton navigateur) tu peux commencer le JS ;)
- Regarde du coté de JQuery, c'est un complexe au départ mais très pratique ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 150 Messages

21 déc. 2012, 02:14

rebonjour

je vien de trouver ces script tout pres et censé etre fonctionnel sur ce site http://www.developpez.net/forums/d11249 ... st-jquery/


mais quant je teste aucun ne veut fonctionner autant en local "easyphp" qu'en ligne

exemple :
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 	<title>Listes liées : Ajax - XMLHttpRequest</title>
 
	<script type="text/javascript">
	/* Initialisation XMLHttpRequest */
	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;
	};
 
	/* Changer la liste 2 après choix dans la liste 1 */
	function changeList2FromList1(id_lis1,id_div2){
		var id_lis1; // valeur de l option choisie (liste 1)
		var id_div2; // id du div qu'on remplira (liste 2)
 
		var xhr = getXhr();
		xhr.onreadystatechange = function(){
			// si on a tout reçu et que le serveur est ok
			if(xhr.readyState == 4 && xhr.status == 200)
			{
				texthtml = xhr.responseText;
				// On se sert de innerHTML pour rajouter les options a la liste des "selections"
				document.getElementById(id_div2).innerHTML = texthtml;
			}
		}
		// on defini la methode (post) + le fichier de traitement + asynchrone (true)
		xhr.open("POST","listeslieesAjax-test.php",true);
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		// on poste les parametres a transmettre au fichier qui fera le traitement
		xhr.send("idlist1selected="+id_lis1);
	};
	</script>
 
</head>
 
<body>
 
	<form method="post" action="fichier-de-traitement.php">
	<fieldset style="width:550px;">
		<legend>Listes liées</legend>
		<p>
			<label>Liste 1 : </label>
			<select id="ididliste1" name="idliste1" onchange="changeList2FromList1(this.options[this.selectedIndex].value,'iddivListe2');">
			<!-- on appelle la fct sur le onchange (valeur-choisie, id-du-div-à-remplir) -->
				<option value="0">Choisissez ...</option>
				<option value="1">Métiers</option>
				<option value="2">Particuliers</option>
				<option value="3">Jardins</option>
			</select>	
		</p>
		<p>
			<label>Liste 2 : </label>
			<span id="iddivListe2"><!-- c'est ici que par innerHTML AJAX va ecrire la liste 2 -->
			<!-- on peut mettre d abord une option "par defaut" : -->
			<select id="ididliste2" name="idliste2">
				<option value="0">(Choisissez d'abord dans la liste 1)</option>
			</select>
			</span>	
		<p>
			<input type="submit" name="btenvoi" value="ok" />
		</p>
	</fieldset>
	</form>
 
</body>
</html>

est ce que sa vien de moi ou ceci n'est pas fonctionnel
"si sa vien de moi" : est ce possible de l'adapter avec du sql pour les select ?

encore merci beaucoup

Eléphant du PHP | 150 Messages

21 déc. 2012, 13:18

Pas d'idée ???

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 déc. 2012, 21:01

as tu mis en place le fichier php ?

"ça marche pas" c'est pas utilisable, est qu'il y a bien une requête vers le script serveur ?

le script semble fonctionnel (je n'ai pas testé avec le script serveur).


@+
Il en faut peu pour être heureux ......