[RESOLU] Listes déroulantes dynamiques liées (3 niveaux)

Petit nouveau ! | 2 Messages

20 mai 2014, 11:25

Bonjour à tous !

J'ai un problème au niveau des listes déroulantes dynamiques liées.
Avant d'avoir posté ce topic, j'ai évidement suivi le topic dans la faq concernant les listes déroulantes dynamiques liées.

Tout fonctionne très bien, j'ai réussi à créer deux listes. La deuxième étant dépendante des résultats de la première (j'ai effectué ça avec des familles d'articles, sous familles).

Cependant après plus de deux jours dans le code en effectuant différents essais (même improbable =D> ), je n'arrive pas à créer une troisième liste en fonction de la deuxième créée.

Je sais, beaucoup me diront que si j'ai réussi à créer la liste L2 dépendant de L1 et bah que c'est le même processus.

Si c'est le cas, je ne pense pas avoir compris à 100% le processus.

En m'excusant du dérangement et en attendant un peu d'aide,

Cordialement,

KeiZ

Eléphant du PHP | 422 Messages

20 mai 2014, 13:08

hello

sans code c'est pas facile :)

++
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Petit nouveau ! | 2 Messages

20 mai 2014, 13:59

Bonjour,

Merci pour cette réponse. En effet, avec du code c'est plus simple mais pour l'instant mon code se résume, mise à part le base de données, à celui du tuto.
<?php

  include "DB.inc.php";
  include "fctAux.inc.php";
  
  enTete();
  contenu();
  pied();

    function contenu() {
	
		if(isset($_SESSION['droitAcces'])!=2)
		header("Location: login.php");
		
		if (  $_SESSION['droitAcces']==1 )
			header("Location: accueil.php");
      
  
		if (isset ($_SESSION['nom'])) {
	
		echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");

		/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */

		$serveur = "localhost";

		$admin   = "root";

		$mdp     = "";

		$base    = "mag";

		/* On récupère si elle existe la valeur de la famille envoyée par le formulaire */

		$idr = isset($_POST['famille'])?$_POST['famille']:null;


		if(isset($_POST['ok']) && isset($_POST['article']) && $_POST['article'] != "")

		{

			$famille_selectionnee = $_POST['famille'];

			$article_selectionne = $_POST['article'];
			
			$agent = $_POST['agent'];
			$bt = $_POST['bt'];
	

			?>

			<p>Vous avez selectionne le article <?php echo($article_selectionne); ?> dans la famille <?php echo($famille_selectionnee); ?> pour <?php echo($agent); ?> avec num bt : <?php echo($bt); ?> </p>

			<?php

		}


	$connexion = mysqli_connect($serveur, $admin, $mdp, $base);

	if($connexion != false)

	{


		$sql1 = "SELECT `idFa`, `lib`".

		" FROM `tab_famille`".

		" ORDER BY `idFa`";

		$rech_familles = mysqli_query($connexion,$sql1);

		$code_famille = array();

		$famille = array();

		/* On active un compteur pour les familles */

		$nb_familles = 0;

		if($rech_familles != false)

		{

			while($ligne = mysqli_fetch_assoc($rech_familles))

			{

				array_push($code_famille, $ligne['idFa']);

				array_push($famille, $ligne['lib']);



				/* On incrémente de compteur */

				$nb_familles++;

			}

		}

			?>

		<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgarticle">

		<table>
		<tr><td>selection de l'article</td>
		<td>

		<select name="famille" id="famille" onchange="document.forms['chgarticle'].submit();">

  <option value="-1">- - - Choisissez une famille - - -</option>

    <?php

    for($i = 0; $i < $nb_familles; $i++)

    {

?>

  <option value="<?php echo($code_famille[$i]); ?>"<?php echo((isset($idr) && $idr == $code_famille[$i])?" selected=\"selected\"":null); ?>><?php echo($famille[$i]); ?></option>

<?php

    }

    ?>

</select>

    <?php

    mysqli_free_result($rech_familles);

    /* On commence par vérifier si on a envoyé un numéro de famille et le cas échéant s'il est différent de -1 */



    if(isset($idr) && $idr != -1)

    {

        /* Création de la requête pour avoir les articles de cette famille */

        $sql2 = "SELECT `idA`, `lib`".

        " FROM `tab_art`".

        " WHERE `idF` = ". $idr ."".

        " ORDER BY `idA`;";

        if($connexion != false)

        {
		    $rech_article = mysqli_query($connexion,$sql2);

            /* Un petit compteur pour les articles */

            $nd = 0;

            /* On crée deux tableaux pour les numéros et les noms des articles */

            $code_article = array();

            $nom_article = array();

            /* On va mettre les numéros et noms des articles dans les deux tableaux */

            while($ligne_article = mysqli_fetch_assoc($rech_article))

            {
                array_push($code_article, $ligne_article['idA']);

                array_push($nom_article, $ligne_article['lib']);

                $nd++;

            }

            /* Maintenant on peut construire la liste déroulante */

            ?>

			<select name="article" id="article">
			<option value="-1">- - - Choisissez un article - - -</option>
            <?php  

            for($d = 0; $d<$nd; $d++)

            {

            ?>

			<option value="<?php echo($code_article[$d]); ?>"<?php echo((isset($article_selectionne) && $article_selectionne == $code_article[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_article[$d]." (". $code_article[$d] .")"); ?></option>

            <?php
            }
			?>

			</select>

<?php
			
			
				
		}
    }
	else{
		echo "</table>";
	}

?>




<br /><input type="submit" name="ok" id="ok" value="Effectuer la sortie finale" />


</form>

<?php

    /* Terminé, on ferme la connexion */

    mysqli_close($connexion);

}

}

?>

</body>

</html>
<?php } ?>

Pour moi, il faudrait imbriquer un autre if dans celui-ci " if(isset($idr) && $idr != -1)". A un moment en "bidouillant" j'ai réussi à obtenir une troisième liste, mais je n'arrivais pas à récupérer les articles dedans .. :/
( arbo : Famille - sous-famille - article )

Eléphant du PHP | 422 Messages

21 mai 2014, 13:54

hello

comme ca le code parait normal.

ajoute des echo de tes req mysql afin de pouvoir les valider dans phpmyadmin directe
ajoute des print_r($_POST) pour voir ce que tu passe à la page

le selected dans le select fonctionne ?


ps: créer une fonction contenu() n'a aucun interet , pose le code directe. (avis personnel)
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)