Listes dynamiques

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 : Listes dynamiques

Re: Listes dynamiques

par biiirdy » 08 juil. 2010, 17:00

Tout d'abord merci de m'aider !

J'ai une première combo avec les plateformes puis une seconde avec les serveurs qui sont sur ces plateformes.

Voila mon code :

maitre.php :
<?php
	include("../toolbox/connexion.php");
?>

<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();

// 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('choix2').innerHTML =leselect;
	}
}

xhr.open("POST","esclave.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sel = document.getElementById(choix1);
var_choix = sel.options[sel.selectedIndex].value;
xhr.send("choix_ajax="+var_choix);
}
</script>

<!-- 1ère liste déroulante -->

<select name='choix1' id='choix1' onchange='go()'>  
<option value=0>Choix1</option>

	<?php
		$sql="select id_platform, platform_name from platform";
		$res=mysqli_query($db,$sql);
		
		while($row = mysqli_fetch_row($res))
		{
		$id=$row[0]; 
		$champs1=$row[1];
		
		echo '<option value='.$id.'>Platform : '.$champs1.'</option>';
		}      
	?>
	
</select>

<br/>
<br/>

<!-- 2ème liste déroulante -->

    <div id='choix2' style='display:inline'>
      <select name='choix2' >
      <option value="0">choix2</option>
      </select>
     </div>
  
esclave.php :
<?php
include("../toolbox/connexion.php");
echo "<select name='choix2'>";
$choix=$_POST['choix_ajax'];  
if(isset($choix))
{
	switch($choix){
	  case '0':
	  echo '<option>faites votre choix</option>';
	  break;
	  
	  /*************************************/
	  case '1':
		$sql="select id_server, server_name from server";
		$res=mysqli_query($db,$sql);
		   
		if($row = mysqli_fetch_row($res)){
			
			$id=$row[0]; 
			$champs=$row[1];
			
			echo '<option value='.$id.'>Champs : '.$champs.'</option>';  //pour afficher le premier enregistrement
			
			while($row = mysqli_fetch_row($res))
			{
			  $id=$row[0]; $champs=row[1]    
			  echo '<option value='.$id.'>Champs : '.$champs.'</option>';
			}
		}      
	  break;
	  
	 /*******************************/
	 case '2':
	 break;
	 
	 /*********************************/
}//switch
}//if  
echo "</select>";
?>
 

J'ai bien les valeurs de la 1ère liste mais pas la 2ème.

Re: Listes dynamiques

par sayomona » 08 juil. 2010, 16:43

salut
il suffit juste de changer les requêtes SQL dans l'exemple que je t'ai donné
sinon, envoie ton code, c'est beaucoup mieux je pense

Re: Listes dynamiques

par biiirdy » 08 juil. 2010, 15:53

Bon je ne dois vraiment pas être doué, je n'arrive pas non plus avec ta solution. Pour chaque solution je n'arrive jamais à avoir l'affichage de la 2ème liste.

Je ne vois vraiment pas comment m'en sortir ! #-o

Re: Listes dynamiques

par sayomona » 08 juil. 2010, 12:12

Bonjour,
voila un exemple simple et très pratique
1) page maitre.php :
    include("connexion_base.php");
    <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();
		// 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('choix2').innerHTML =leselect;
						}
									}


xhr.open("POST","esclave.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
sel = document.getElementById(choix1);
var_choix = sel.options[sel.selectedIndex].value;
xhr.send("choix_ajax="+var_choix); 
}
</script>
//1ère liste déroulante
<select name='choix1' id='choix1' onchange='go()'>   
					  <option value=0>Choix1</option>
						<?php
							$sql="select id, champs1 from table";
							$res=mysql_query($sql);
							while($row = mysql_fetch_row($res))
								{
								$id=$row[0]; $champs1=$row[1];
								echo '<option value='.$id.'>Champs1 : '.$champs1.'</option>';
								}	
						?>
				</select><br/><br/>
