Liste déroulante javascript/php

AdelineAda Messages postés 4 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 4 septembre 2007 - 31 août 2007 à 09:46
Ankaa1988 Messages postés 74 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 2 août 2010 - 4 sept. 2007 à 19:26
Bonjour,

Je ne suis pas très forte en Javascrip et apparement un peu dépassée en php  (je ne suis pas développeuse mais j'ai en charge les sites internet dans la société où je travaille).

J'ai un soucis qui pourrait se résoudre très vite si vous pourriez m'aider ...

Je vous explique ce que je dois faire sur le site où je travaille actuellement :
J'ai 2 listes déroulantes remplient dynamiquement par des requetes SQL.
Ma 2em liste apparait lorsque j'ai fait un 1er choix dans ma 1er liste déroulante.
Lorsque j'ai fait le choix dans ma 2em liste déroulante, le formulaire est lancé.
C'est pour cela que j'ai du me servir du javascript que je ne connais pas du tout.

J'ai donc cherché un script que j'ai adapté en remplissante mes listes grace à des requetes.

Jusque la tout va bien.

Mon soucis actuel, est que je dois garder le contenu de ma 1er liste lorsque j'ai déjà fait un 1er choix.
Tout ceux qui programme un peu en PHP sait que cela est possible grace à l'attribut "selected" de la balise <option> mais je suis ici dans un cas qui me dépasse puisque je ne comprend rien à la ligne correspondante. Et je ne saurais dire cela vient du javascript ou du php.

Pourriez vous m'aider à comprend quelle est la variable qui reprend la variable choisie ? et comment la passé dans mon selected lorsque qu'elle existe ?

Voici le code de la ligne que je ne comprend pas et qui contient le selected :

  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected="selected"":null); ?>><?php echo($region[$i]);

Et voici le code de ma page entière si cel peut vous aider à comprendre le fonctionnement :


<?php
echo("<?xml version="1.0" encoding="iso-8859-1"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = ""; // voir hébergeur
$admin = ""; // vide ou "root" en local
$mdp = ""; // vide en local
$base = ""; // nom de la BD
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */
$idr = isset($_POST['region'])?$_POST['region']:null;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml

" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un département selon la région choisie</title>
<script>
function Lien (f)
{
    i = f.elements['domaine'].selectedIndex;
    if (i == 0) return;
    top.location = 'domaine.php?page=dom&region=' + f.elements['region'].value + '&domaine=' + f.elements['domaine'].value;
}
</script>
</head>

<?php
if(isset($_POST['domaine']) && $_POST['domaine'] != "")
{
    $region_selectionnee = $_POST['region'];
    $dept_selectionne = $_POST['domaine'];
?>

  <?php
}
?>



  <?php


/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT `id_region`, `nom_region` FROM `region` ORDER BY `nom_region`";
    $rech_regions = mysql_query($sql1);
    $code_region = array();
    $region = array();
   


/* On active un compteur pour les régions */
    $nb_regions = 0;
    if($rech_regions != false)
    {
        while($ligne = mysql_fetch_assoc($rech_regions))
        {
            array_push($code_region, $ligne['id_region']);
            array_push($region, $ligne['nom_region']);






           

/* On incrémente de compteur */
            $nb_regions++;
        }
    }
    ?>


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

  
 <select name="region" id="region" class="deroulant" onchange="document.forms['chgdept'].submit();">
  <option value="-1">- Choisissez votre région -</option>
    <?php
 
    for($i = 0; $i < $nb_regions; $i++)
    {
?>
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]);
?>
</option>
<?php
    }
    ?>
</select>
 ,
   
     ----

     ,
    
      ----

         
 <?php
 mysql_free_result($rech_regions);
    /* 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($idr) && $idr != -1)
    {
  
       

/* Cération de la requête pour avoir les départements de cette région */        $sql2 "SELECT id_domaine, nom_domaine, id_region, region_domaine_ FROM domaine, region WHERE `id_region` ". $idr ." and region_domaine_ = id_region ORDER BY `nom_domaine`";
        if($connexion != false)
        {
   $rech_dept = 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 */
            $code_dept = array();
            $nom_dept = array();
           

/* On va mettre les numéros et noms des départements dans les deux tableaux */
            while($ligne_dept = mysql_fetch_assoc($rech_dept))
            {
                array_push($code_dept, $ligne_dept['id_domaine']);
                array_push($nom_dept, $ligne_dept['nom_domaine']);
                $nd++;
            }
          

  /* Maintenant on peut construire la liste déroulante */
           
   ?>
   
<select name="domaine" id="departement" class="deroulant" onchange="Lien(this.form);">
  <option value="-1">- Choisissez votre domaine -</option>
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d].""); ?></option>
                <?php
            }
