recherche par date de modif

recherche par date de modif - PHP - Programmation

Marsh Posté le 25-04-2005 à 11:14:59    

Alors voila,
 
Je voudrais réaliser un moteur de recherche par date de dernière modification
Aprés de longues recherches sur le net, je n'ai pas trouvé d'aide sur ce type de script.
 
J'ai écris une page du style :
Recherche à partir du : "l'utilisateur choisit la date"
 
Je voudrais savoir comment faire pour récupérer la date choisit par l'utilisateur et la "comparer" avec la date de dernière modofication de tous les fichiers présent dans un répertoire voulue et retourner uniquement les fichiers correspondant.
 
Merci pour vore aide

Reply

Marsh Posté le 25-04-2005 à 11:14:59   

Reply

Marsh Posté le 25-04-2005 à 11:32:50    

Tu as une fonction qui permet de savoir la date de modification d'un fichier et derniere consultation de fichier. regarde dans les fonctions file system.

Reply

Marsh Posté le 25-04-2005 à 14:22:48    

voila le script que j'ai écris :

Code :
  1. $dossier=opendir('mondossier/');
  2. while($fichier=readdir($dossier))
  3. {
  4.     if($fichier!=='.' AND $fichier !=='..' AND filemtime($fichier)>$date_derniere_modif) //la fonction is_file n'a pas l'air de fonctionner correctement...
  5.     {
  6.           echo $fichier;
  7.     }
  8. }
  9. closedir($dossier);


 
Le problème c'est que ca ne fonctionne toujours pas et je ne comprends pas pkoi!!!
Je pense que ca vient peut etre de la date que doit rentré l'utilisateur.
Sous quelle forme faut-il entrer la date voulue pour que celle ci soit "comparé"??
 
Merci...

Reply

Marsh Posté le 25-04-2005 à 14:29:43    

baka !!
faut lui passer le chemin complet a filemtime :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-04-2005 à 14:40:38    

Je pense en fait qu'il faut que je convertisse la date au format numérique (avec la fonction mktime)...

Reply

Marsh Posté le 25-04-2005 à 14:41:06    

avec le timestamp :o


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 25-04-2005 à 15:01:38    

ca fonctionne tjs pas?
 
qqn sait comment je dois faire pour convertir la date??
 
Merci d'avance

Reply

Marsh Posté le 25-04-2005 à 15:19:19    

Code :
  1. $dossier=opendir('mondossier/');
  2. while($fichier=readdir($dossier))
  3. {
  4.     if($fichier!=='.' AND $fichier !=='..' AND filemtime($fichier)>$date_derniere_modif) //la fonction is_file n'a pas l'air de fonctionner correctement...
  5.     {
  6.           echo $fichier;
  7.     }
  8. }
  9. closedir($dossier);


 
C'est pas un peu mieux comme ça  :wahoo:  
 
if($fichier!= '.' && $fichier != '..' && filemtime($fichier)>$date_derniere_modif)  
    {
          echo $fichier;
    }

Reply

Marsh Posté le 25-04-2005 à 15:27:14    

oui merci, je l'avais deja corrigé
 
mon problème est que je rentre une date et je n'ai rien en retour
 
je voudrais savoir sous quelle format je dois rentrer la date et comment la convertir pour que mon script fonctionne??
 
merci pour votre aide...

Reply

Marsh Posté le 25-04-2005 à 15:48:21    

Personne pour m'aider??

Reply

Marsh Posté le 25-04-2005 à 15:48:21   

Reply

Marsh Posté le 25-04-2005 à 16:09:38    

Code :
  1. <?php
  2. function MyDateToUnixDate($date_derniere_modif)
  3. {
  4.  $Year = substr($date_derniere_modif, 0, 4);
  5.  $UnixStart=1970;
  6.  while($Year!=$UnixStart)
  7. {
  8.   if(date("L", strtotime("$UnixStart"."0101" ))=1)
  9.   {
  10.    $NbDays=31622400;
  11.  }
  12.   else
  13.  {
  14.   $NbDays=31536000;
  15.  }
  16.   $YearInSec = $YearInSec+$NbDays;
  17.   $UnixStart++;
  18.  }
  19.  $Month = substr($date_derniere_modif, 5, 2);
  20.  $MonthDiff = $Month-1;
  21.  $MonthInSec = $MonthDiff*86400*30.5;
  22.  $Day = substr($date_derniere_modif, -2);
  23.  $DayInSecond = $Day*86400;
  24.  $UnixTime = $YearInSec+$MonthInSec+$DayInSecond ;
  25.  return $UnixTime;
  26. }
  27. ?>
  28. <?php
  29. MyDateToUnixDate();
  30. $dossier=opendir('/wwwSiteIntranet/EDC/Documents/Documentations/');
  31. while($fichier=readdir($dossier))
  32. {
  33.     if($fichier!= '.' && $fichier != '..' && filemtime($fichier)>$UnixTime) 
  34. //la fonction is_file n'a pas l'air de fonctionner correctement...
  35.     {
  36.           echo $fichier;
  37.     }
  38. }
  39. closedir($dossier);
  40. ?>


 
