ajax ...

Avrimkreek
Invité n'ayant pas de compte PHPfrance

13 janv. 2006, 01:38

Bonsoir, dites, j'ai besoin d'afficher 4 listes déroulantes, les unes en fonctions des autres

j'y arrive pour deux mais pas pour 4
voici mon code pour les 2:

table:

Code : Tout sélectionner

-- Structure de la table `marque` -- CREATE TABLE `marque` ( `id_marque` int(5) NOT NULL auto_increment, `nom` varchar(255) NOT NULL default '', PRIMARY KEY (`id_marque`) ) TYPE=MyISAM AUTO_INCREMENT=5 ; -- -- Contenu de la table `marque` -- INSERT INTO `marque` VALUES (1, 'Police'); INSERT INTO `marque` VALUES (2, 'Banana'); INSERT INTO `marque` VALUES (3, 'Marque3'); INSERT INTO `marque` VALUES (4, 'Marque4'); -- Structure de la table `region` -- CREATE TABLE `region` ( `id_region` int(5) NOT NULL auto_increment, `idmarque` int(5) NOT NULL default '0', `nom` varchar(255) NOT NULL default '', PRIMARY KEY (`id_region`) ) TYPE=MyISAM AUTO_INCREMENT=7 ; -- -- Contenu de la table `region` -- INSERT INTO `region` VALUES (1, 1, 'Aquitaine'); INSERT INTO `region` VALUES (2, 1, 'Bourgogne'); INSERT INTO `region` VALUES (3, 2, 'Aquitaine'); INSERT INTO `region` VALUES (4, 2, 'Ile de France'); INSERT INTO `region` VALUES (5, 3, 'Bretagne'); INSERT INTO `region` VALUES (6, 4, 'Picardie');
index.php :
<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
	/**
	 * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
	 */
	function sendData(param, page)
	{
		if(document.all)
		{
			//Internet Explorer
			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
		}//fin if
		else
		{
		    //Mozilla
			var XhrObj = new XMLHttpRequest();
		}//fin else

		//définition de l'endroit d'affichage:
		var content = document.getElementById("contenu");
		
		XhrObj.open("POST", page);

		//Ok pour la page cible
		XhrObj.onreadystatechange = function()
		{
			if (XhrObj.readyState == 4 && XhrObj.status == 200)
				content.innerHTML = XhrObj.responseText ;
		}

		XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		XhrObj.send(param);
	}//fin fonction SendData

    </script>
</head>
<body>

<?php
   // Paramètres de la Connexion à la base MYSQL
   $user="";
   $host="";
   $password="";
   $database="";
   $i=0; // variable de test
   $j=0; // variable pour garder la valeur du premier enregistrement marque pour l'affichage
       
   $connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");
    
   mysql_select_db($database,$connexion);
    
   // Séléction de tous les enregistrements de la table marque
   $rq="Select * from marque order by nom;";

   $result= mysql_query ($rq) or die ("Select impossible");
   echo "<form method='POST' action='valid.php'>";?>   <select size="1" name="marque" OnChange="sendData('id='+this.value,'liresc.php')" onKeyUp="sendData('id='+this.value,'liresc.php')">

<?php     
   while ($dt=mysql_fetch_row($result))
   {
    // Remplir la liste déroulante des marques	
	echo "<option value=".($dt[0]).">".($dt[1])."</option>";
    if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
   }
    
   ?>    
   </select><br><br>
   


   <div id="contenu">
 <?php  
  // affichage des régions appartenant à la première marque.
   echo "<select size='1' name='region'>";   
    $rq="Select * from region where idmarque=".$j." order by nom;";
    $result= mysql_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
    while ($dt=mysql_fetch_row($result))
    { 
	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
    }    
	echo "</select>";
   ?>   
   </div>

</body></html>
et le fichier liresc.php qui me sert pour le OnChange de l'index:

<?php
header('Content-type: text') ; // on déclare ce qui va être afficher
 
// test des POST emis
if(isset($_POST['id']) && !empty($_POST['id']) ){
   $user="";
   $host="";
   $password="";
   $database="";
   $connexion = mysql_connect($host,$user,$password) or die ("Connexion au serveur impossible");   
   mysql_select_db($database,$connexion);
    $rq="Select * from region where idmarque=".$_POST['id']." order by nom;";
    $result= mysql_query ($rq) or die ("Select impossible");
     // $i = initialise le variable i
    $i=0;
	if (mysql_num_rows($result)>0)
	{
	  echo "<select size='1' name='region'>";
	}
	else
	{
	  echo utf8_encode("Pas de sous catégories disponible");	
	}
    while ($dt=mysql_fetch_row($result))
    { 	
	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[2])."</option><br>";
    }    
	echo "</select>";
}

?>
voilà, donc là j'affiche mes régions en fonction des marques
maintenant je voudrais afficher mes villes en fonction des marques & régions, puis je voudrais afficher mes boutiques en fonction des marques, régions & ville!!!

voici mes tables ville et boutique:

Code : Tout sélectionner

-- Structure de la table `ville` -- CREATE TABLE `ville` ( `id_ville` int(5) NOT NULL auto_increment, `idmarque` int(5) NOT NULL default '0', `idregion` int(5) NOT NULL default '0', `nom` varchar(255) NOT NULL default '', PRIMARY KEY (`id_ville`) ) TYPE=MyISAM AUTO_INCREMENT=6 ; -- -- Contenu de la table `ville` -- INSERT INTO `ville` VALUES (1, 0, 1, 'Bordeaux'); INSERT INTO `ville` VALUES (2, 0, 1, 'Léognan'); INSERT INTO `ville` VALUES (3, 0, 2, 'Dijon'); INSERT INTO `ville` VALUES (4, 0, 3, 'Cestas'); INSERT INTO `ville` VALUES (5, 0, 4, 'Paris'); -- Structure de la table `boutique` -- CREATE TABLE `boutique` ( `id_boutique` int(5) NOT NULL auto_increment, `idmarque` int(5) NOT NULL default '0', `idregion` int(5) NOT NULL default '0', `idville` int(5) NOT NULL default '0', `nom` varchar(255) NOT NULL default '', `detail` text NOT NULL, PRIMARY KEY (`id_boutique`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; -- -- Contenu de la table `boutique` --
voilà, j'ai donc réussit à le coder pour deux listes, mais j'arrive pas à pondre le code pour 4 listes !! car il faut afficher en fonction de beaucoup de choses ...

si quelqun veut bien m'aider, ce serait super gentil :)
merci