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

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 : [RESOLU] Listes déroulantes dynamiques liées (3 niveaux)

Re: Listes déroulantes dynamiques liées (3 niveaux)

par telnes » 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)

Re: Listes déroulantes dynamiques liées (3 niveaux)

par IKeiZ » 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 )

Re: Listes déroulantes dynamiques liées (3 niveaux)

par telnes » 20 mai 2014, 13:08

hello

sans code c'est pas facile :)

++

Listes déroulantes dynamiques liées (3 niveaux)

par IKeiZ » 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