Champs date + liste déroulante php

Résolu
Bonjour,

Dans ma page j'ai deux calender qui me permet dans les champs d'afficher deux date ex : entre :12/08/2010 et 08/09/2011 et une liste déroulante qui m'affiche les lignes selon mon choix(la liste fonctionne) maintenant je voudrais selon les choix des dates et le choix de la liste pouvoir afficher les lignes correspondantes ,je ne sais pas comment m'y prendre voici mon code :
<td height="35" colspan="5" align="center"  style="font-size:24px" >Statistiques de consommation   
 <tr> 
   <form id="service2" name="service2" method="POST" action="index.php?idpage=3"> 
        
     <td height="30" colspan="5" align="center"><label>Entre : </label> 
      <input type="text" id="datepicker" name="DATE_SORTIE" value="<?php echo date('d/m/Y'); ?>" /> 
      <label>Et : </label> 
      <input type="text" id="datepicker1" name="DATE_SORTIE" value="<?php echo date('d/m/Y'); ?>" /> 
      <label></label></td> 
     </form>  
    </tr>    
 <tr> 
   <td height="32" colspan="5" align="left"> 
    <form  name="service" method="post" action="index.php?idpage=3"> 
      <select  name="service"  onchange="submit">  
        <option selected> Choisissez un service</option> 
        <?php 
        $requete = "SELECT distinct service FROM servcart order by service"; 
      $req  = mysql_query($requete) or die( mysql_error() ) ;    
   
       while ($donnees=mysql_fetch_array($req)) 
          {           
         
     $service = $donnees['service']; 
    ?> 
        <!-- affichage de la liste déroulante --> 
        <option value="<?php echo $service ?>" <?php if ($service == $v_service) { echo 'Selected' ; } ?> ><?php echo $service?></option> 
        <?php 
                   } 
         ?> 
      </select>       
      <input  type="submit"  value="Rechercher" /> 
    </form> 

Quelqu'un a-t-il la réponse de la manière de s'y prendre ??? Merci

145 réponses

Résumé de la discussion

Un utilisateur cherche à afficher des lignes selon une plage de dates et un service sélectionné via une liste déroulante, en combinant deux calendriers et un champ select sur une page PHP. La solution proposée souligne qu'il faut convertir les dates entrées (jour/mois/année) en format date US (année-mois-jour) avant de les envoyer à la requête BETWEEN sur la colonne date_sortie. D'autres précisions utiles indiquent d'aligner les noms des inputs ($_POST['date_debut'] et $_POST['date_fin']) avec les variables de traitement et d'éviter les doublons lors des mises à jour. En cas de test, il est conseillé d'évaluer le passage par une page intermédiaire pour vérifier le format et la cohérence des requêtes.

