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. Je vais tenter de t'aider, par ailleurs je crois avoir compris mais je souhaite que tu réexplique ce que tu souhaite faire !

    Mici
    1. Contributeur
      Salut!
      pour ta requete,tu dois utiliser between pour sélectionner la date entre les intervalles choisies.
      exemple:
      SELECT *
      FROM ta_table
      WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999' and liste-choix='ton_choix'
      

      Voila un peu à quoi va ressembler ton code.
      1. Bonjour à vous
        Je sais que je dois faire une requête avec beetween...mais c'est deux datepicker(calender) et c'est une seule colonne qui a les dates,je m'explique c'est pour des statistiques, une colonne contient toutes les dates de sorties de cartouches et je n'ai qu'une variable pour faire les deux dates qui est
        $date_sortie=$_POST['date_sortie']
        ,j'ai essayé ceci WHERE date_sortie BETWEEN '$date_sortie'AND '$date_sortie',mais il cela ne fonctionne pas
        1. et pour l'explication,je voudrais savoir les statistiques de consommation en choisisant une période de date...
          1. J'ai fait ceci :
            <form id="service2" name="service2" method="POST" action="index.phpidpage=3">
                 <td height="30" colspan="5" align="center"><label>Entre : </label>
                 
            <?php
                   $requete3 = "SELECT DATE_FORMAT(date_sortie,'%d/%m/%Y') AS DateTemps FROM servcart WHERE date_sortie BETWEEN '$date_sortie' AND '$date_sortie' and service='v_service'";
                    $req3 = mysql_query($requete3) or die( mysql_error() ) ; 		
                 ?>
                  
            <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> 
            1. Contributeur
              Si je comprend bien, tu n'as qu'un seul champ date? je pense que s'il faut vérifier la date suivant une période,alors il te faut un deuxième champ.
              1. bonjour bissdebrazza,
                J'ai deux champs qui se présente ainsi :
                Entre : champs "datepicker" Et : champs "datepicker" et une liste déroulante qui contient tous les services.
                1. si tu regarde mon code au début de mon post ils sont bien présent..merci de prendre un peu de temps pour me répondre..
                  1. Contributeur
                    ok je vois.alors si je comprend bien tes deux datepicker ont le même nom. essai de faire datepicker pour ton champ datesortie et datepicker et tu met datesortie1 pour differencier les deux champs. car quand tu fais $date_sortie' pour le champ 1 et $date_sortie' pour le champ 2.Normal que ça passe pas.il faut differencier tes variables.
                    1. j'ai fait ceci j'ai déclaré une variable supplèmentaire

                      if (isset($_POST['date_sortie']))
                      		{$date_sortie1=$_POST['date_sortie'];
                      		}
                      		else
                      		{$date_sortie1="";} et l'autre initiale
                      if (isset($_POST['date_sortie']))
                      		{$date_sortie=$_POST['date_sortie'];
                      		}
                      		else
                      		{$date_sortie="";}

                      ensuite j'ai fait ceci dans mon code

                      <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_SORTIE1" value="<?php echo date('d/m/Y'); ?>" />
                            <label></label>
                            <?php
                             $requete3 = "SELECT DATE_FORMAT(date_sortie,'%d/%m/%Y') AS DateTemps FROM servcart WHERE date_sortie BETWEEN '$date_sortie' AND '$date_sortie1' and service='v_service'";
                              $req3 = mysql_query($requete3) or die( mysql_error() ) ; 		
                           ?>      
                            </td>
                           </form> 
                      
                        <?php 
                      	if ( isset($_POST['service'])
                      	and isset($_POST['DATE_SORTIE'])
                      	){  $service = $_POST['service'];
                              $date_sortie= $_POST['DATE_SORTIE'];
                      		
                      		$requete2 = "SELECT uf,service,cartouche,sortie_stock,DATE_FORMAT(date_sortie,'%d/%m/%Y') AS DateTemps FROM servcart WHERE service='$service' order by date_sortie";							   
                      	    $req2 = mysql_query($requete2) or die( mysql_error() ) ; 
                      		
                      			while ($donnees2=mysql_fetch_array($req2))
                      			{ 	   
                      	 ?>
                      		<tr>
                      		 <td><?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           		          
                      		}
                      		}		 
                      ?>

                      mais rien ne se passe où est mon erreur
                      1. Contributeur
                        essai ça
                        
                        if (isset($_POST['date_sortie1']))
                        		{$date_sortie1=$_POST['date_sortie1'];
                        		}
                        		else
                        		{$date_sortie1="";} et l'autre initiale
                        if (isset($_POST['date_sortie']))
                        		{$date_sortie=$_POST['date_sortie'];
                        		}
                        		else
                        		{$date_sortie="";}
                        
                        
                        1. je l'ai fait,rien ..question : mais étant sur la même colonne il ne peut rechercher date_sortie1 car dans ma bd cela n'existe pas non ????
                          1. Contributeur
                            même si tu es sur la même colone,ça recherche.essai de taper ta requête dans phpmyadmin.regarde cet exemple,il n'y a qu'une seule colonne date,mais on fait une recherche sur une période de cette colonne.
                            1. J'ai testé la requete il ne me retourne aucune ligne et si je fait la requete sans le service juste le between il me retourne colonne date_sortie mais toutes les lignes à 00/00/0000
                              1. Contributeur
                                attention,il faut voir le format de ta date dans la base de données.généralement mysql enregistre la date au format anglais '0000/00/00' et si toi tu tape ta date au format français,ça ne marchera pas.regarde bien le format de ta date
                                1. excuses- moi,j'ai mis le mauvais format dans marequete test,j'ai zappé que le format était en US donc la requete juste avec les dates cela me renvoye bien les lignes correspondantes et si je rajoute le service il m'affiche juste la date la plus ancienne et une seule ligne
                                  1. Contributeur
                                    je ne comprend pas quand tu dis la date la plus ancienne.donc si tu tape la date actuelle (par exemple 08/09/2011 et 09/09/2011) ça ne t'affiche rien?et si ça te renvoi une seule ligne,alors vérifie bien que ça doit que te renvoyer cette ligne
                                    1. je viens de tester ma page maintenant il me renvoye des lignes mais pas toutes,si je fais 01/09/2011 et 09/09/2011 il me recupère 4 lignes et normalement il y en a 5 ,la date 05/09/2011 n'est pas présente

                                      4517 Archives BCI 6 E 520 Cyan 08/09/2011 1
                                      4517 Archives 1720 08/09/2011 1
                                      4517 Archives 343 Couleur 09/09/2011 10
                                      4517 Archives 4096 A 2100 2200 09/09/2011 10
                                      1. Contributeur
                                        vraiment bizarre.si la date du 05/09/2001 ne s'affiche pas,peut être que cette ligne ne respecte pas une condition dans la requête.au fait,envoi moi le code où tu as le formulaire avec tes deux datepicker.
                                        1. voilà le code :

                                          <tr>
                                             <form id="service2" name="service2" method="POST" action="index.php?idpage=3">
                                               <td height="26" 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_SORTIE1" value="<?php echo date('d/m/Y'); ?>" />
                                                <label></label>
                                                
                                          	  <?php
                                                 $requete3 = "SELECT date_sortie FROM servcart WHERE date_sortie BETWEEN '$date_sortie' AND '$date_sortie1' and service='v_service'";
                                                  $req3 = mysql_query($requete3) or die( mysql_error() ) ; 		
                                               ?>      
                                                
                                                </td>
                                               </form> 
                                              </tr>   
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 6
                                          • 7
                                          • 8