[PHP/MySQL] - Remise à zero par rapport à une date

- Remise à zero par rapport à une date [PHP/MySQL] - PHP - Programmation

Marsh Posté le 19-06-2004 à 11:06:05    

Bonjours tout le monde.
 
Actuellement, je suis en train de développer un topsite.
Le problème qui me gène est que je sais pas comment faire pour remettre à zéro les entrées/sorties de tout les site par rapport au premier du mois.
 
J'avais pensé à faire un truc du genre:
$date1 = 01000000;
$date2 = date('dHis');
if($date1 == $date2)
  {
  // remise à zéro
  }
 
 
Mais le problème est que cela fonctionnera seulement quand un utilisateur arrivera a ce moment la.
 
Ce qu'il fodrai c'est une remise à zéro qui se fasse côté serveur.
 
Si vous avez une idée, je suis interresé.
 
Merci d'avance.


Message édité par AlphaZone le 19-06-2004 à 13:07:54
Reply

Marsh Posté le 19-06-2004 à 11:06:05   

Reply

Marsh Posté le 19-06-2004 à 11:13:01    

tu crées un script remise à zéro et tu l'appelle une fois par mois avec www.webcron.org

Reply

Marsh Posté le 19-06-2004 à 11:24:03    

MERCI T509 ;)

Reply

Marsh Posté le 19-06-2004 à 11:37:22    

Autre solution :
tu enregistres le timestamp de la prochaine remise à zéro.
A chaque visiteur, tu vérifie le timestamp en cours
Si timestamp en cours >= timestamp plannif -> remise à zéro avec enregistrement du prochain timestamp de remise à zéro

Reply

Marsh Posté le 19-06-2004 à 12:34:14    

Je préfer celle-ci meme si cela reste un peu compliqué a maitrisé

Reply

Marsh Posté le 19-06-2004 à 13:08:49    

J'aurais voulu avoir votre avis sur le script php qui va permettre la remise à zéro du topsite tout les mois.
 
Merci de me dire si j'ai fais des erreurs.
 

Code :
  1. ///////////////////////////////////////////
  2. // REMISE A ZERO DU TOPSITE
  3. ///////////////////////////////////////////
  4. $Req = "SELECT * FROM reset_topsite";
  5. $sql = Requete($Req);
  6. $data = mysql_fetch_row($sql);
  7. if($data[1] >= time())
  8.     {
  9.     $mois = date('m');
  10.     $annee = date('Y');
  11.     if($mois == 12)
  12.         {
  13.         $mois = 1;
  14.         $annee = $annee + 1;
  15.         }
  16.     $futur_date = mktime(0,0,0,$mois, 1, $annee);
  17.     $req = "UPDATE reset_topsite SET(date='$futur_date')";
  18.     $sql = Requete($req);
  19.     }
  20. /////////////////////////////////////////

Reply

Marsh Posté le 19-06-2004 à 13:38:48    

Cela me semble pas mal. C'est exactement à cela que je pensais.
Il reste plus qu'à lancer la remise à zéro

Reply

Marsh Posté le 19-06-2004 à 13:47:30    

Ceci dit, j'ai testé webcron.org et cela merche très bien. Le déclenchement a bien lieu au moment prévu et avec des logs d'exécution. Cela me semble fiable.
Enfin c'est surtout utile quand il faut automatiser des taches qui  
- peuvent être longues,  
- non dépendantes des visiteurs,  
- accèdent à des ressources qu'il ne faut pas surcharger
- activer un "moteur" pour le site

Reply

Marsh Posté le 19-06-2004 à 16:12:48    

et comment faire pour que tout les jours a telle heure une base de donnée sois repise a zero (enfin, reprenne une cetaine valeur quoi...)
 
moi jai un truc comme ca mais c'est inserer dans le code de mes page et donc ca s'execute que si un utilisateur se connecte...
 
