Afficher requête sql à heure fixe [Résolu/Fermé]

Signaler
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
-
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
-
Bonjour,

Je suis actuellement en stage dans une clinique ou je modifie l'intranet.

Il y a une page qui affiche les gardes des médecins, infirmières... cette page est remplie grâce à une requête, le problème c'est que la page se met à jour tout les soirs à minuit.
Or une garde dur de 8h00 le matin à 8h00 le lendemain, il faudrait donc que la liste de garde change chaque jour à 8h00.

Voici un petit bout du code pour vous donner une idée:

$tsConsult=$tabVariables[0];
$dateToConsult=$tabVariables[1];
$ts = (mktime()); //On récupère le TimeStamp du lundi
if ($dateToConsult!=""){
$list=explode("-",$dateToConsult);
$ts = (mktime(0,0,0,$list[1],$list[2],$list[0],0));
}
if ($tsConsult!=""){
$ts=$tsConsult;
}

$avant = $ts - 86400; //TimeStamp Lundi précédant
$apres = $ts + 86400; //TimeStamp Lundi suivant
$valDate="";
$dateAff=date('d M Y',$ts);
$date=date('Y-m-d',$ts);
$valDate.="$date";


echo " <input type='button' value='Imprimer' style='margin-bottom:5px;' onClick=window.open('CDG/impression.php?date=$date'); />";

echo "<input type='hidden' id='tsToConsult' value='$ts' />";
//Initialisation des variables

echo "<div class='caseEntete'>";
?>
<div style='float:left;margin-left:5px;margin-right:60px;'>
Se rendre à la date :
<input onclick="ds_sh(this);" name="date_consult" id="dateToConsult" style="cursor: text;" size="7">
<input value="Go" type="button" onClick=linkToDiv('CDG/accueil.php','rubrique','*_*'+document.getElementById('dateToConsult').value,'1') >
</div>
<?
echo "<input type='button' value='<<' onClick=linkToDiv('CDG/accueil.php','rubrique','$avant','1'); /> ";
echo "Gardes du ".$tabJ[$i]." ".$dateAff;
echo " <input type='button' value='>>' onClick=linkToDiv('CDG/accueil.php','rubrique','$apres','1'); />";
echo "</div>";
$reqListServ=verifReq("SELECT * FROM cdgservice");
$cptColor=0;


