Afficher requête sql à heure fixe

Résolu/Fermé
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 - 4 juin 2010 à 11:00
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 - 17 juin 2010 à 08:39
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

louloute300 Messages postés 335 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 28 novembre 2012 29
4 juin 2010 à 11:07
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...
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 7/06/2010 à 08:33
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?
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
8 juin 2010 à 07:21
up
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
9 juin 2010 à 10:51
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 10/06/2010 à 07:46
up!
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
10 juin 2010 à 07:47
up
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 09:38
up
0
blux Messages postés 25994 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
11 juin 2010 à 09:46
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 ?
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 10:27
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^^
0
blux Messages postés 25994 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
11 juin 2010 à 10:34
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 ?
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 11:03
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?
0
blux Messages postés 25994 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
11 juin 2010 à 11:30
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...
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 11:38
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?
0
blux Messages postés 25994 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
11 juin 2010 à 12:21
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.
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 11/06/2010 à 13:47
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
0
louloute300 Messages postés 335 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 28 novembre 2012 29
11 juin 2010 à 13:49
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...
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 11/06/2010 à 14: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 ?
0
louloute300 Messages postés 335 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 28 novembre 2012 29
11 juin 2010 à 14:12
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
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 14:14
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 =(
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
11 juin 2010 à 14:41
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...?
0
blux Messages postés 25994 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 23 avril 2024 3 289
11 juin 2010 à 14:58
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...
0
tartefion Messages postés 31 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 21 janvier 2011 7
11 juin 2010 à 15:04
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é.
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
Modifié par Xella60 le 16/06/2010 à 13:29
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?
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
16 juin 2010 à 14:17
up
0
Xella60 Messages postés 65 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 25 février 2011 3
17 juin 2010 à 08:39
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!!!!
0