Afficher requête sql à heure fixe
Résolu
Xella60
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
Xella60 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Xella60 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
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="-";
}
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="-";
}
A voir également:
- Afficher requête sql à heure fixe
- Freebox n'affiche plus l'heure mais fonctionne - Forum Freebox
- Ma Freebox n'affiche plus l'heure - Forum Freebox
- Colissimo heure de livraison après-midi - Forum Consommation & Internet
- Changement d'heure - Guide
- Ma free n'affiche plus l'heure ! - Forum Réseaux sociaux
17 réponses
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...
https://forums.commentcamarche.net/forum/affich-18024101-mise-a-jour-automatique-en-php#p18026703
J'avance doucement...
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?
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?
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
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^^
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^^
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?
Une idée?
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...
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...
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?
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?
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.
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.
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
$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
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 ?
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 ?
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 =(
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...?
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...?
Comme l'a dit Blux,
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é.
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é.
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?
$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?
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!!!!
$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!!!!