Menus déroulants imbriqués php/mysql

Fermé
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 - 18 juil. 2012 à 00:05
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 - 18 juil. 2012 à 16:52
Bonsoir,
Je deviens folle depuis 2 semaines et maintenant le temps presse.
J'ai un site web en php avec un formulaire. Impossible de créer en php un menu déroulant qui me sélectionne les pays dans ma bdd mysql et qui selon le choix effectué m'affiche un second menu déroulant avec les départements associés. Et puis renvoyer le tout pour alimenter ma base.
J'ai testé plein de codes, impossible.
Y'at-il quelqu'un pour m'aider svp ?
Un grand merci par avance et bonne soirée,
Evelyne
A voir également:

2 réponses

Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
18 juil. 2012 à 16:52
Bonjour,
Je reviens encore plus découragée qu'hier. Quelqu'un a eu la gentillesse de m'envoyer un script entièrement en php qui marche bien sur son site. Je l'ai adapté à mon problème. J'arrive bien à afficher les pays mais pas les départements.
Je mets mon code ci-dessous. Si quelqu'un avait un peu de temps pour voir où est le problème ce serait super sympa. Merci par avance,
Evelyne

<?php

$connexion = mysql_pconnect($serveur, $admin, $mdp);
 	    
if($connexion != false)

{

    $choixbase = mysql_select_db($base, $connexion);

    $sql1 = "SELECT 'id_pays', 'nomPays'".

    " FROM 'PAYS'".

    " ORDER BY 'id_pays'";

//  ICI C'EST LA PREMIERE REQUETE POUR SELECTIONNER UN PAYS DANS UNE FUTURE LISTE DEROULANTE

    $rech_pays = mysql_query($sql1);

    $id_pays = array();

    $nomPays = array();
    
    /* On active un compteur pour les régions */

    $nb_pays = 0;

    if($rech_pays != false)

    {

        while($ligne = mysql_fetch_assoc($rech_pays))

        {

            array_push($id_pays, $ligne['id_pays']);

            array_push($nomPays, $ligne['nomPays']);

            /* On incrémente de compteur */

            $nb_pays++;

        }

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



<p>Sélectionnez un pays</p>

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

  <option value="-1">- - - Choisissez un pays- - -</option>

    <?php
    
    	  
    for($i = 0; $i < $nb_pays; $i++)

    {

?>

  <option value="<?php echo($id_pays[$i]); ?>"<?php echo((isset($idp) && $idp == $id_pays[$i])?" selected=\"selected\"":null); ?>><?php echo($nomPays[$i]); ?></option>
// ICI C'EST LA LISTE DEROULANTE, DANS VALUE ON A L'ID ET ENTRE LA BALISE OPTION ON A nomPays
<?php

    }

    ?>

</select>

    <?php

   mysql_free_result($rech_pays);

    /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */
      	    
    if(isset($idp) && $idp != -1)

    {

        /* Cération de la requête pour avoir les départements de cette région */

        $sql2 = "SELECT 'id_departement', 'nomDepartement'".

        " FROM 'DEPARTEMENT'".

        " WHERE 'id_pays' = ". $idp ."".

        " ORDER BY 'id_departement';";

//ICI CEST LA DEUXIEME REQUETE POUR TROUVER UN DEPARTEMENT SUIVANT CE QUON A SELECTIONNER EN nomPays
// AVEC LA CLAUSE WHERE IDnomPays=$idr

        if($connexion != false)

        {

            $rech_departement = mysql_query($sql2, $connexion);

            /* Un petit compteur pour les départements */

            $nd = 0;

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

            $id_departement = array();

            $nomDepartement = array();

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

            while($ligne_departement = mysql_fetch_assoc($rech_departement))

            {

                array_push($id_departement, $ligne_departement['id_departement']);

                array_push($nomDepartement, $ligne_departement['nomDepartement']);

                $nd++;

            }

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

            ?>

<select name="nomDepartement" id="nomDepartement">

            <?php  

            for($d = 0; $d<$nd; $d++) // BOUCLE POUR LA DEUXIEME LISTE DEROULANTE

            {

                ?>

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

                <?php

            }

?>

</select>



<?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_departement);
    }
?>


<?php
    /* Terminé, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
   paramètres de connexion, mot de passe, serveur pas démarré etc... */
?>
<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
<?php
}
?> 
1
laoshu Messages postés 1231 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 24 mai 2015 350
18 juil. 2012 à 08:17
Bonjour,

Si tu veux qu'un choix dans un formulaire agisse sur un second choix, tu as deux possibilité, me semble-t-il :

1- Tu passes par du javascript pour prendre en compte le premier choix et agir sur le second sans que l'utilisateur aie besoin de recharger la page.

2- Tu fais en sorte que l'utilisateur change de page après avoir fait le premier choix.

Php s'exécute entièrement au chargement de la page. Quand l'utilisateur voit la page, php ne peut plus rien faire. (Ou alors on m'a menti)

J'aurais du mal à t'aider en javascript... mais tu trouveras de bons tutoriel sur Internet. Certains prétendent que le langage est assez simple...
0
Merci, je vois tout ça aujourd'hui, c'est très compliqué pour une débutante.
Je reviens vers le forum si je rencontre des difficultés avant de mettre en résolu ce post.
Bonne journée,
Evelyne
0