[PHP] [RESOLU] problème de filtre sur la date dans requête

problème de filtre sur la date dans requête [PHP] [RESOLU] - PHP - Programmation

Marsh Posté le 16-06-2006 à 16:31:42    

Bonjour à tous,
 
Dans une table de petites annonces, ma requête comporte une condition qui ne selectionne que les annonces de moins de 3 mois. A l'époque mon champ date était un varchar car je ne savais pas comment afficher en JJ-MM-AAAA et je m'en étais sorti comme ça. Là pour le coup comme je fais des comparaison de date, j'ai créé un second champ date (date2) qui lui en est format date classique AAAA-MM-JJ
 
ma requête s'affiche correctement : http://isislafurette.free.fr/annonces2.php
 
mais le résultat n'a rien à faire de mon filtre sur la date, je ne vois pas pourquoi
 
voici le code
 

Code :
  1. $aujourdhui= date('Y-m-d');
  2. print"Nous sommes le $aujourdhui<br>";
  3. sscanf($aujourdhui, "%u-%u-%u", &$annee, &$mois, &$jour);
  4. $moislimite=$mois-3; // vieux de 3 mois max
  5. if ($moislimite <= 0 and $moislimite >=-2)
  6. {
  7.  if ($moislimite == -2) // si janvier 1-3 = -2  
  8.  {
  9.   $moislimite=11;
  10.   $anneelimite=$annee-1;
  11.  }
  12.  if ($moislimite == -1) // si février 2-3 = -1
  13.  {
  14.   $moislimite=12;
  15.   $anneelimite=$annee-1;
  16.  }
  17.  if ($moislimite == 0) // si mars 3-3 = 0
  18.  {
  19.   $moislimite=1;
  20.   $anneelimite=$annee;
  21.  }
  22. }
  23. else
  24. {
  25.  $anneelimite=$annee;
  26. }
  27. print"Année limite : $anneelimite<br>";
  28. $datelimite=$anneelimite.'-'.$moislimite.'-'.$jour;
  29. print"La date limite est $datelimite<br>";
  30. print"<a name='donations'></a><div class='TitreSousSection'>Donations</div><br>\n";
  31. $sql="select * from `annonces` where type = 'donne' and date2 >= $datelimite order by id desc\n";
  32. echo "$sql<br><br>";
  33. $result=mysql_query($sql, $connexion);
  34. print"<center>";
  35. while ($ligne=mysql_fetch_object($result))
  36. {
  37.  sscanf($ligne->date2, "%u-%u-%u", &$annee_annonce, &$mois_annonce, &$jour_annonce);
  38.  $dateannonce=$jour_annonce.'-'.$mois_annonce.'-'.$annee_annonce;
  39.  print"<dl class='element'><dt>$ligne->date2 / $dateannonce</dt><dd><b>Lieu : </b>$ligne->lieu<br><b>E-m@il : </b><a href = 'mailto:".$ligne->mail."'>$ligne->mail</a><br><b>Téléphone : </b>$ligne->telephone<br><img src='images/petitfuret2.gif' alt='petitfuret2.gif'> $ligne->annonce</dd></dl>";
  40. }


 
est ce que le fait d'avoir utilisé sscanf() à la place de substr() peut y être pour quelque chose ?
 
http://hallucinogen.free.fr/bdd.png
 
 
Merci  :jap:


Message édité par DrWatson le 12-07-2006 à 11:00:33

---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Marsh Posté le 16-06-2006 à 16:31:42   

Reply

Marsh Posté le 16-06-2006 à 18:25:02    

Utilise plutôt date("%U" ), pour avoir un timestamp unix en secondes, c'est plus facile à comparer. Voir aussi time().

Reply

Marsh Posté le 18-06-2006 à 13:22:52    

à la place de sscanf ?
 
et ensuite je dois faire la même chose avec mon champs date de la bdd pour pouvoir comparer ?