C'est mon script php
 
Qqn voit d'ou vient mon erreur???
 
Aidez moi... Merci

Reply

Marsh Posté le 25-04-2005 à 20:34:03    

Je crois que tu connais pas trop la fonction date man :/
exemple :

Code :
  1. $Year = substr($date_derniere_modif, 0, 4);


par :

Code :
  1. $Year = date('Y',$date_derniere_modif);


Topic utile


Message édité par Berceker United le 25-04-2005 à 20:36:05
Reply

Marsh Posté le 26-04-2005 à 09:36:25    

Bon alors j'ai passé ma soirée à m'arracher les cheveux et j'ai besoin de votre aide (c'est pour un moteur de recherche par date de derniere modification!!)
 
Voici l'HTML :

Code :
  1. <body>
  2. <form action="1.php" method="post">
  3. <div align="center">
  4.   <table>
  5.    <tr>
  6.     Enter a date :
  7.     <input type="text" name="date_derniere_modif">
  8.     <input type="submit" value="Search !" />
  9.    </tr>
  10.   </table>
  11. </div>
  12. </form>
  13. </body>


 
Et voici le PHP :

Code :
  1. <?php
  2. $dossier=opendir('/wwwSiteIntranet/EDC/');
  3. while($fichier=readdir($dossier))
  4. {
  5.     if($fichier!='.' && $fichier !='..' && filemtime('/wwwSiteIntranet/EDC/'.$fichier)>$date_derniere_modif) //la fonction is_file n'a pas l'air de fonctionner correctement...
  6.     {
  7.           echo $fichier;
  8.    echo'<br>';
  9.     }
  10. }
  11. closedir($dossier);
  12. ?>


 
Or lorsque je clique sur Search que j'ai rempli le champ ou non j'obtiens toujours le meme affichage
Voyez-vous mon erreur?
 
De plus sous quelle forme faut-il rentrer la date dans le champ du formulaire?
 
Merci d'avance...

Reply

Marsh Posté le 26-04-2005 à 10:29:29    

up

Reply

Marsh Posté le 26-04-2005 à 12:04:49    

tu rentres la date comment dans ton formulaire ???
car filemtime renvoi un timestamp et donc, ne sera jamais égal à ce que tu rentre dans ton formulaire !
utilise date pour formater ce que te renvoi filemtime
http://fr.php.net/manual/fr/function.date.php
ou alors utilise mktime pour convertir ton formulaire en timestamp
http://fr.php.net/manual/fr/function.mktime.php

Reply

Marsh Posté le 26-04-2005 à 12:07:27    

Pour toi mon formulaire et mon script php sont bon?
 
C'est juste un probleme du format de la date qu'on rentre??

Reply

Marsh Posté le 26-04-2005 à 12:17:54    

beh, test avec :
echo "$date_derniere_modif ".filemtime('/wwwSiteIntranet/EDC/'.$fichier);
 
