elrick Posté 31 Mai 2006 Posté 31 Mai 2006 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_commandeWHERE `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
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 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...
captain_torche Posté 31 Mai 2006 Posté 31 Mai 2006 Et sinon, il serait plus performant d'utiliser un BETWEEN : SELECT *FROM coll_printer_commande WHERE `print_date` BETWEEN '$recherchedebut' AND '$recherchefin'
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 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.
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (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é 31 Mai 2006 par cyberlaura
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 je teste ca de suite, merci bizarrement il me repond ca : SELECT * FROM coll_printer_commande WHERE `print_date`BETWEEN '' AND '' !
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 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...
Dan Posté 31 Mai 2006 Posté 31 Mai 2006 Attention aux variables entre simples quotes... elles ne seront pas inerprétées par Php Dan
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 (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é 31 Mai 2006 par elrick
captain_torche Posté 31 Mai 2006 Posté 31 Mai 2006 Tu pourrais nous mettre le code complet dans la page (dans la balise codebox), qu'on puisse se faire une idée ?
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (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é 31 Mai 2006 par cyberlaura
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 voila le code : <?php require_once('Connections/conn_coll_gest.php'); ?><?phpmysql_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
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 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 !
Dan Posté 31 Mai 2006 Posté 31 Mai 2006 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
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 holalala ! je dirai pas tous les mots qui sont en train de me passé par la tête se serai pas jolie !!! 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
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (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é 31 Mai 2006 par cyberlaura
Dan Posté 31 Mai 2006 Posté 31 Mai 2006 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.
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 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é <?php require_once('Connections/conn_coll_gest.php'); ?><?php$recherchedebut=$txt_date_debut;$recherchefin=$txt_date_fin;?><?phpmysql_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);?>
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 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 ?
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 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> <? } ?>
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (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é 31 Mai 2006 par cyberlaura
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 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..
elrick Posté 31 Mai 2006 Auteur Posté 31 Mai 2006 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
Spidetra Posté 31 Mai 2006 Posté 31 Mai 2006 (modifié) Passe en mode debug bourrin : met des var_dump() partout pour voir <?phpmysql_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é 31 Mai 2006 par Spidetra
Bourinho Posté 31 Mai 2006 Posté 31 Mai 2006 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...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant