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

AJAX Discussion :

[AJAX] Menu déroulant dynamique lié à la base de données


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut [AJAX] Menu déroulant dynamique lié à la base de données
    bonjour,

    je souhaite réaliser un formulaire avec des menus déroulants dynamique:

    lorsque je sélectionne le numéro de la semaine désirée dans la première liste , la deuxième liste affiche les valeurs des jours présents dans la base de donnée .

    de même ensuite, en ayant choisi le bon jour, je veux que dans ma troisième liste, j'affiche les entrées correspondantes à ce jour . ( pour chaque jour il y a 4 entrées de proposées, référencées dans la base de donnée au jour désiré ) .

    il en sera de même pour les plats et les desserts, mais une fois que j'aurai la structure pour les entrées, ca sera identique.

    voici le code que j'ai actuellement pour le choix des jours ( il est quasiment identique pour les choix des entrées ). le problème c'est qu'il ne s'effectue que lors de l'envoi du formulaire. et je souhaiterai donc que cela s'effectue lors du choix de la semaine , afin de tout envoyer une fois que tout sera selectionné

    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
     
     
    semaine:
    	<select name="semaine">
    	<?php 
            for ($i=1;$i<53;$i++)
             {       
            ?>
    	<option value="<?php echo($i);?>"><?php echo($i);?>
    	<?php
            }
            ?>
    	</select> 
     
    <?php 
                                                    mysql_connect( "localhost", "root", "mysql");
                                                    mysql_select_db("syres");
    $valeur=$_POST['semaine'];
                                                    $rqSql = "SELECT jour,mois,année FROM menus WHERE semaine='$valeur' ";
                                                    // Exécution de la requête
                                                    $result = mysql_query( $rqSql)
                                                            or die( "Exécution requête impossible.");
                                                    $lb = "<SELECT NAME='jour'>";
                                                    $lb .= "<OPTION VALUE=''>Choisissez</OPTION>";
                                                    // On boucle sur la table
                                                    while ( $row = mysql_fetch_array( $result))
                                            {
                                                    
                                                    $jour = $row["jour"];
                                                    $mois = $row["mois"];
                                                    $annee=$row["année"];
                                                    
                                                    $lb .= "<OPTION VALUE='$jour'>$jour / $mois /$annee</OPTION>";
                                            }
                                            $lb .= "</SELECT>";
                                            mysql_close();
                                                            print $lb;
    ?>
    j'ai regardé sur google , il semblerai que le couplage php/javascript permette sans problème de faire ca, mais je n'y arrive pas :
    (inutile de préciser que je débute en php )

    merci d'avance de m'aider

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu ne veux pas de rechargement, il faut effectivement passer par du Javascript :
    http://siddh.developpez.com/articles/ajax/

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    merci beaucoup, c'est exactement ce qu'il me fallait

    maintenant que j'ai réussi a faire ca, je souhaiterai faire la même chose, mais en allant chercher 4 valeurs dans la même ligne de ma base de donnée : je m'explique :

    la BDD est composée de colonnes comprenant : id, semaine, jour, mois, année, entrée 1, entrée 2, entrée 3, entrée 4, plat 1 , etc.....

    ce que je souhaiterai faire plus exactement, c'est que , en fonction des deux listes déroulantes précédentes ( semaine et jour ) , j'aille afficher dans la 3 eme liste les 4 entrées correspondantes.


    pour cela, pour le moment , comme on le voit sur le code ci-dessous, j'ai créé une deuxieme fonction go1, de meme que ce qui avait été réaliser pour la premiere liste liée., et je l'ai inséré dans le AjaxLivre.php , vu que la liste des entrées est liée a celle du jour ( enfin je pense que c'est comme ca qu'il faut faire ) .

    voici le code de ma page principale :

    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
    <script type='text/javascript'>
     
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('jour').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajaxLivre.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('semaine');
    				semaine = sel.options[sel.selectedIndex].value;
    				xhr.send("semaine="+semaine);
    			}
     
     
    		</script>
     
        </head>
     
        <body>
    	<form action="choix_clients.php" method="post">
    	<table>
    	<tr>
    	<td>
    semaine:
    	<select name="semaine" id="semaine" onchange='go()'>
    	<?php 
            for ($i=1;$i<53;$i++)
             {       
            ?>
    	<option value="<?php echo($i);?>"><?php echo($i);?>
    	<?php
            }
            ?>
     
    	</select> 
    	</td>
    	<td>
     
    jour:
    	<div id='jour' style='display:inline' >
    				<select name="jour" id="jour" onchange='go1()'>
    					<option value='-1'>-</option>
    				</select>
    	</div>
    </td>
    <td>
    entrée:
    <div id='entree' style='display:inline'>
    				<select name="entree" id="entree">
    					<option value='-1'>-</option>
    				</select>
     
    </div>
    	</td>
    celui de ma page AjaxLivre.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
    <script type='text/javascript'>
     
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}	
    	function go1(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('entree').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","app_entree.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de l'auteur
    				sel = document.getElementById('jour');
    				jour = sel.options[sel.selectedIndex].value;
    				xhr.send("jour="+jour);
    			}
     
    		</script>
     
        </head>
     
        <body>
    	<?php
            echo "<div id='jour' style='display:inline' >";
            echo "<select name='jour' id='jour' onchange='go1()'>";
            if(isset($_POST["semaine"])){
                    mysql_connect("localhost","root","mysql");
                    mysql_select_db("syres");
                    $res = mysql_query("SELECT jour,mois,année FROM menus 
                            WHERE semaine=".$_POST["semaine"]." ");
                    echo "<option value='-1'>-</option>";
                    while($row = mysql_fetch_assoc($res)){
                    echo "<option value='".$row["jour"]."'>".$row["jour"]."/".$row["mois"]."/".$row["année"]."</option>";
                    }
                    mysql_close();
            }
            echo "</select>";
            echo"</div>";
    ?>
    et enfin celui de app_entree.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
    <?php
            echo "<select name='entree' id='entree'>";
            if(isset($_POST["jour"])){
                    mysql_connect("localhost","root","mysql");
                    mysql_select_db("syres");
                    $res = mysql_query("SELECT entrée_1,entrée_2,entrée_3,entrée_4 FROM menus 
                            WHERE semaine="$.POST["semaine".]" AND jour=".$POST["jour"]." ");
                    $row = mysql_fetch_assoc($res))
                            echo "<option value='".$row["entrée_1"]."'>".$row["entrée_1"]."</option>
                            <option value='".$row["entrée_2"]."'>".$row["entrée_2"]."</option> 
                            <option value='".$row["entrée_3"]."'>".$row["entrée_3"]."</option>
                            <option value='".$row["entrée_4"]."'>".$row["entrée_4"]."</option>";
                    mysql_close();
            }
            echo "</select>";
    ?>
    je pense qu'il n'y a pas grand chose a modifier pour que ca fonctionne, mais je galere

    merci d'avance !!

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    Les id doivent être unique.
    <div id='jour' style='display:inline' >
    <select name="jour" id="jour" onchange='go1()'>
    ......
    <div id='entree' style='display:inline'>
    <select name="entree" id="entree">
    Modifies les.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    bonjour,

    j'ai supprimé les id dans les balises <select> , qui était redondantes avec celles dans les balises <div>. malheureusement ça ne change pas mon problème.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    echo "<div id='jour' style='display:inline' >";
    echo "<select name='jour' id='jour' onchange='go1()'>";
    Vire la génération du div car il existe déjà dans le html et aussi les id dans les select généré si ce n'est pas fait.
    Montre ensuite le nouveau code.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    c'est bon, j'ai réussi, merci beaucoup, c'était exactement ça, problème d'id redondant et d'echo en trop aussi ^^ .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. menu déroulant dynamique et base de données
    Par Heilong dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/08/2008, 09h48
  2. [AJAX] Menu déroulant dynamique pour parcourir une BD
    Par relena dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 25/03/2007, 17h05
  3. [Conception] Menu déroulant dynamique et administrable
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/05/2006, 15h37

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