Aller au contenu

recherche entre deux dates


elrick

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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...

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

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.

Modifié par elrick
Lien vers le commentaire
Partager sur d’autres 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 );

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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 !

Lien vers le commentaire
Partager sur d’autres 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 ;)

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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...

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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);
?>

Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres 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>
<? } ?>

Lien vers le commentaire
Partager sur d’autres 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 ?

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres 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..

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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);
?>

Modifié par Spidetra
Lien vers le commentaire
Partager sur d’autres 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:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...