Message édité par DrWatson le 18-06-2006 à 13:24:19
Reply

Marsh Posté le 18-06-2006 à 13:33:39    

C'est ceci à la place du scanf:
http://fr3.php.net/manual/fr/function.strptime.php
Pas la peine d'utiliser date(), d'ailleurs, time() suffit.

Reply

Marsh Posté le 19-06-2006 à 16:20:09    

je teste ça et je donnerais les résultats ici merci bcp :jap:


---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Marsh Posté le 07-07-2006 à 10:35:06    

je cherche à calculer le nombre de secondes dans une date donnée, y'a t il une fonction qui fait cela sans réinventer la roue ?
 
parce que time() ne donne qu'à partir de 01-01-1970, j'ai donc la date du jour en secondes ça ok, ensuite si je ne veux afficher que les 3 derniers mois, je retire 60*60*24*30*3 (et encore 30 c de l'approximatif), mais pour n'afficher que les trois derniers mois des dates des annonces de mon site, je dois bien pouvoir convertir la date de l'annonce en seconde et faire quelque chose du genre afficher si nbSec1970-nbSecAnnonce <= 60*60*24*30*3
 
[:rougit]


---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Marsh Posté le 07-07-2006 à 11:11:11    

tu lis la doc et tu fais tout en sql

Code :
  1. select * from `annonces` where type = 'donne' and date2 >=current_date - interval 3 month

Message cité 1 fois
Message édité par anapajari le 07-07-2006 à 11:12:04
Reply

Marsh Posté le 07-07-2006 à 12:07:21    

nargy a écrit :

Utilise plutôt date("%U" ), pour avoir un timestamp unix en secondes, c'est plus facile à comparer. Voir aussi time().


 
Putain, je dois bien répéter ça 3 fois par semaine au moins.  :o  

Reply

Marsh Posté le 07-07-2006 à 12:07:47    

anapajari a écrit :

tu lis la doc et tu fais tout en sql

Code :
  1. select * from `annonces` where type = 'donne' and date2 >=current_date - interval 3 month



 
C'est une autre possibilité ouai.  :jap:

Reply

Marsh Posté le 12-07-2006 à 10:55:54    

je venais donner des news justement, comme anapajari me le propose, un ami m'a parlé de cette requête là bien plus simple que les usines à gaz que j'essayais de mettre en place :D
 
ma requête est donc juste celle ci
 

Code :
  1. $sql= "SELECT DATE_FORMAT(`date2`, '%d-%m-%Y') AS date_annonce, `type`, `lieu`, `mail`, `telephone`, `annonce` FROM `annonces` WHERE `date2` >= (CURDATE() - INTERVAL 90 DAY) AND `type` = 'donne' ORDER BY `date2` DESC";


Message édité par DrWatson le 12-07-2006 à 10:57:33

---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Marsh Posté le 12-07-2006 à 10:55:54   

Reply

Marsh Posté le 12-07-2006 à 11:00:07    

au passage, le DATE_FORMAT est vraiment magique, y'a même plus besoin de se prendre la tête avec des fonctions php pour convertir les dates


---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Marsh Posté le 12-07-2006 à 11:33:05    

DrWatson a écrit :

au passage, le DATE_FORMAT est vraiment magique, y'a même plus besoin de se prendre la tête avec des fonctions php pour convertir les dates


 
Magique ou pas, tu ferais bien mieux d'utiliser les timestamps... :o
 
Imagine deux secondes que tu adaptes ton site pour qu'il soit multilingue... Ton format de date, ben, faudra le convertir en TS puis ensuite te retapper la conversion vers les nouveaux formats en fonction des langues. [:spamafote]

Reply

Marsh Posté le 12-07-2006 à 12:06:56    

pas bête, cela dit je ne le transformerais pas en multilingue, au pire je ferais deux requêtes différentes :D mais j'en prends bonne note :jap:


---------------
.:: Feed-Back  ::. Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed