Jump to content
Sign in to follow this  
elrick

recherche entre deux dates

Rate this topic

Recommended Posts

Bonjour,

je suis en train de faire un intranet pour ma societe et je suis dans les consommable d'imprimantes.

Bref je vais pas vous cassez les pieds mon probleme est le suivant :

j'ai un table de commande de consommable qui reprend les caracteristiques principales de l'imprimantes la references des consommables, la quantité commandées, leur prix et surtout la date de la commande.

Mon patron me demande de lui sortir un récapitulatif des consommable acheté par mois j'ai donc fait une page ou je peux choisir la période sur laquelle je veux mon affichage par exemple le mois de mai du 01/05/2006 au 31/05/2006 sur mon champ print_date dans ma table. seulement voila ca marche pas du tout.

Voici ma requête :

SELECT *
FROM coll_printer_commande
WHERE `print_date`>= '$recherchedebut' AND `print_date`<='$recherchefin'

et dans mon form j'ai deux champs textes nommé : txt_date_debut et txt_date_fin. Le form envoie ma page à elle même afin de passé mes variable $txt_date_debut et $txt_date_fin que je recupére dans mes variables $recherchedebut et $recherchefin et que l'on retrouve donc dans ma requête. J'ai essayè de mettre des # mais ca marche pas mieux.

Merci par avance.

Elrick

Share this post


Link to post
Share on other sites

Bonjour,

à mon avis, le première chose à faire est de controler que les dates sont bien envoyées au format de la base de données : AAAA-MM-JJ en mysql par exemple.

Pour en être sûr, il suffit d'afficher la requète, et éventuellement de la tester directement dans la base...

Share this post


Link to post
Share on other sites

Et sinon, il serait plus performant d'utiliser un BETWEEN :

SELECT *
FROM coll_printer_commande WHERE `print_date` BETWEEN '$recherchedebut' AND '$recherchefin'

Share this post


Link to post
Share on other sites

Bonjour cyberlaura,

oui j'ai vérifié ca dès que ca marchait pas, en fait ca fait 3 jours que je passe dessus. J'ai bien vérifié que dans ma table j'avais mis date et pas texte sur le champ par ce que pour se genre de boulette je suis le pro !

donc la en fait je n'ai plus de solution d'ou mon appel au secours.

Elrick

Bonjour capitaine torche,

merci de ton aide, j'ai modifié ma requête mais je n'ai toujours aucun résultat. mais effectivement between est plus approprié, merci.

Biensûre je suis certains d'avoir des données dans ma table sur la période que je recherche.

Share this post


Link to post
Share on other sites

Elrick, je suppose que tu mets ta requète dans une chaine avant de l'envoyer à ta base, du genre :

$marequetesql="SELECT * FROM coll_printer_commande WHERE `print_date` BETWEEN '$recherchedebut' AND '$recherchefin' ";

Ce que je suggère, c'est que tu fasses un affichage de ce code

print($marequetesql);

et que tu nous la fasse parvenir. Juste histoire de vérifier qu'il n'y a pas de problème à la construction de la requète...

Edited by cyberlaura

Share this post


Link to post
Share on other sites

je teste ca de suite,

merci

bizarrement il me repond ca :

SELECT * FROM coll_printer_commande WHERE `print_date`BETWEEN '' AND ''

!

Share this post


Link to post
Share on other sites

Vraisembablement, il y a un problème à l'initialisation de ces variables, attention peut-être aux majuscules/minuscules que ce soit pour les variables du formulaire ou celles de la requète.... A vérifier...

Share this post


Link to post
Share on other sites

Attention aux variables entre simples quotes... elles ne seront pas inerprétées par Php ;)

Dan

Share this post


Link to post
Share on other sites

j'ai édité mon message j'ai écrit comme un cochon!)

il faut les mettre entre rien ?

c'est à dire :

SELECT *
FROM coll_printer_commande WHERE `print_date` BETWEEN $recherchedebut AND $recherchefin

car comme ca il me trouve une erreur.

Edited by elrick

Share this post


Link to post
Share on other sites

Tu pourrais nous mettre le code complet dans la page (dans la balise codebox), qu'on puisse se faire une idée ?

Share this post


Link to post
Share on other sites
Attention aux variables entre simples quotes... elles ne seront pas inerprétées par Php ;)

Dan

En fait, tout dépend où sont les simples quotes, voici 2 exemples

1er exemple, les variables sont interprétées :

 $sql=" select * from table where zone='$mavariable'";