tu verras pas toi meme que les formats sont complètements différents. Lis le man de filemtime ! (je l'ai poster au dessus)

Reply

Marsh Posté le 26-04-2005 à 12:26:50    

OK!
Merci pour ton aide...

Reply

Marsh Posté le 26-04-2005 à 13:05:54    

C'est quoi la valeur de ton "register_global" ?
Car si c'est a off, tu dois utiliser $_POST['date_derniere_modif'] au lieu de $date_derniere_modif.
 
Je te recommande vivement de metre register_global a off si c'est n'est pas sa valeur.

Reply

Marsh Posté le 26-04-2005 à 13:32:42    

Dsl pour la question
mais ou change t on la valeur de register_global??

Reply

Marsh Posté le 26-04-2005 à 13:41:01    

php.ini

Reply

Marsh Posté le 26-04-2005 à 14:54:55    

Que pensez vous de cette fonction pour convertir une date du type "2004-05-09" en timestamp unix.  
 

Code :
  1. function MyDateToUnixDate($DateMysql){
  2. $Year = substr($DateMysql, 0, 4);
  3. $UnixStart=1970;
  4. while($Year!=$UnixStart){
  5. if(date("L", strtotime("$UnixStart"."0101" ))==1)
  6. {$NbDays=31622400;}
  7. else {$NbDays=31536000;}
  8. $YearInSec = $YearInSec+$NbDays;
  9. $UnixStart++;
  10. }
  11. $Month = substr($DateMysql, 5, 2);
  12. $MonthDiff = $Month-1;
  13. $MonthInSec = $MonthDiff*86400*30.5;
  14. $Day = substr($DateMysql, -2);
  15. $DayInSecond = $Day*86400;
  16. $UnixTime = $YearInSec+$MonthInSec+$DayInSecond ;
  17. return $UnixTime;
  18. }


Reply

Marsh Posté le 26-04-2005 à 15:33:51    

up

Reply

Marsh Posté le 26-04-2005 à 15:48:32    

utilise plutot strtotime
 

strtotime("05/14/82" );


 
mais le probleme c'est que la date doit etre au format américain : mm/dd/yy(yy)


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 26-04-2005 à 15:48:48    

Regarde ca : http://forum.hardware.fr/forum2.ph [...] 3#t1052122
 
Tu te compliques la vie :

Code :
  1. function taDateToTimestamp($date) {
  2.   $timestamp = -1;
  3.   list($annee, $mois, $jour) = sscanf($date, "%d-%d-%d" ); // exemple : 2004-12-23
  4.   // un petit test pour verifier que la date est bonne
  5.   if (checkdate($mois,$jour,$annee)) {
  6.     // la date est bonne
  7.     // creation de la date avec mktime
  8.     $timestamp = mktime(0,0,0,$mois, $jour, $annee);
  9.   } else {
  10.     $timestamp=-1;
  11.   }
  12.   return $timestamp;
  13. }


Message édité par cerel le 26-04-2005 à 16:41:12
Reply

Marsh Posté le 26-04-2005 à 16:31:48    

Excusez moi d'insister
Mais mon code PHP doit correspondre a ca non??

Code :
  1. <?php
  2. function taDateToTimestamp($date_derniere_modif) {
  3.   $timestamp = -1;
  4.   list($annee, $mois, $jour) = sscanf($date_derniere_modif, "%d-%d-%d" ); // exemple : 2004-12-23  
  5.   // un petit test pour verifier que la date est bonne  
  6.   if (checkdate($mois,$jour,$annee)) {
  7.     // la date est bonne  
  8.     // creation de la date avec mktime  
  9.     $timestamp = mktime(0,0,0,$mois, $jour, $annee);
  10.   } else {
  11.     timestamp=-1;
  12.   }
  13.   return timestamp;
  14. }
  15. $dossier=opendir('/wwwSiteIntranet/EDC/');
  16. while($fichier=readdir($dossier))
  17. {
  18. if($fichier!='.' && $fichier !='..' && filemtime('/wwwSiteIntranet/EDC/'.$fichier)>$timestamp)
  19.     {
  20.  if (file_exists($fichier))
  21.  {
  22.       echo "$fichier  a été modifié le : " . date ("F d Y H:i:s.", filemtime($fichier));
  23.   echo '<br>';
  24.  }
  25.     }
  26. }
  27. closedir($dossier);
  28. ?>


 
Dans le formulaire j'écris par ex 2005-04-22
 
Et j'obtiens une page blanche!!
 
Je ne vois pas ou j'ai commis une erreur!
 
Et vous??
 
Merci

Reply

Marsh Posté le 26-04-2005 à 16:35:46    

Ta essayé un echo de la date transformée?
Ta vérifié que y'avais des fichiers avec comme date de modification la date entrée?

Reply

Marsh Posté le 26-04-2005 à 16:39:44    

Comment fais-tu appel a "taDateToTimestamp" ?
 
D'ou viens ta variable "$timestamp" ?
 
Tu devrais inverser le "if (file_exists($fichier))" et le "filemtime('/wwwSiteIntranet/EDC/'.$fichier)>$timestamp)".
Faut d'abord verifier que le fichier exsite, avant de vouloir savoir quand il a ete modifie pour la derniere fois.
 
Il y avait des pieges dans le code que je t'ai donne (vi c'etait des pieges et non des erreurs :p).
J'ai edite mon msg.


Message édité par cerel le 26-04-2005 à 16:40:58
Reply

Marsh Posté le 26-04-2005 à 16:44:18    

J'ai fait ca mais ca marche tjs pas!!  :cry:  