Bobot (l’IA à votre service)
  1. en faite ..j'ai fait un autre topic...
    1. Contributeur
      J'attends ma caisse de champagne!
    2. ok....mais pas le champagne le + cher car je ne suis que stagiaire....lol
  2. Bonjour,J'espere que tu as passé un bon w.e..
    alors tu ne vas pas me croire mais le problème vennait de ma bdd, archives étaient décalées dans la colonne donc si l' on regarde bien l'echoc cela donnait 9 de longueur alors que archives c'est 8....le problème c'est que je ne comprends pas pourquoi cela c'est décalé...donc mon code est bon cela marche maintenant..deux semaines de perdues rien que pour ce petit problème...j'en rage quand même..merci de ton aide bissdebrazza...
    Je sais que ce n'est pas le bon topic..mais est_ce que tu saurais comment faire pour imprimer ma page en pdf et seulement ce que je désire...car je ne connais pas du tout..j'ai regardé ce w.e mais sur le net ,il y a de tout et rien...donc je te dois une caisse de champagne car c'est grace à toi que j'ai vu l'erreur avec ta copie d'écran....lol
    1. Contributeur
      oui,en effet j'ai pas encore dormi.j'étais d'astreinte cette nuit,donc...
      regarde la copie d'écran pour la requête que j'ai exécuté chez moi.
      1. cela peut arriver ..c'est bientôt le w.e alors relax...lol
        je pense d'ailleur que je vais travailler car il ne me reste plus que ce problème à régler et mon application est terminée...car la semaine prochaine elle doit_être mise en test grandeur nature
        1. Contributeur
          oui c'est vrai,j'ai fait une grosse boulette. j'ai récupéré ta table et les quatre enregistrements,j'ai testé avec phpmyadmin,j'ai bien le résultat attendu
          1. tu dois être mal réveillé car je compte bien 6 colonnes service est bien troisième position

            (222, '4517 ', ' Archives', 1, '1720', '2011-09-08'),
            (224, '4517 ', ' Archives', 10, '4096 A 2100 2200', '2011-09-14'),
            (225, '4517 ', ' Archives', 1, ' BCI 6 E 520 Cyan', '2011-09-01'),
            ensuite service dans ma table est en 3 et dans mes colonnes aussi
            (223, '4517 ', ' Archives', 10, '343 Couleur', '2011-09-07'),
            1. Contributeur
              Salut!
              j'ai bien analysé ta table et tes enregistrements,j'ai trouvé une petite incohérence:
              regarde la table:
              'id_service' int(5) NOT NULL AUTO_INCREMENT, 
              'uf' varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, 
              'service' varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, 
              'sortie_stock' int(5) DEFAULT NULL, 
              'cartouche' varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, 
              'date_sortie' date DEFAULT NULL, 
              PRIMARY KEY ('id_service') 
              ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=236 ;
              
              

              et maintenant les enregistrements:
              (222, '4517 ', ' Archives', 1, '1720', '2011-09-08'), 
              (223, '4517 ', ' Archives', 10, '343 Couleur', '2011-09-07'), 
              (224, '4517 ', ' Archives', 10, '4096 A 2100 2200', '2011-09-14'), 
              (225, '4517 ', ' Archives', 1, ' BCI 6 E 520 Cyan', '2011-09-01'),
              
              

              ta table a 6 colonnes (id_service,uf,service,sortie_stock,cartouche,date_sortie) alors que tes enregistrements ont 7 colonnes (222,4517,vide, Archives,1,1720,2011-09-08) or le service dans ta table c'est la colonne "3" et dans tes enregistrements, c'est la colonne 4. bizarre!
              Regarde bien,tu a dû oublié quelque chose.
              1. j'ai besoin de cette variable car si tu regardes bien dans mon select de la liste, je fais une boucle..donc je ne peux la déclarer que comme ça..ensuite j'ai changé le ceci : and isset($_POST['service']))
                {
                $v_service=$_POST['service']; et remis :
                WHERE service=' $v_service' and et dans mes echo, j'ai ce résultat :
                service: Archives date fin: 2011-09-08 date debut: 2011-09-01
                mais pas de lignes...
                1. Contributeur
                  bizarre ton problème.j'ai vu ta variable $service, tu la déclare lorsque tu fais un select dans ta BDD afin de l'afficher dans la liste déroulante.or au début de ton code,tu déclare $v_service comme une variable postée.il y a deja un souci là!
                  1. j'ai testé avec la variable du début de mon code
                    if (isset($_POST['SERVICE']))
                                      {$v_service=$_POST['SERVICE'];}
                                            else
                                            {$v_service="";}

                    donc dans mon
                    WHERE service='$v_service'
                    j'ai ca dans mon echo
                    service: date debut: 2011-09-01date fin: 2011-09-08
                    1. c'est l'alias pour date_format..si je l'enlève cela ne change rien au problème
                      1. Je remets le code en entier :
                        <?php	
                        		function convertionDate($dateEur){
                        		$rsl = explode ('/',$dateEur);
                        		$rsl = array_reverse($rsl);
                        		return implode($rsl,'-');
                        		}
                               //gestion de la ligne selectionnée	            	
                        		if (isset($_POST['service']))
                        			{$v_service=$_POST['service'];
                        			}
                        			else
                        			{$v_service="";}						
                        	?>	
                              <table width="580" height="209" border="3">  
                               <form  name="rechercher" method="post" action="index.php?idpage=3">       
                              <tr>
                               <td height="35" colspan="5" align="center"  style="font-size:24px" >Statistiques de consommation        </td> 
                              </tr>    
                              
                              <tr> 
                               <td height="32" colspan="5" align="left">   
                              <select  name="service" > 
                                <option> Choisissez un service</option>
                             <?php	
                        	  	 $requete = "SELECT distinct service FROM servcart order by service";
                        		 $req 	  = mysql_query($requete) or die( mysql_error() ) ; 		
                        		
                        		     while ($donnees=mysql_fetch_array($req))
                        		        {			       			     
                        			 $service = $donnees['service'];
                             ?>
                                <!-- affichage de la liste déroulante -->
                                <option value="<?php echo $service ;?>" <?php if ($service == $v_service) { echo 'Selected' ; } ?> ><?php echo $service;?></option>
                             <?php
                                        }
                             ?>
                              </select>     
                               </td> 
                              </tr>
                              
                             <code> <tr>         
                               <td height="30" colspan="5" align="center">      
                                <label>Entre : </label>   
                                <input type="text" id="datepicker" name="date_debut"  />    
                                <label>Et : </label>
                                <input type="text" id="datepicker1" name="date_fin"  />   		             
                               </td>
                              </tr>
                                 
                              <tr>
                               <th height="28" colspan="5" scope="row" align="center">
                                 <input  type="submit"  value="Rechercher" />  
                               </th>
                              </tr>
                                          
                              <tr>    
                               <th width="52" height="36" bgcolor="#5ab9d8" scope="col">UF</th>
                               <th width="159" bgcolor="#5ab9d8" scope="col">SERVICE</th>
                               <th width="191"  bgcolor="#5ab9d8" scope="col">CARTOUCHE</th>
                               <th width="77"  bgcolor="#5ab9d8" scope="col">DATE</th>
                               <th width="63"  bgcolor="#5ab9d8" scope="col">SORTIE STOCK</th>
                              </tr>
                          
                             <?php 	 
                        		 if (isset($_POST['date_debut'])and isset($_POST['date_fin'])and isset($_POST['service']))
                        	       {     	
                        			$date_debut=convertionDate($_POST['date_debut']);
                        			$date_fin=convertionDate($_POST['date_fin']);
                        			$service=$_POST['service'];
                        			
                        			echo "service: ".$service;
                                    echo "date debut: ".$date_debut;
                                    echo "date fin: ".$date_fin;
                        
                        									
                        		 $requete2 = "SELECT uf, service,cartouche,sortie_stock,DATE_FORMAT(date_sortie,'%d/%m/%Y') AS DateTemps FROM servcart WHERE date_sortie BETWEEN '$date_debut' and '$date_fin' and service='$service' order by DateTemps  ";
                        	     $req2 = mysql_query($requete2) or die( mysql_error() ) ; 
                        			
                        			while ($donnees2=mysql_fetch_assoc($req2))
                                   { 
                        	?>
                              <tr>
                        	   <td height="22"><?php echo $donnees2['uf']; ?></td>
                        	   <td><?php echo $donnees2['service']; ?></td>
                        	   <td><?php echo $donnees2['cartouche']; ?></td>
                               <td><?php echo $donnees2['DateTemps']; ?></td>
                        	   <td><?php echo $donnees2['sortie_stock']; ?></td>
                              </tr>             
                             <?php           		          
                        		    }}
                        	?> 
                            </form>          
                          </table>
                        </code>
                        1. oui.....
                          (222, '4517 ', ' Archives', 1, '1720', '2011-09-08'),
                          (223, '4517 ', ' Archives', 10, '343 Couleur', '2011-09-07'),
                          (224, '4517 ', ' Archives', 10, '4096 A 2100 2200', '2011-09-14'),
                          (225, '4517 ', ' Archives', 1, ' BCI 6 E 520 Cyan', '2011-09-01'),
                          1. Contributeur
                            ok! donc tu me confirmes que tu as bien "Archives" comme service dans les enregistrements de ta table?
                            1. Contributeur
                              si avec uf=... tu as des résultats et que avec service=... tu n'as rien,moi je comprends que dans ta BDD les services ne sont pas enregistrés avec la plage d'adresse correspondante. donne moi la structure de ta table concernée stp!
                              1. uf c'est une colonne qui représente l'unité du service et service est rattaché à cette unité..mais pour la liste je n'ai pas besoin de l'uf et en plus j'ai fait une colonne identifiant autoincrémentée..;
                                • 1
                                • 2
                                • 3
                                • 4
                                • 5
                                • 6
                                • 7
                                • 8