2eme, les variables ne sont pas interprétées :

 $sql=' select * from table where zone=\'$mavariable\'';

Pour Elrick, le mieux serait de contrôler la valeur de tes variables à chaque étape, par un

 print($recherchedebut );

Edited by cyberlaura

Share this post


Link to post
Share on other sites

voila le code :

<?php require_once('Connections/conn_coll_gest.php'); ?>
<?php
mysql_select_db($database_conn_coll_gest, $conn_coll_gest);
$query_Recordset_affiche_commande_periode = "SELECT * FROM coll_printer_commande WHERE `print_date` BETWEEN '$recherchedebut' AND '$recherchefin' ";
$Recordset_affiche_commande_periode = mysql_query($query_Recordset_affiche_commande_periode, $conn_coll_gest) or die(mysql_error());
$row_Recordset_affiche_commande_periode = mysql_fetch_assoc($Recordset_affiche_commande_periode);
$totalRows_Recordset_affiche_commande_periode = mysql_num_rows($Recordset_affiche_commande_periode);
?>
<?
$recherchedebut=$txt_date_debut;
$recherchefin=$txt_date_fin;
?>

merci

Share this post


Link to post
Share on other sites

heu ! Il y a une première chose que l'on peut voir, c'est que les variables recherchedebut et recherchefin sont initialisées après leur utilisation ! Sic !

Share this post


Link to post
Share on other sites
heu ! Il y a une première chose que l'on peut voir, c'est que les variables recherchedebut et recherchefin sont initialisées après leur utilisation ! Sic !

Clair... au moment de l'exécution du code elles n'ont pas de valeur définie :)

PS: je connais le mécanisme des simples quotes, mais je pense que c'est une mauvaise pratique de coder de cette manière parce qu'on peut l'oublier facilement.

Mais chacun fait comme il l'entend ;)

Share this post


Link to post
Share on other sites

holalala !

je dirai pas tous les mots qui sont en train de me passé par la tête se serai pas jolie !!! :thumbsdown:

J'ai corrigé et le résultat est :

mes variables sont bien initialisés

je fait des prints et elles contiennent bien les valeurs que je leur passent seulement au niveau de l'affichages j'ai toujours rien

Share this post


Link to post
Share on other sites

L'essentiel, c'est d'avancer. Et au niveau de la requète elle-même, en l'affichant, est-ce qu'elle est correcte, et que contient-elle exactement ?

PS: je connais le mécanisme des simples quotes, mais je pense que c'est une mauvaise pratique de coder de cette manière parce qu'on peut l'oublier facilement.

Mais chacun fait comme il l'entend ;)

je ne sous-entendais pas ta non connaissance sur ce sujet, désolée si je me suis mal exprimée, je voulais juste préciser que ça pouvait fonctionner et je trouve ça tellement pratique et rapide...

Edited by cyberlaura

Share this post


Link to post
Share on other sites

Si ton code

<?
$recherchedebut=$txt_date_debut;
$recherchefin=$txt_date_fin;
?>

se trouve après le reste du code comme dans ta source, tes variables sont initialisées TROP TARD !

Donnes-nous la source corrigée.

Share this post


Link to post
Share on other sites

oui aparement elle est correct et elle contient bien ce que je passe comme paramètre :

SELECT * FROM coll_printer_commande WHERE print_date BETWEEN '2006-05-01' AND '2006-05-31'

Merci de prendre le temps de m'aidé.

voila le code corrigé :whistling:

<?php require_once('Connections/conn_coll_gest.php'); ?>
<?php
$recherchedebut=$txt_date_debut;
$recherchefin=$txt_date_fin;
?>

<?php
mysql_select_db($database_conn_coll_gest, $conn_coll_gest);
$query_Recordset = "SELECT * FROM coll_printer_commande WHERE print_date BETWEEN '$recherchedebut' AND '$recherchefin'";
$Recordset = mysql_query($query_Recordset, $conn_coll_gest) or die(mysql_error());
$row_Recordset = mysql_fetch_assoc($Recordset);
$totalRows_Recordset = mysql_num_rows($Recordset);
?>

Share this post


Link to post
Share on other sites

Clair que la requète est bonne, l'a tu essayée sous phpmyadmin ? Y a t'il réellement des lignes correspondant à ces dates ?

Et que fais-tu comme affichage du résultat ?

Share this post


Link to post
Share on other sites

oui dans php myadmin ma requete fonctionne en mettant biensure les dates que je recherche ( le mois de mai donc) et pas mes variables.

Et ma table contient en fait 5 enregistrement répartis sur 2 date du mois de mai le 05 et le 30.