(donc c censé mettre a jour a minuit, enfin si l'utilisateur se reconnecte apres minuit, un truc sera mis a jour.)
 
 
 
 
 
 // mise à jour d'une certaine partie de la bdd
 $derniereco=gmdate('Y-m-d'); //enregistre la date au moment de la connection dans $derniereco
 $trucAMettreAjour=24;
   
 
   
 $diff = date_diff($_SESSION['derniereco'], $derniereco);//appel de la fonction pour calculer la difference entre dates...
     
 if($diff > 0){
  $mysql=dbconnex();
  $_SESSION['truc']=$trucAMettreAjour;  
  $requete1 = "UPDATE utilisateur SET trucAMettreAjour='$_SESSION[truc]', derniereco='$derniereco' WHERE utilisateur = '$_SESSION[login]'";
  mysql_db_query(BASENAME, $requete1);  
  mysql_close ($mysql);
 }
 
 
 
 
avec
 
/********************************************/
/*  DIFFERENCE ENTRE DEUX DATES  */
/********************************************/
 
function date_diff($date1, $date2){    
 $d1 = explode("-", $date1);
 $d2 = explode("-", $date2);    
 
 $date1 = mktime(0,0,0, date($d1[1]), date($d1[2]), date($d1[0]));
 $date2 = mktime(0,0,0, date($d2[1]), date($d2[2]), date($d2[0]));
   
 $tmp = $date1;
 $y = $d1[0];
 $m = $d1[1];
 $d = $d1[2];
 $days = 0;
 while($tmp != $date2){  
  $d++;
  $tmp = mktime(0,0,0, date($m), date($d), date($y));
  $days++;
 }  
 return $days;
 
 
 
 
hmmm, c une conception pas terrible, et jaimerai bien savoir comment faire l'equivalent mais qui marche bien
 
}


Message édité par N@rcoleptik le 19-06-2004 à 18:20:41
Reply

Marsh Posté le 19-06-2004 à 18:42:46    

Tu reprend mon script plus haut et tu modifie le mktime()
 
 
Voici le code approximativement sans trop d'erreur.
 

Code :
  1. ///////////////////////////////////////////  
  2. // REMISE A ZERO DU TOPSITE  
  3. ///////////////////////////////////////////  
  4. $Req = "SELECT * FROM reset_topsite";
  5. $sql = Requete($Req);
  6. $data = mysql_fetch_row($sql);
  7. if($data[1] >= time())
  8.     {
  9.       $jour = date('d');
  10.       $mois = date('m');
  11.       $annee = date('Y');
  12.       switch($mois)
  13.         {
  14.         case 1:{ if($jour == 31){ $jour = 1; $mois = $mois +1; }}; break;
  15.         // On test si l'année est bisextile ou pas
  16.         case 2:{ if(($jour == 29) && (date('L') == 1)){ $jour = 1; $mois = $mois +1; }
  17.                  elseif(($jour == 28) && (date('L') == 0)){ $jour = 1; $mois = $mois +1; }}; break;
  18.         case 3:
  19.         ...
  20.         case 12: if($jour == 31) { $annee = $annee +1; $jour = 1; $mois = 1; }; break;
  21.         }
  22.    
  23.      
  24.       // Enregistrement de la prochaine mise à jour
  25.       $futur_date = mktime(0,0,0,$mois, $jour, $annee);
  26.       $req = "UPDATE reset_topsite SET(date='$futur_date')";
  27.       $sql = Requete($req);
  28.     }
  29. /////////////////////////////////////////


Message édité par AlphaZone le 19-06-2004 à 18:56:36
Reply

Marsh Posté le 19-06-2004 à 18:42:46   

Reply

Marsh Posté le 19-06-2004 à 23:45:25    

et ce genre de script faut le placer ou ?

Reply

Marsh Posté le 19-06-2004 à 23:53:35    

sur la page que tu souhaite.
 
Le mieu est de le placer sur le topsite en lui meme.

Reply

Sujets relatifs:

Leave a Replay

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