//2ème liste déroulante
    <div id='choix2' style='display:inline'>
      <select name='choix2' >
      <option value="0">choix2</option>
      </select>
     </div>
  
2) page esclave.php :
<?php 
include("connexion_base.php");
echo "<select name='choix2'>";
$choix=$_POST['choix_ajax'];   
if(isset($choix))
{
	switch($choix){ 
	  case '0':
	  echo '<option>faites votre choix</option>';
	  break;
          /*************************************/
	  case '1':
	  $sql="select.....from table";
	        $res=mysql_query($sql);
		
			if($row = mysql_fetch_row($res)){
				    $id=$row[0]; $champs=row[1]   
					echo '<option value='.$id.'>Champs : '.$champs.'</option>';  //pour afficher le premier enregistrement 
						while($row = mysql_fetch_row($res))
					      {
						  $id=$row[0]; $champs=row[1]    
						  echo '<option value='.$id.'>Champs : '.$champs.'</option>';
					      }
			}	
	  break;
         /*******************************/
         case '2':
         break;
         /*********************************/
}//switch
}//if	
echo "</select>";
?>
bonne chance

Re: Listes dynamiques

par biiirdy » 08 juil. 2010, 10:57

En fait je pense que je vais faire plus simple en 100% php en rappelant la même page avec les données sélectionnées au préalable.

Le problème est que lorsque toutes mes listes sont remplies il faut que j'envoie ces infos à une autre page mais comment le faire puisque mon form est déjà utilisé pour rappeler la page dans laquelle je me trouve ?

Si quelqu'un à une réponse je lui en serait reconnaissant !

Re: Listes dynamiques

par biiirdy » 08 juil. 2010, 10:18

Au fait Nours312, ton code ne marche pas tel quel, je vais essayer de trouver ce qui coince.

Re: Listes dynamiques

par biiirdy » 08 juil. 2010, 09:51

Salut,

En fait il n'y a pas de pb pour la partie php et mysql (enfin je pense !) puisque j'arrive à avoir ma 1ère liste.

Lorsque je lance le mode debug, je vois que AJAX arive à me récupérer les valeurs de la 2nde liste correspondant à la 1ère liste mais il n'arrive pas à les afficher.

Ex: J'ai la catégorie "bureautique" et 2 sous catégories "burotik sous cat 1" et "burotik sous cat 2"0

Voici le message de debug de AJAX :

Xajax Debug:
Received:
<?xml version="1.0" encoding="utf-8"?><xjx><cmd n="as" t="liste_souscat" p="innerHTML"><![CDATA[<option value="3">burotik sous cat 1</option><option value="4">burotik sous cat 2</option>]]</cmd></xjx>


On retrouve bien les valeurs de sous catégories mais elles ne s'affichent pas dans ma liste.

Autrement mon code est le même que celui du tuto.

Re: Listes dynamiques

par Nours312 » 08 juil. 2010, 09:38

salut ::

à quel endroit ça ne marche pas ?

est-ce au niveau du javascript/Ajax ? ou au niveau php ? ou mysql ?

si tu sais faire le traitement php/mysql, je peux te proposer ce tuto qui semble fonctionner :: Multi SELECTElement chargées en Ajax sur 4code.fr

sinon, fais nous voir une page en ligne que l'on puisse mieux t'aider à trouver le pb ;)

@+

Listes dynamiques

par biiirdy » 08 juil. 2010, 09:20

Bonjour,

je cherche à faire des listes dynamiques pour mon site en php. J'ai suivi un tuto (http://www.6ma.fr/tuto/listes+deroulant ... s+ajax-301) qui m'avait l'air simple qui utilise la librairie xajax mais je n'arrive pas à apercevoir le résultat de la 2ème combo à partir de la 1ère. J'ai essayé le tuto avec les mêmes données que l'exemple mais je n'y arrive pas.

Si quelqu'un pouvait m'aider sur le tuto ou alors me donner une autre solution cela serait vraiment sympa.

Merci d'avance !