Code :
  1. <?php
  2. function taDateToTimestamp($date_derniere_modif) {
  3.   $timestamp = -1;
  4.   list($annee, $mois, $jour) = sscanf($date_derniere_modif, "%d-%d-%d" ); // exemple : 2004-12-23  
  5.   // un petit test pour verifier que la date est bonne  
  6.   if (checkdate($mois,$jour,$annee)) {
  7.     // la date est bonne  
  8.     // creation de la date avec mktime  
  9.     $timestamp = mktime(0,0,0,$mois, $jour, $annee);
  10.   } else {
  11.     timestamp=-1;
  12.   }
  13.   return timestamp;
  14. }
  15. taDateToTimestamp();
  16. $dossier=opendir('/wwwSiteIntranet/EDC/');
  17. while($fichier=readdir($dossier))
  18. {
  19. if (file_exists($fichier))
  20.     {
  21.  if($fichier!='.' && $fichier !='..' && filemtime('/wwwSiteIntranet/EDC/'.$fichier)>$date_derniere_modif)
  22.  {
  23.       echo "$fichier  a été modifié le : " . date ("F d Y H:i:s.", filemtime($fichier));
  24.   echo '<br>';
  25.  }
  26.     }
  27. }
  28. closedir($dossier);
  29. ?>

Reply

Marsh Posté le 26-04-2005 à 16:49:09    

Juste une question, ca sert à quoi la ligne 17 sans paramètre?
C'est pas une question con, c'est juste pour savoir.

Reply

Marsh Posté le 26-04-2005 à 17:30:14    

Oui parce que là il se balade tous seul là :/

Reply

Marsh Posté le 26-04-2005 à 17:35:08    

Je pense que déjà faut qu'il s'occupe de ca, parce que du coup $date_derniere_modif vaut rien du tout

Reply

Marsh Posté le 26-04-2005 à 17:41:42    

Code :
  1. <?php
  2. function taDateToTimestamp($date) { 
  3.   $timestamp = -1; 
  4.   list($annee, $mois, $jour) = sscanf($date, "%d-%d-%d" ); // exemple : 2004-12-23   
  5.   // un petit test pour verifier que la date est bonne   
  6.   if (checkdate($mois,$jour,$annee)) { 
  7.     // la date est bonne   
  8.     // creation de la date avec mktime   
  9.     $timestamp = mktime(0,0,0,$mois, $jour, $annee); 
  10.     } else
  11.       $timestamp=-1; 
  12.     } 
  13.   return $timestamp; 
  14. }
  15. //$date_derniere_modif = $_GET['date_derniere_modif'];  
  16. //$fichier = $_GET['fichier'];  
  17. $timestamp = taDateToTimestamp($date_derniere_modif);
  18. $dossier=opendir('/wwwSiteIntranet/EDC/');
  19. while($fichier=readdir($dossier))
  20. {
  21.     if (file_exists($fichier)) 
  22.     {
  23.       if($fichier!='.' && $fichier !='..' && filemtime('/wwwSiteIntranet/EDC/'.$fichier)>$date_derniere_modif)
  24.         {
  25.            echo "$fichier  a été modifié le : " . date ("F d Y H:i:s.", filemtime($fichier));
  26.            echo '<br>';
  27.         }
  28.      }
  29. }
  30. closedir($dossier);
  31. ?>


Je tape la date sous la forme 2005-04-24 et il me ressort tous les fichiers!!
C'est bien sous cette forme qu'il faut l'entrer non?

Reply

Marsh Posté le 26-04-2005 à 17:44:37    

non, c'est sous la forme 04/26/2005, enfin je croie mais je suis pas sur de moi.

Reply

Marsh Posté le 26-04-2005 à 17:49:20    

Il me retourne tous les fichiers a chaque fois!!
Personne ne sait??

Reply

Marsh Posté le 26-04-2005 à 17:51:05    

faudrait peut etre voir comment fonctionne une fonction !
tu récuperes une valeur que tu n'utilises meme pas...
et pour info, la format est indiqué dans le code lui meme.


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 26-04-2005 à 17:51:24    

mais tu fais le echo filetime($fichier), il t'ecrit quoi ?

Reply

Marsh Posté le 26-04-2005 à 17:52:29    

oui c'est vrai, tu as raison KangOl, faudrait peut être qu'il soit un peu plus attentif à ce qu'il fait.

Reply

Marsh Posté le 26-04-2005 à 18:01:43    

Ba c'est ce que je disais il faut taper la date sous la forme 2005-04-24 !!!

Reply

Marsh Posté le 26-04-2005 à 18:03:53    

Ta lu ce qui est ecris?
Tu stocke le resultat de ta fonction dans une variable que tu utilises pas, y'a pas comme un problème?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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