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 :

Lier 3 liste déroulantes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut Lier 3 liste déroulantes
    Bonjour ,

    Sur le site internet que je développe actuellement, je travaille que une la partie administration , et plus particulièrement la GESTION DES ARTICLES (ou news).

    J'ai 3 tables dans ma base Mysql.
    - pages (id_page,titre,...)
    - chapitres (id_chapitre, id_page,titre,...)
    - paragraphes (id_paragraphe, id_chapitre, titre, texte,...)


    Après plusieurs recherches, j'ai trouvé un tuto AJAX , afin de lier 2 listes déroulantes.
    Ainsi, j'ai une liste déroulante (name="cat") qui affiche les titres des pages, puis une 2ème (name="sous_cat") qui affiche les chapitres de la page sélectionné dans la liste n°1.

    Mais le souci c'est qu'il existe plusieurs paragraphes par chapitre, il est donc nécessaire d'avoir une 3ème liste déroulante également lié à la liste chapitre (name="sous_cat").

    Je n'arrive pas à modifier mon code afin d'obtenir la liste des paragraphes (dans ma 3ème liste) rattachés à la page et principalement au chapitre sélectionné.

    Voici les 2 pages de codes:

    La page essai.php

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    <?php require_once('infos_connexion.php'); ?>
     
    <html>
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <script type="text/javascript">
    	/**
    	 * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
    	 */
    	function sendData(param, page)
    	{
    		if(document.all)
    		{
    			//Internet Explorer
    			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
    		}//fin if
    		else
    		{
    		    //Mozilla
    			var XhrObj = new XMLHttpRequest();
    		}//fin else
     
    		//définition de l'endroit d'affichage:
    		var content = document.getElementById("contenu");
     
    		XhrObj.open("POST", page);
     
    		//Ok pour la page cible
    		XhrObj.onreadystatechange = function()
    		{
    			if (XhrObj.readyState == 4 && XhrObj.status == 200)
    				content.innerHTML = XhrObj.responseText ;
    		}
     
    		XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		XhrObj.send(param);
    	}//fin fonction SendData
     
        </script>
    	<?php include("./haut.php"); ?>
    </head>
    <body>
     
    <?php
     
       $i=0; // variable de test
       $j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");
     
       mysql_select_db($database,$connexion);
     
       // Séléction de tous les enregistrements de la table Catégorie
       $rq="Select * from pages order by id_page;";
       $result= mysql_query ($rq) or die ("Select impossible");
       ?>
         <H3><strong><u><H3>Modifier un article</H3></u></strong></H3>
     
    	 <table width="500" border="0" cellpadding="5" cellspacing="0">
              <tr>
                <td width="240"><div align="center">
      <form name=nav method=post> 
    <H4>Choix de la page</H4>  <select size="1" name="cat" OnChange="sendData('id='+this.value,'liresc.php')" onKeyUp="sendData('id='+this.value,'liresc.php')">
     
    <?php     
       while ($dt=mysql_fetch_row($result))
       {
        // Remplir la liste déroulante des catégorie	
    	echo "<option value=".($dt[0]).">".($dt[1])."</option>";
        if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
       }
     
       ?>    
       </select><br><br>
     
     
     
       <div id="contenu">
     
     <!-- affichage des sous-catégorie appartenant à la première catégorie.-->
       <H4>Choix du chapitre</H4><select size='1' name='souscat'>
     <?php    
        $rq="Select * from chapitres where id_page=".$j." order by id_chapitre;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
        while ($dt=mysql_fetch_row($result))
        { 
    	 echo "<option value=".$dt[0].">".$dt[3]."</option><br>";
        }  ?>  
    	</select>
    	 <H4>Choix du paragraphe</H4><select size='1' name='para'>
     <?php    
        $rq="Select * from paragraphes where id_chapitre=".$j." order by id_paragraphe;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
        while ($dt=mysql_fetch_row($result))
        { 
    	 echo "<option value=".$dt[0].">".$dt[3]."</option><br>";
        }  ?>  
    	</select>
     
    	<p><input type='submit' name='Submit' value='Confirmer'></p>
     
     
     
        </div></div></td>
     
              </tr>
                  </table>
     
    			   </table>
     
    </form>
        </body>
    	</html>

    La page liresc.php

    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
    <?php require_once('infos_connexion.php'); ?>
     
    <?php
    header('Content-type: text') ; // on déclare ce qui va être afficher
     
    // test des POST emis
    if(isset($_POST['id']) && !empty($_POST['id']) ){
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");   
       mysql_select_db($database,$connexion);
        $rq="Select * from chapitres where id_page=".$_POST['id']." order by id_page;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
    	if (mysql_num_rows($result)>0)
    	{
    	  echo "<H4>Choix du chapitre</H4><select size='1' name='souscat'>";
    	}
    	else
    	{
    	  echo utf8_encode("Pas de chapitre disponible");	
    	}
        while ($dt=mysql_fetch_row($result))
        { 	
    	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[3])."</option><br>";
        }    
    	}
     
    ?>
    <?php
    header('Content-type: text') ; // on déclare ce qui va être afficher
     
    // test des POST emis
    if(isset($_POST['id']) && !empty($_POST['id']) ){
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");   
       mysql_select_db($database,$connexion);
        $rq="Select * from paragraphes where id_chapitre=".$_POST['id']." order by id_chapitre;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
    	if (mysql_num_rows($result)>0)
    	{
    	  echo "<H4>Choix du paragraphe</H4><select size='1' name='para'>";
    	}
    	else
    	{
    	  echo utf8_encode("Pas de paragraphe disponible");	
    	}
        while ($dt=mysql_fetch_row($result))
        { 	
    	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[3])."</option><br>";
        }    
    	}
     
    ?>
    	</select><p><input type='submit' name='Submit' value='Confirmer'></p>
    Merci d'avance à ceux qui y jeteront un coup d'oeil!!!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut commencer par construire ton <select> "sous_cat" à l'image de ce que tu as fais pour le <select> "cat".
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    Jai fais comme tu as dis mais à chaque changement de sélection que ce soit dans la liste "cat" contenant les pages ou dans la liste "souscat" contenant les chapitres , la partie correspondante aux paragraphes disparait.

    J'ai du mal à voir ou est mon erreur !!!

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    montre ton code maintenant.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 205
    Par défaut
    la page essai.php

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    <?php require_once('infos_connexion.php'); ?>
     
    <html>
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <script type="text/javascript">
    	/**
    	 * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest
    	 */
    	function sendData(param, page)
    	{
    		if(document.all)
    		{
    			//Internet Explorer
    			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
    		}//fin if
    		else
    		{
    		    //Mozilla
    			var XhrObj = new XMLHttpRequest();
    		}//fin else
     
    		//définition de l'endroit d'affichage:
    		var content = document.getElementById("contenu");
     
    		XhrObj.open("POST", page);
     
    		//Ok pour la page cible
    		XhrObj.onreadystatechange = function()
    		{
    			if (XhrObj.readyState == 4 && XhrObj.status == 200)
    				content.innerHTML = XhrObj.responseText ;
    		}
     
    		XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		XhrObj.send(param);
    	}//fin fonction SendData
     
        </script>
    	<?php include("./haut.php"); ?>
    </head>
    <body>
     
    <?php
     
       $i=0; // variable de test
       $j=0; // variable pour garder la valeur du premier enregistrement catégorie pour l'affichage
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");
     
       mysql_select_db($database,$connexion);
     
       // Séléction de tous les enregistrements de la table Catégorie
       $rq="Select * from pages order by id_page;";
       $result= mysql_query ($rq) or die ("Select impossible");
       ?>
         <H3><strong><u><H3>Modifier un article</H3></u></strong></H3>
     
    	 <table width="500" border="0" cellpadding="5" cellspacing="0">
              <tr>
                <td width="240"><div align="center">
      <form name=nav method=post> 
    <H4>Choix de la page</H4>  <select size="1" name="cat" OnChange="sendData('id='+this.value,'liresc.php')" onKeyUp="sendData('id='+this.value,'liresc.php')">
     
    <?php     
       while ($dt=mysql_fetch_row($result))
       {
        // Remplir la liste déroulante des catégorie	
    	echo "<option value=".($dt[0]).">".($dt[1])."</option>";
        if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
       }
     
       ?>    
       </select><br><br>
     
     
     
       <div id="contenu">
     
     <!-- affichage des sous-catégorie appartenant à la première catégorie.-->
       <H4>Choix du chapitre</H4><select size='1' name='souscat' OnChange="sendData('ids='+this.value,'liresc.php')" onKeyUp="sendData('ids='+this.value,'liresc.php')">
     <?php    
     
     
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");
     
       mysql_select_db($database,$connexion);
     
        $rq="Select * from chapitres where id_page=".$j." order by id_chapitre;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
        while ($dt=mysql_fetch_row($result))
        { 
    	 echo "<option value=".$dt[0].">".$dt[3]."</option><br>";
    	 if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
        }  ?>  
    	</select>
    	 <H4>Choix du paragraphe</H4><select size='1' name='para' >
     <?php   
     
        $rq="Select * from paragraphes where id_chapitre=".$j." order by id_paragraphe;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
        while ($dt=mysql_fetch_row($result))
        { 
    	 echo "<option value=".$dt[0].">".$dt[3]."</option><br>";
    	  if ($i==0) { $j=$dt[0]; $i=1; } // garder la valeur du premier enregistrement
        }  ?>  
    	</select>
     
    	<p><input type='submit' name='Submit' value='Confirmer'></p>
     
     
     
        </div></div></td>
     
              </tr>
                  </table>
     
    			   </table>
     
    </form>
        </body>
    	</html>

    La page liresc.php

    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
    <?php require_once('infos_connexion.php'); ?>
     
    <?php
    header('Content-type: text') ; // on déclare ce qui va être afficher
     
    // test des POST emis
    if(isset($_POST['id']) && !empty($_POST['id']) ){
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");   
       mysql_select_db($database,$connexion);
        $rq="Select * from chapitres where id_page=".$_POST['id']." order by id_page;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
    	if (mysql_num_rows($result)>0)
    	{
    	  echo "<H4>Choix du chapitre</H4><select size='1' name='souscat'>";
    	}
    	else
    	{
    	  echo utf8_encode("Pas de chapitre disponible");	
    	}
        while ($dt=mysql_fetch_row($result))
        { 	
    	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[3])."</option><br>";
        }    
    	}
     
    ?>
     
     
    <?php
    header('Content-type: text') ; // on déclare ce qui va être afficher
     
    // test des POST emis
    if(isset($_POST['ids']) && !empty($_POST['ids']) ){
     
       $connexion = mysql_connect($hostname_db,$username_db,$password_db) or die ("Connexion au serveur impossible");   
       mysql_select_db($database,$connexion);
        $rq="Select * from paragraphes where id_chapitre=".$_POST['ids']." order by id_chapitre;";
        $result= mysql_query ($rq) or die ("Select impossible");
         // $i = initialise le variable i
        $i=0;
    	if (mysql_num_rows($result)>0)
    	{
    	  echo "<H4>Choix du chapitre</H4><select size='1' name='souscat'>";
    	}
    	else
    	{
    	  echo utf8_encode("Pas de chapitre disponible");	
    	}
        while ($dt=mysql_fetch_row($result))
        { 	
    	 echo "<option value=".utf8_encode($dt[0]).">".utf8_encode($dt[3])."</option><br>";
        }    
    	}
     
    ?>
    	</select><p><input type='submit' name='Submit' value='Confirmer'></p>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Essai de bien comprendre ce que tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sendData('id='+this.value,'liresc.php'
    quand tu actives le "onchange", tu envoies vers liresc des parametres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var content = document.getElementById("contenu");
    Tout ce qui va sortir (echo) de liresc.php va etre affiché à l'interieur du <div id="contenu">

    ----
    Actuellement tu as les problemes suivants :
    - dans ton liresc, tu as deux fois la meme condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['id']) && !empty($_POST['id']) ){
    la deuxieme devrait etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['ids']) && !empty($_POST['ids']) ){
    puisque ton deuxieme select renvoit le paramètre id.

    - dans liresc, il n'y a pas de balise <select> pour les chapitres.

    De plus il faut un peu de logique :
    etape 1 = fichier essai.php - il ne doit y avoir que le select pour la page,<div id="chapitre"></div>, <div id="paragraphe"></div>
    etape 2 - on a $_POST['id'] - liresc ajoute le deuxieme select
    etape 3 - on a $_POST['ids'] - liresc ajoute le troisieme select

    Et tu vas me dire : ba oui mais tu viens me dire que je remplacais le contenu de <div id="contenu"> et tu viens de l'enlever !
    Effectivement je mets bien un <div> pour chaque zone que je veux ajouter.
    Il faut par contre bien indiquer quelle zone je remplace sur quelle action , on va donc passer un parametre vers la javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnChange="sendData('id='+this.value,'paragraphe','liresc.php')"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function sendData(param, zone, page)	{
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var content = document.getElementById(zone);
    J'espere que je n'ai pas été trop fouilli.
    N'hesite pas a me poser des questions et j'espere que ca va marcher surtout
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. lier une liste déroulante et un simple texte HTML
    Par gregolak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/07/2006, 15h42
  2. Lier checkbox, liste déroulante et input texte
    Par pymouse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/05/2006, 14h58
  3. Lier checkbox, liste déroulante et input texte
    Par pymouse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/05/2006, 11h32
  4. [PHP-JS] Lier deux listes déroulantes
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 15/11/2005, 15h36
  5. [WD5.5] Lier deux listes déroulantes
    Par grellierj dans le forum WinDev
    Réponses: 7
    Dernier message: 11/10/2005, 17h33

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