niveau affichage c'est dans un tableau ou je fais une boucle viola le code :

<?php do { ?>
<tr align="center" bordercolor="#666666" class="tahomaNoir11" onMouseOver="this.className='tabBlanc'" onMouseOut="this.className='lienNoir11'">
<td width="7%" bgcolor="#E1E1E1"><a href="supp_printer_commande.php?VID=<?php echo $row_Recordset_printer_encre['id']; ?>&Vdate=<?php echo $row_Recordset_printer_encre['date']; ?>"><img src="Images/i.p.trash.gif" width="13" height="12" border="0"></a></td>
<td width="18%" bgcolor="#E1E1E1"><?php echo $row_Recordset['print_mark']; ?> - <?php echo $row_Recordset['print_modele']; ?></td>
<td width="11%" bgcolor="#E1E1E1"><?php echo $row_Recordset['print_type']; ?></td>
<td width="16%" bgcolor="#E1E1E1"> <?php echo $row_Recordset['nbr_noir']; ?> * <?php echo $row_Recordset['noir']; ?></td>
<td width="13%" bgcolor="#E1E1E1"> <?php echo $row_Recordset['nbr_cyan']; ?> * <?php echo $row_Recordset['cyan']; ?></td>
<td width="18%" bgcolor="#E1E1E1"> <?php echo $row_Recordset['nbr_magenta']; ?> * <?php echo $row_Recordset['magenta']; ?></td>
<td width="17%" bgcolor="#E1E1E1"> <?php echo $row_Recordset['nbr_jaune']; ?> * <?php echo $row_Recordset['jaune']; ?></td>
</tr>
<?php } while ($row_Recordset = mysql_fetch_assoc($Recordset)); ?>
</table>
<? } ?>

Share this post


Link to post
Share on other sites

Je suppose que ce dernier code est juste après le précédent que tu nous a montré ?

2 choses me gènent :

- tu as un mysql_fetch_assoc avant ta boucle ( code montré précédemment ), tu risques de sauter une ligne.

- tu fais référence à row_Recordset_printer_encre, que tu as peut-être initialisé ailleurs.

Sinon, ça devrait fonctionner, que donne $totalRows_Recordset comme résultat ?

Edited by cyberlaura

Share this post


Link to post
Share on other sites

Je n'ai rien dit concernant mysql_fetch_assoc avant ta boucle, et que tu risquais de sauter une ligne. Vu que tu fais un do ....while. Ceci dit, il vaudrait mieux faire un

while (xxxx=mysql_fetch_assoc) { ... }

, cela éviterais d'entrer dans la boucle quand il n'y a rien à afficher..

Share this post


Link to post
Share on other sites

Merci cyberlaura, dan et les autres de votre aide,

j'ai dû partir du travail pour aller chercher ma femme assez rapidement ce soir problème de voiture...

J'ai fait un test en ne cherchant que sur une date bien précise et sa fonctionne ! c'est vraiment sur la periode que ca passe pas.

Elrick

Share this post


Link to post
Share on other sites

Passe en mode debug bourrin : met des var_dump() partout pour voir

<?php
mysql_select_db($database_conn_coll_gest, $conn_coll_gest);
$query_Recordset = "SELECT * FROM coll_printer_commande WHERE print_date BETWEEN '$recherchedebut' AND '$recherchefin'";
var_dump($query_Recordset);
$Recordset = mysql_query($query_Recordset, $conn_coll_gest) or die(mysql_error());
var_dump($Recordset);
$row_Recordset = mysql_fetch_assoc($Recordset);
var_dump($row_Recordset);
$totalRows_Recordset = mysql_num_rows($Recordset);
var_dump($totalRows_Recordset);
?>

Edited by Spidetra

Share this post


Link to post
Share on other sites

Visiblement, sans être Sherlock Holmes, on a l'impression que c'est le "BETWEEN" qui pose soucis... Et si tu mettais des parenthèses???

SELECT * FROM coll_printer_commande WHERE (print_date BETWEEN '2006-05-01' AND '2006-05-31')

C'est peut-être pas la solution mais visiblement, y a de ça car sur ce topic y a un exemple (qui fonctionne apparemment...) qui ressemble curieusement au tien...à part que l'utilisateur utilise des parenthèses... a priori, la requête doit capter ce qui suit

SELECT * FROM coll_printer_commande WHERE (print_date BETWEEN '2006-05-01') AND '2006-05-31'

C'est juste une indication...Je sais pas si cela fonctionne... :blush:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...