Aller au contenu

recherche entre deux dates


Sujets conseillés

Posté

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

Posté

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...

Posté

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.

Posté (modifié)

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
Posté

je teste ca de suite,

merci

bizarrement il me repond ca :

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

!

Posté

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...

Posté

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

Dan

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
Posté (modifié)
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
Posté

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

Posté

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 !

Posté
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 ;)

Posté

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

Posté (modifié)

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
Posté

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.

Posté

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);
?>

Posté

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 ?

Posté

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>
<? } ?>

Posté (modifié)

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
Posté

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..

Posté

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

Posté (modifié)

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
Posté

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:

Veuillez vous connecter pour commenter

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



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