while($rowServ=mysql_fetch_object($reqListServ)){
$cptColor++;
$idServ=$rowServ->idServ;
$reqLiaison=verifReq("SELECT d.idInt,nom,telephone
FROM cdgdegarde d,cdgintervenant i
WHERE d.idInt=i.idInt
AND idServ='$idServ'
AND date='$date'");


if(mysql_num_rows($reqLiaison)!=0){
$obj = mysql_fetch_object($reqLiaison);

$idIntSet = $obj->idInt;
$nomSet = $obj->nom;
$nomSet .= ($obj->telephone != "") ? " - ".$obj->telephone : "";
}else{
$idIntSet='-';
$nomSet="-";
}



17 réponses

Messages postés
335
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
28 novembre 2012
28
Je rencontre le même problème actuellement...
https://forums.commentcamarche.net/forum/affich-18024101-mise-a-jour-automatique-en-php#p18026703

J'avance doucement...
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up! j'ai besoin d'aide


J'ai lu quelques poste à propos de tâche cron. Est-ce possible d'exécuter un script Php tout les jours à 8h00 qui affiche ma liste de garde sur l'intranet à l'aide d'un cron?

Le cron joue t'il seuleument un rôle sur la base de donnée?
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up!
J'ai vraiment besoin d'une idée... j'ai besoin d'afficher la nouvelle page de garde tout les matins à 8h!

J'ai une table cdgdegarde dans lequel j'ai les services et les personnes concernés par la garde ainsi que le jour de leur garde.

En ce moment ma page de garde s'affiche et se change à minuit car dans mon code je récupère la date du jour puis je fais une requête qui va chercher les gardes ou $date(date du jour) = date de la garde

Est-ce possible d'afficher ma page à 8h00 seulement à l'aide d'une requête ou dois-je faire un cron ?

Si la solution du cron vous parait correct, pouvez-vous m'en dire un peu sur le cron car je n'y connait rien. J'ai essayé de me renseigné un peu partout mais je trouve les explications peut clair.
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up!
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 939
Salut,

si dans ta base, tu n'as pas de gestionj d'évènement horaire (ce qui est normal, puisque ce n'est pas le rôle d'une base), alors, le passage par un automatisme extérieur doit être envisagé.

cron permet de lancer un script (quel qu'il soit) à des horaires prédéfinis.

Il fonctionne avec un fichier dans lequel on paramètre des dates et heures avec un nom de script à lancer.

Cependant, si ton action à faire n'est pas scriptable, alors cron ne pourra rien y faire.

Ex de contenu du fichier de paramètre de cron :

0 10 * * 1-5 nom_du_script

Ici, on va lancer à 10:00 le matin du lundi au vendredi le script 'nom_du_script'

Il y a quand même quelque chose qui m'échappe : qui provoque le rafraichissement à minuit, puisque l'on est sur une page web, ça ne se fait pas automatiquement ?
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
Le rafraichissement se fait manuellement si je peux dire sa^^

En faite, il y a des médecins 24h/24 dans la clinique, lorsqu'il laisse la page sur la page de garde il n'y a pas de changement. Mais comme ils savent que sa change par jour, vers minuit s'il rafraichisse la page il y a la nouvelle liste.

Cependant j'ai "réglé" ce problème en faisant un rafraichissement de la page toute les 10 minutes.

Pour le cron je sais que le serveur sur lequel est logé l'intranet le prend en compte mais je n'ai jamais fait sa.
Je me suis un peut renseignée mais jme sent perdu^^
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 939
Y'a un truc qui m'échappe, si le rafraichissement de la page est automatique toutes les 10 min, où est le problème ?
Il faut juste vérifier qu'on est après 8h00 et lancer la requête qui va mettre à jour les gardes, non ?
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
j'ai essayé plein de chose justement mais je n'arrive pas à faire que la requête ne s'affiche pas avant 8h00 :s surtout qu'il faut qu'elle s'affiche à 8h00 et reste active jusqu'à 8h00 le lendemain...

Une idée?
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 939
Je ne comprends pas ton problème : la requête est exécutée à chaque appel de la page.
Ca veut dire quoi : je n'arrive pas à faire que la requête ne s'affiche pas avant 8h00
Ne serait-ce point que tu ne veux pas que la requête s'exécute tant qu'il n'est pas 8:00 et que tu aies les anciens résultats jusqu'à cette heure ?
Dans ce cas, il te faut positionner un horodatage dans une table lorsque tu génères ta requête et ensuite tu iras voir si tu es supérieur de plus de 24 heures par rapport à cet horodatage, si oui : tu relances la requête, sinon, tu gardes les données...
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
oui tu as compris ce que je veux faire!!!
Le matin entre minuit et 8h je garde la requête de la vieille et à 8h00 la nouvelle requête doit s'exécuter.

qu'est ce que tu veux dire par un horodatage?
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 939
Tu crées une table avec un seul champ de type date/heure.
Lorsque tu génère ta requête, tu vas mettre à jour ce champ avec date/heure courante.
Ensuite, à chaque rafraichissemeent de la page, tu vas regarder l'heure qu'il est et tu compares avec ce qu'il y a dans la table. Tant que tu n'as pas dépassé de 24 heures la date/heure, tu ne fais rien, sinon, tu regénères ta requête.
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
Le problème c'est qu'avec mon code je ne sais pas pourquoi mais impossible de récupérer l'heure...

$avant = $ts - 86400; //TimeStamp Lundi précédant
$apres = $ts + 86400; //TimeStamp Lundi suivant
$valDate="";
$dateAff=date('d M Y',$ts);
$date=date('Y-m-d H:i:s',$ts);

ensuite sa envoi a une fonction javascript:

function goSetLiaison(idServ,date){
var varToSend="setLiaison*_*"+idServ+"*_*"+getVal('listeInt'+idServ)+"*_*"+date;
linkToDiv('requetes.php','divRequete',varToSend,'1');
}

Puis à ma requête pour insérer :

}else if($typeReq=="setLiaison"){
$idServ=$tabVariables[1];
$idInt=$tabVariables[2];
$date=$tabVariables[3];
$reqVerif=verifReq("SELECT * FROM cdgdegarde WHERE idServ='$idServ' AND date='$date'");
if(mysql_num_rows($reqVerif)==0){
verifReq("INSERT INTO cdgdegarde VALUE('$idServ','$idInt', '$date')");
}else{
verifReq("UPDATE cdgdegarde SET idInt='$idInt' WHERE idServ='$idServ' AND date='$date'");
}


Je tient a préciser que ce n'est pas moi qui est fait ces pages, pas facile de passer derrière quelqu'un... :(

Le champ date de ma table cdgdegarde est de type datetime.
Quand on ajoute une garde, la date de la garde est bien ajouté dans la table mais pas l'heure on reçoit donc qqchose comme 2010-06-11 00:00:00
Messages postés
335
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
28 novembre 2012
28
J'ai vu que tu utilisais le systeme unix à savoir compter en seconde.
Je me demande pourquoi dans ta table, tu ne remplace pas datetime par decimal... Au moins, tu n'insèrerais que des valeur en secondes, ce qui t'éviterai de faire le changement...
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
eh bien c'est pas moi qui est crée la base et l'intranet, la dernière mise à jour de celui-ci date de 2008...
En ce moment je suis stagiaire et il me demande de faire les changements de tout ce qui ne fonctionne pas comme il le voudrait.
Ce problème est le dernier qu'il me reste à résoudre mais je m'arrache les cheveux!!

J'ai une question pour le $ts = (mktime(08,0,0,$list[1],$list[2],$list[0],0));
ma variable $ts récupère ici le temps en seconde jusqu'a la date d'aujourd'hui à 8h c'est bien sa?
C'est cette valeur qu'il faut que je rentre en décimal dans ma table ?
Messages postés
335
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
28 novembre 2012
28
Si tu le dis, c'est que c'est bien ca... quoique:

mktime ($hour,$minute,$second,$month,$day,$year, 1 ou 0 );

Si tu est sur que tes $list correspond bien au ref du dessus, alors la réponse est oui, Ca correspond bien au nombre de seconde écoulé depuis le 1 janv 1970 jusqu'à 8H du matin
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
Je n'arrive pas à entrer l'heure dans ma table c'est l'horreur ! Je comprend l'idée de comparer avec les 24h mais je ne voit pas comment m'y prendre je me sent surpassé la =(
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
Voila ma requête qui affiche la liste des gardes:

while($rowServ=mysql_fetch_object($reqListServ)){
$cptColor++;
$idServ=$rowServ->idServ;
$reqLiaison=verifReq("SELECT d.idInt,nom,telephone
FROM cdgdegarde d,cdgintervenant i
WHERE d.idInt=i.idInt
AND idServ='$idServ'
AND date='$date'");}

Est-il possible de faire une condition du style si les secondes écoulé à l'instant T moins les secondes écoulé jusqu'à aujourd'hui 8h < 86 400 (soit 24h) alors exécuter la requête...?
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 939
Quel que soit le calcul que tu veux faire, il te faut avoir quelque part ta date et heure de référence, en php, pas de variables qui tiennent la distance, à moins de jouer avec les sessions ou les cookies...
Messages postés
31
Date d'inscription
vendredi 21 mai 2010
Statut
Membre
Dernière intervention
21 janvier 2011
7
Comme l'a dit Blux,
session_start();
$_SESSION['date']=date("Y/m/d");
$_SESSION['heure']=date("H:i:s");


il ne te reste plus qu'a faire tes conditions sur les dates / heures contenus dans ta table par rapport à la date en cours (d'où la session qui peut être appelé à n'importe quel moment)

Ou alors, j'ai rien compris à ce que tu voulais ! ++ en espérant avoir aidé.
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
J'ai ajouté un champ heure de type time dans ma table cdgdegarde et j'ai changé la requête de cette facon :
$reqLiaison=verifReq("SELECT d.idInt,nom,telephone
FROM cdgdegarde d,cdgintervenant i
WHERE d.idInt=i.idInt
AND idServ='$idServ'
AND (date='$hier' AND $sheure <= heure) OR ( date='$date' AND $sheure > heure");

Sa ne fonctionne toujours pas, comment faire pour comparer l'heure actuelle et l'heure dans ma table?
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
up
Messages postés
65
Date d'inscription
jeudi 3 juin 2010
Statut
Membre
Dernière intervention
25 février 2011
3
J'ai trouvé une solution , je l'affiche si sa peut aider quelqu'un un jour:

$heure=$_SESSION['heure']=date("H:i:s"); // récupère l'heure

$heureEntier = str_replace(":", "", $heure); //remplace les ":" par rien exemple 08:59:30 devient 085930

$hier=$_SESSION['hier']=date("Y-m-d",$avant);//récupère la date d'hier

Ma requête est :

$reqLiaison=verifReq("SELECT d.idInt,nom,telephone
FROM cdgdegarde d,cdgintervenant i
WHERE d.idInt=i.idInt
AND idServ='$idServ'
AND ((date='$date' AND $heureEntier > 80000)
OR (date='$hier' AND $heureEntier <= 80000)) ");

80000 représente 08:00:00

C'est une méthode un peu barbare mais elle fonctionne très bien!!!!