?>
</select>
 ,
  <?php
        }
        /* Un petit coup de balai */
        mysql_free_result($rech_dept);
  $region=$_POST['region'];
  $domaine=$_POST['domaine'];
?>
         

        <?php
   if ($domaine!='') {
   echo "";
   }
   else {
   echo "";
   }
  } ?>
     

</form>
<?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... */
?>
Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.


<?php
}
?>

</html>






En espérant que vous pourrez m'aider !

--Adeline-Infographiste--


www.cideo.fr
- Cidéo, agence de communication

7 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
31 août 2007 à 11:21
par curiosite : a quoi sert cette partie de ton code ?
if ($domaine!='') {
echo "";
}
else {
echo "";
}
0
AdelineAda Messages postés 4 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 4 septembre 2007
31 août 2007 à 11:24
Et bien pour être franche ...
J'en sais rien...

J'ai fait plein de bidouille qd certaines choses fonctionnaient pas ...

Tu penses que le "if" ne sert à rien ? je pourrais le supprimer ?

--Adeline-Infographiste--
www.cideo.fr - Cidéo, agence de communication
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
31 août 2007 à 17:03
Salut

voila une traduction de ton code en francais

si quelquechose alors
afficher(chaine vide)
sinon
afficher(chaine vide)

en d'autre termes :
dans tout les cas :
afficher(chaine vide)

soit en plus court :
ne rien faire
<hr />une recherche sur exalead vous aurait peut-etre evite de poser cette question

In a dream, I saw me, drop dead...
U were there, U cried...
It was just a dream,
if I die, U won't cry, maybe, U'll be happy
0
AdelineAda Messages postés 4 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 4 septembre 2007
31 août 2007 à 17:25
Ah ! ok

Je croyais que tu parlais d'une ligne plus haut ...
Alors la je suis d'accord avec toi...

Et concernant mon problème ...
Tu vois comment l'aider ?

--Adeline-Infographiste--
www.cideo.fr - Cidéo, agence de communication
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ankaa1988 Messages postés 74 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 2 août 2010
1 sept. 2007 à 19:40
désoler mais je ne vois pas ce que tu veux faire

apres l'envoie du formulaire on va où? on recharge la même page et
c'est la que tu veux que le choix de la premièer liste soit le meme que
précedement? c'est bien ca?

et tu veux faire passer quoi comme information par ton formulaire? les 2 choix des 2 listes?
0
AdelineAda Messages postés 4 Date d'inscription vendredi 20 octobre 2006 Statut Membre Dernière intervention 4 septembre 2007
4 sept. 2007 à 11:21
Bonjour Ankaa1988,

Bon alors,

Ma page ci-dessus est en include() sur ma page principale qui me montre les infos que je veux voir grace aux listes déroulantes.
Je souhaiterais que lorsque j'ai envoyé mon formulaire, donc lorsque j'ai déjà fait un choix dans ma 1er liste déroulante, ce choix reste en selected après l'envoi de mon formulaire.

Voici ma page principale : http://www.giraud-distribution.com/domaine.php?page=dom&&region=8&&domaine=40
si cela peut vous aider...

Si vous avez d'autres questions ! N'hésitez pas ...
Cette modification sur le site commence à se faire urgente et je n'y arrive pas ... mais que je suis nulle ...

--Adeline-Infographiste--
www.cideo.fr - Cidéo, agence de communication
0
Ankaa1988 Messages postés 74 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 2 août 2010
4 sept. 2007 à 19:26
je n'ai pas lu ta page autant le dire car je n'ai pas le temps et j'en suis désolé... cependant si tu veux transmettre des infos après envoie de formulaire il faut utiliser le php (obligé)
donc je m'imagine un code du style:

donc tu as tes 2 elements selectionnés... du coup lorsque tu envoie le formulaire du récupère les valeurs selectionnés en php
en utilisant $_POST['liste1'] et $_POST['liste2']
puis en javascript tu utilises un simple if et une boucle
ie
script
for(a=0;a<nb d'elmt ds liste,a++){
if(a=<?php $_POST['liste1']; ?> )
{
document.form.nomliste.options[a].selected=true;
}
idem pour la 2
}
voila bon ce code est a verifié car la syntaxe doit être incorrect et a réadapter pour ton site mas il me semble que l'idée est la si j'ai bien tout compris...
++ et bon courage
0
Rejoignez-nous