IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Alimentation liste déroulante appelée dans include


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut Alimentation liste déroulante appelée dans include
    Bonjour,

    Le script ci-dessous fonctionne très bien lorsqu'il est appelé directement dans l'URL.
    Dans une première liste déroulante, on sélectionne une valeur, et en fonction de la valeur sélectionnée, une seconde liste déroulante est alimentée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
     
    include('functions.php');
     
    // On contrôle si un choix a été fait dans la 1ère LD
    // choix du centre
      $idn = ISSET($_POST['sel_cent'])?$_POST['sel_cent']:null;
      $idv = ISSET($_POST['sel_vil'])?$_POST['sel_vil']:null;
     
    	if(isset($_POST['ok']) && isset($_POST['sel_vil']) && $_POST['sel_vil'] != "") {
    		$centre_selectionne = $_POST['sel_cent'];
    		$ville_selectionnee = $_POST['sel_vil'];
    	}
     
    	// Récupération des numéros et des noms de centre
    	// pour alimenter la 1ère LD - sélection du centre
    	$sql1 = "SELECT num_cent, nom FROM centres GROUP BY nom";
     
    		$rq1 = mysql_query($sql1);
    		$nrc = mysql_num_rows($rq1);
     
    		//$code_cent = array();
    		$sel_cent = array();
     
    			while($ligne = mysql_fetch_assoc($rq1)) {
     
    				//array_push($code_cent, $ligne['num_cent']);
    				array_push($sel_cent, $ligne['nom']);
     
    			}
     
    ?>
     
    	<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" id="chgcent">
    	<select name="sel_cent" onchange="document.forms['chgcent'].submit();">
    	<option value="-1"> - S&eacute;lectionner un centre - </option>
     
    	<?php for($i=0; $i<$nrc; $i++) { ?>
     
    		<option value="<?php echo($sel_cent[$i]); ?>"<?php echo((isset($idn) && $idn == $sel_cent[$i])?" selected=\"selected\"":null); ?>><?php echo($sel_cent[$i]); ?></option>
     
    	<?php } ?>
    	</select>
     
    <?php 
     
    mysql_free_result($rq1);
     
    	if(ISSET($idn) && $idn != -1) {
     
    		$sql2 = "SELECT * FROM centres WHERE nom='".$idn."' GROUP BY ville";
     
    			$rq2 = mysql_query($sql2);
    			$nrv = 0;
     
    			$code_centre = array();
    			$code_postal = array();
    			$sel_ville = array();
     
    				while($row = mysql_fetch_assoc($rq2)) {
    					array_push($code_centre, $row['num_cent']);
    					array_push($code_postal, $row['cpostal']);
    					array_push($sel_ville, $row['ville']);
    					$nrv++;
    				}
    //	}
     
    ?>
     
    	<select name="sel_vil" id="sel_vil">
    		<option value="-1"> - S&eacute;lectionner une ville - </option>
     
    	<?php for($j=0; $j<$nrv; $j++) { ?>
     
    		<option value="<?php echo($code_centre[$j]); ?>"<?php echo((isset($idv) && $idv == $code_centre[$j])?" selected=\"selected\"":null); ?>><?php echo($code_postal[$j]." - ".$sel_ville[$j]); ?></option>
     
    	<?php } ?>
    	</select>
    	</form>
     
    <?php
    }
    ?>
    Par contre, lorsque je l'appelle, par le biais d'un include dans un second scipt (ci-dessous), uniquement la première liste est alimentée, et malgré le choix dans celle-ci, la seconde liste ne s'affiche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
     
    /*******************************************/
    /*  Module      : Suppression d'un centre  */
    /*  Créer le    : 23 / 09 / 2009           */
    /*  Modifié le  :    /    / 2009           */
    /*  Par         : Pascal Richard           */
    /*  Version     : 1.0                      */
    /*******************************************/
     
    include('sel_centre.php');
     
    $formulaire="<input type=\"hidden\" name=\"valeur\" value=\"2\">";
    //$formulaire.="<label for=\"Cnom\" class=\"haut\">Nom du Centre : </label><div class=\"champs\"><input type=\"text\" name=\"Cnom\" size=\"50\" /></div>";
    $formulaire.="<label for=\"Cadr\" class=\"haut\">Adresse : </label><div class=\"champs\"><input type=\"text\" name=\"Cadr\" size=\"50\" /></div>";
    $formulaire.="<label for=\"Cpltadr\" class=\"haut\">Compl&eacute;ment : </label><div class=\"champs\"><input type=\"text\" name=\"Cpltadr\" size=\"50\" /></div>";
    $formulaire.="<label for=\"Cpos\" class=\"haut\">Code postal : </label><div class=\"champs\"><input type=\"text\" name=\"Cpos\" size=\"5\" /></div>";
    //$formulaire.="<label for=\"Cvil\" class=\"haut\">Ville : </label><div class=\"champs\"><input type=\"text\" name=\"Cvil\" /></div>";
    $formulaire.="<label for=\"Ctel\" class=\"haut\">T&eacute;l&eacute;phone : </label><div class=\"champs\"><input type=\"text\" name=\"Ctel\" size=\"10\" /></div>";
    $formulaire.="<label for=\"Cfax\" class=\"haut\">Fax. : </label><div class=\"champs\"><input type=\"text\" name=\"Cfax\" size=\"10\" /></div>";
    $formulaire.="<label for=\"Cmel\" class=\"haut\">Mail : </label><div class=\"champs\"><input type=\"text\" name=\"Cmel\" size=\"50\" /></div>";
    $formulaire.="<input type=\"submit\" name=\"submit\" value=\"Suppression\" style=\"background-color: #144974; width: 640px; margin-top: 20px; color: white;\" />";
     
    ?>
    Quelqu'un peut-il m'expliquer ce dysfonctionnement ?

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2009
    Messages : 35
    Par défaut
    Si ton fichier inclus marche, le fichier qui l'inclu devrait aussi marcher, y'a pas de raison.
    Le seul risque de bug ce serait un conflit d'attribut name (par exemple tu te retrouve avec deux formulaires ou champs qui ont le meme nom dans la page).

    Je pense que le mieux c'est de faire le test suivant :
    - Vérifier que "sel_centre.php" appelé tous seul marche correctement.
    - Tester si l'appele au fichier php suivant fait la meme chose (un fichier contenant uniquement l'include) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    include "sel_centre.php";
    ?>
    Si ca marche, ca veux dire que c'est le code du fichier englobant qui rentre en conflit avec le code de l'include.

    Si ca ne marche pas...et bien je ne vois pas.

  3. #3
    Membre confirmé Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Merci pour ta réponse gobygoba.
    J'ai fait les tests.
    Seul, le script fonctionne. Il fonctionne aussi quand il est inclus dans le script php supCent.php.

    Le problème vient de plus haut, mais je ne vois pas comment je peux faire.

    En fait, je me retrouve avec 2 <FORM...>.

    Voici donc le script d'où vient le problème. Comme tu peux voir j'ai fait un petit test à l'aide d'un IF pour ne pas inclure le script supCent dans la balise <FORM ...> du fichier ci-dessous.

    Je pense qu'il ne doit pas y avoir grand chose, mais franchement, je ne vois pas ce qui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <?php
    include('link.inc.php');
    ?>
    <html>
    <head><TITLE></TITLE>
     
    <link href="menus.css" rel="StyleSheet" \>
     
    <script type="text/javascript">
     
      function montre(valm) {
        document.getElementById(valm).style.display = "block";
      }
     
      function cache(val1, val2, val3, val4) {
        document.getElementById(val1).style.display = "none";
        document.getElementById(val2).style.display = "none";
        document.getElementById(val3).style.display = "none";
        document.getElementById(val4).style.display = "none";
      }
     
    </script>
     
    </head>
     
    <div class="fond">
       <div class="zone1" onmouseover='cache("niveau2", "niveau3", "niveau4", "niveau5"); montre("niveau1")'></div>
       <div class="zone2" onmouseover='cache("niveau1", "niveau3", "niveau4", "niveau5"); montre("niveau2")'></div>
       <div class="zone3" onmouseover='cache("niveau1", "niveau2", "niveau4", "niveau5"); montre("niveau3")'></div>
       <div class="zone4" onmouseover='cache("niveau1", "niveau2", "niveau3", "niveau5"); montre("niveau4")'></div>
       <div class="zone5" onmouseover='cache("niveau1", "niveau2", "niveau3", "niveau4"); montre("niveau5")'></div>
    </div>
     
    <div class="centrer">
      <div id="menu">
     
         <ul id="niveau1" class="niveau1" style="left: 0px">
            <li><?php echo "<a href=\"menus.php?link_no=1\">Ajout</a>"; ?></li>
            <li><?php echo "<a href=\"menus.php?link_no=2\">Suppression</a>"; ?></li>
            <li><?php echo "<a href=\"menus.php?link_no=3\">Modification</a>"; ?></li>
         </ul>
     
         <ul id="niveau2" class="niveau2" style="left: 140px">
            <li><a href="addForm.php">Ajout</a></li>
            <li><a href="supForm.php">Suppression</a></li>
            <li><a href="modForm.php">Modification</a></li>
         </ul>
     
         <ul id="niveau3" class="niveau3" style="left: 280px">
            <li><a href="addAgent.php">Ajout fiche</a></li>
            <li><a href="supAgent.php">Supp. fiche</a></li>
            <li><a href="modAgent.php">Modif. fiche</a></li>
         </ul>
     
         <ul id="niveau4" class="niveau4" style="left: 420px">
            <li><a href="rechPAgent.php">par Agent</a></li>
            <li><a href="rechPAnnee.php">par Ann&eacute;e</a></li>
            <li><a href="rechPForm.php">par Format.</a></li>
         </ul>
     
         <ul id="niveau5" class="niveau5" style="left: 560px">
            <li><a href="menu 4">Cr&eacute;er</a></li>
            <li><a href="menu 4">Supprimer</a></li>
            <li><a href="menu 4">Modifier</a></li>
         </ul>
     
      </div>
    </div>
     
    <!--<body>-->
     
    <?php echo "<div class=$class>";
     
    if (ISSET($page) && substr($page, 0, 3) == "sup") {
     
    	include $page;
    	echo $formulaire;
     
    } else {
     
    ?>
     
     
    <form name="formDatas" action="dataRecord.php" method="POST">
     
      <?php
        include $page;
        echo $formulaire; }
      ?>
     
    </form>
     
    <?php echo "</div>"; ?>
     
    <!--</body>-->
    </html>

  4. #4
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2009
    Messages : 35
    Par défaut
    Déjà ce que je peux te dire c'est que ton code html doit avoir la structure suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <head>
    ...
    </head>
    <body>
    ....
    .... (ton code html, a savoir form, div...)
    ....
    </body>
    </html>
    Alors que dans ton code les balise body son mit en commentaire et elle ne contiennent pas tout ton tes "div".

    Ensuite je n'arrive pas vraiment a voir ou est le problème, donc si tu peux me donner le code source de ta page html (bouton droit sur la page -> afficher le code source de la page), ca m'aidera certainement a t'en dire plus.

  5. #5
    Membre confirmé Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    Bonjour gobygoba,

    Merci de prendre du temps pour m'aider.
    La balise <BODY> commentée .... que te dire !!! ... une erreur !

    Quoiqu'il en soit, j'ai aussi testé avec cette balise, mais cela ne fonctionne pas non plus.

    Voici comme tu le demandais, le code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <html>
    <head><TITLE></TITLE>
     
    <link href="menus.css" rel="StyleSheet" \>
     
    <script type="text/javascript">
     
      function montre(valm) {
        document.getElementById(valm).style.display = "block";
      }
     
      function cache(val1, val2, val3, val4) {
        document.getElementById(val1).style.display = "none";
        document.getElementById(val2).style.display = "none";
        document.getElementById(val3).style.display = "none";
        document.getElementById(val4).style.display = "none";
      }
     
    </script>
     
    </head>
     
    <div class="fond">
       <div class="zone1" onmouseover='cache("niveau2", "niveau3", "niveau4", "niveau5"); montre("niveau1")'></div>
       <div class="zone2" onmouseover='cache("niveau1", "niveau3", "niveau4", "niveau5"); montre("niveau2")'></div>
       <div class="zone3" onmouseover='cache("niveau1", "niveau2", "niveau4", "niveau5"); montre("niveau3")'></div>
     
       <div class="zone4" onmouseover='cache("niveau1", "niveau2", "niveau3", "niveau5"); montre("niveau4")'></div>
       <div class="zone5" onmouseover='cache("niveau1", "niveau2", "niveau3", "niveau4"); montre("niveau5")'></div>
    </div>
     
    <div class="centrer">
      <div id="menu">
     
         <ul id="niveau1" class="niveau1" style="left: 0px">
            <li><a href="menus.php?link_no=1">Ajout</a></li>
            <li><a href="menus.php?link_no=2">Suppression</a></li>
     
            <li><a href="menus.php?link_no=3">Modification</a></li>
         </ul>
     
         <ul id="niveau2" class="niveau2" style="left: 140px">
            <li><a href="addForm.php">Ajout</a></li>
            <li><a href="supForm.php">Suppression</a></li>
            <li><a href="modForm.php">Modification</a></li>
     
         </ul>
     
         <ul id="niveau3" class="niveau3" style="left: 280px">
            <li><a href="addAgent.php">Ajout fiche</a></li>
            <li><a href="supAgent.php">Supp. fiche</a></li>
            <li><a href="modAgent.php">Modif. fiche</a></li>
         </ul>
     
         <ul id="niveau4" class="niveau4" style="left: 420px">
            <li><a href="rechPAgent.php">par Agent</a></li>
            <li><a href="rechPAnnee.php">par Ann&eacute;e</a></li>
            <li><a href="rechPForm.php">par Format.</a></li>
         </ul>
     
         <ul id="niveau5" class="niveau5" style="left: 560px">
     
            <li><a href="menu 4">Cr&eacute;er</a></li>
            <li><a href="menu 4">Supprimer</a></li>
            <li><a href="menu 4">Modifier</a></li>
         </ul>
     
      </div>
    </div>
     
    <body>
     
    <div class=cadre_supCent>
    	<form action="/gestionFormation/menus.php" method="POST" id="chgcent">
    	<select name="sel_cent" onchange="document.forms['chgcent'].submit();">
    	<option value="-1"> - S&eacute;lectionner un centre - </option>
     
     
    		<option value="Centre d'apprentissage du japonais">Centre d'apprentissage du japonais</option>
     
    		</select>
     
    <br><br><br>Valeur = 	
    <input type="hidden" name="valeur" value="2"><label for="Cadr" class="haut">Adresse : </label><div class="champs"><input type="text" name="Cadr" size="50" /></div><label for="Cpltadr" class="haut">Compl&eacute;ment : </label><div class="champs"><input type="text" name="Cpltadr" size="50" /></div><label for="Cpos" class="haut">Code postal : </label><div class="champs"><input type="text" name="Cpos" size="5" /></div><label for="Ctel" class="haut">T&eacute;l&eacute;phone : </label><div class="champs"><input type="text" name="Ctel" size="10" /></div><label for="Cfax" class="haut">Fax. : </label><div class="champs"><input type="text" name="Cfax" size="10" /></div><label for="Cmel" class="haut">Mail : </label><div class="champs"><input type="text" name="Cmel" size="50" /></div><input type="submit" name="submit" value="Suppression" style="background-color: #144974; width: 640px; margin-top: 20px; color: white;" />
    </form>
     
    </div>
    </body>
    </html>
    Merci encore pour ton aide

  6. #6
    Membre actif
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2009
    Messages : 35
    Par défaut
    Je pense avoir trouvé.

    Grace au plugin firebug de firefox, j'ai remarquer que lorsque que je modifiais la valeur de ta combo box, une erreur javascript apparaissait :
    "document.forms.chgcent.submit is not a function"
    J'ai alors remarqué que le bouton "suppression" possède un attribut name="submit". Donc quand tu met sur le onchange de ton select "document.forms.chgcent.submit()" le javascript ne comprend pas car sur ce form il y a un élément "submit" ! Autrement dit, tu a écrasé la fonction submit() du formulaire par un bouton qui s'appele submit => le javascript te dit que submit n'est pas une fonction.
    C'est assez subtile comme bug...

    Pour corriger ca il faut que tu change la valeur de l'attribut name du bouton "suppression" (mettre autre chose que "submit").

    PS: Sinon une méthode simple pour voir d'ou viens le problème, c'est de supprimer les ligne une par une, et de tester a chaque fois si ca marche ou pas. Des que ca marche, c'est que la ligne que tu as supprimé provoquait le bug.

  7. #7
    Membre confirmé Avatar de Poseidon62
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Par défaut
    J'ai donc renommé le bouton suppression.
    Cette fois, lorsque je sélectionne un centre dans la LD, tout le formulaire disparait pour afficher une page blanche.
    Seuls restent affichés le logo et le menu.

    Je ferai des tests en supprimant/remettant une à une les lignes jusqu'à trouver le bug.

    Quoiqu'il en soit, je te remercie pour ton aide.

    ++

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/05/2006, 03h31
  2. Réponses: 4
    Dernier message: 23/04/2006, 21h27
  3. Listes déroulantes => récupération dans variable en tps r
    Par Sayrus dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/03/2006, 15h55
  4. Réponses: 4
    Dernier message: 17/03/2006, 14h39
  5. liste déroulante asp dans javascript
    Par croco83 dans le forum ASP
    Réponses: 6
    Dernier message: 12/05/2004, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo