Afficher div en fonction d'une variable
Résolu/Fermé
Gégé
-
Modifié par Gégé le 12/02/2012 à 10:01
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 - 12 févr. 2012 à 18:18
prosthetiks Messages postés 1189 Date d'inscription dimanche 7 octobre 2007 Statut Membre Dernière intervention 12 juin 2020 - 12 févr. 2012 à 18:18
A voir également:
- Afficher div en fonction d'une variable
- Fonction si et - Guide
- Afficher appdata - Guide
- Afficher mot de passe wifi android - Guide
- Afficher google en page d'accueil - Guide
- Afficher taille dossier windows - Guide
10 réponses
Déjà merci de bien vouloir m'aider :-)
Mais en fait le souci est que je voudrais que ma div s'affiche à une heure précise,
et si je fais comme tu me dis il faudrait que je vérifie chaque seconde la valeur de ma variable pour être sur que la div s'affiche exactement au moment où la tache cron s'exécute et donc que la valeur de ma variable change !
Mon serveur serait donc surcharger de requete incessante pour connaitre la valeur de ma variable...
Il faudrait que la variable soit vérifier juste après que ma tache cron ait été exécutée...
J'espère être compréhensible.
Mais en fait le souci est que je voudrais que ma div s'affiche à une heure précise,
et si je fais comme tu me dis il faudrait que je vérifie chaque seconde la valeur de ma variable pour être sur que la div s'affiche exactement au moment où la tache cron s'exécute et donc que la valeur de ma variable change !
Mon serveur serait donc surcharger de requete incessante pour connaitre la valeur de ma variable...
Il faudrait que la variable soit vérifier juste après que ma tache cron ait été exécutée...
J'espère être compréhensible.
dariumis
Messages postés
571
Date d'inscription
mardi 16 mars 2010
Statut
Membre
Dernière intervention
18 avril 2018
63
Modifié par dariumis le 12/02/2012 à 10:13
Modifié par dariumis le 12/02/2012 à 10:13
Salut, oui faut utiliser de l'ajax. Il faut appeler une fonction javascript sur windows.onload de ta page. Dans cette fonction il faut utiliser la fonction javascript setTimeOut qui interroge ta base de donné via un fichier php à une certaine fréquence.
http://www.siteduzero.com/tutoriel-3-4745-ajax-et-l-echange-de-donnees-en-javascript.html
http://www.siteduzero.com/tutoriel-3-4745-ajax-et-l-echange-de-donnees-en-javascript.html
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 10:34
12 févr. 2012 à 10:34
Hello,
Je t'ai fait un script d'exemple:
Index.html:
request.php:
Je t'ai fait un script d'exemple:
Index.html:
<html> <head> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <style type="text/css" media="screen"> #status{width:100px; height:100px;} .status-true{background-color:green;} .status-false{background-color:red;} </style> </head> <body> Etat de la variable: <div id="status"> </div> </body> <script type="text/javascript"> //Namespace var Crawler = []; Crawler.app = { timer: null, //Intevral entre deux requêtes en MS interval: 1000, //Constructeur _initialize: function(){ this.getStatus(); this.timer = this.setInterval(); }, setInterval: function(){ var self = this; return setInterval(function(){self.getStatus()}, self.interval); }, //Appelle la page request.php getStatus: function(){ $.ajax({ url: "request.php", //result contient true ou false en fonction de la réponse de request.php success: function(result){ //Mise a jour du div en tenant compte de la réponse $('#status').html(result).removeClass().addClass('status-'+result); } }); } } Crawler.instance = Crawler.app._initialize(); </script> </html>
request.php:
<?php print rand(1,2) == 1 ? 'true' : 'false';
A la relecture de ce que tu m'as marqué mon exemple que je viens de faire n'a rien à voir j'ai l'impression...
Je sais que j'en demande beaucoup mais pourrais tu inclure dans ton exemple
la condition avec l'heure courante comme tu me l'as noté.
J'espère ne pas être trop chiant avec mes demandes mais j'ai vraiment du mal avec le fonctionnement de l'ajax...
Je sais que j'en demande beaucoup mais pourrais tu inclure dans ton exemple
la condition avec l'heure courante comme tu me l'as noté.
J'espère ne pas être trop chiant avec mes demandes mais j'ai vraiment du mal avec le fonctionnement de l'ajax...
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
Modifié par prosthetiks le 12/02/2012 à 11:37
Modifié par prosthetiks le 12/02/2012 à 11:37
Je viens de te poster un exemple au dessus.
Tu peux l'améliorer en réinitialisant le timer lors du déclenchement en le settant à 86400000 (un jour de plus en MS) pour qu'il se redéclenche le lendemain si la page n'est pas rechargée entre temps.
Tu peux l'améliorer en réinitialisant le timer lors du déclenchement en le settant à 86400000 (un jour de plus en MS) pour qu'il se redéclenche le lendemain si la page n'est pas rechargée entre temps.
Ouais j'ai vu ton code merci beaucoup ! Mais là j'ai du mal à tout bien comprendre...encore une fois, désolé...
Ce "compte à rebours fonctionne donc en permanence c'est bien çà ?
Et donc dès que l'heure programmée est la même que l'heure actuelle
il exécute:
Et donc à la place de "Appel de la fonction de vérification" je mets la fonction que tu m'as noté plus haut ?
Je m'embrouille c'est un malheur...en tout cas merci beaucoup de m'aider c'est vraiment sympa.
Ce "compte à rebours fonctionne donc en permanence c'est bien çà ?
Et donc dès que l'heure programmée est la même que l'heure actuelle
il exécute:
function output(){ alert('Appel de la fonction de vérification'); }
Et donc à la place de "Appel de la fonction de vérification" je mets la fonction que tu m'as noté plus haut ?
Je m'embrouille c'est un malheur...en tout cas merci beaucoup de m'aider c'est vraiment sympa.
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
Modifié par prosthetiks le 12/02/2012 à 11:50
Modifié par prosthetiks le 12/02/2012 à 11:50
Je t'explique en détail:
Au moment ou la page est appelée, ce bout de code PHP est exécuté:
$verifTime contient l'heure à laquelle tu souhaites vérifier la valeur de ta variable
$interval contient la différence entre l'heure courante et l'heure de vérification (en secondes).
On a ensuite du code HTML avec à l'intérieur un bout de code php:
On va donc insérer la valeur de $interval en PHP dans du javascript.
setTimeout() sert à déclencher une fonction au bout d'un temps donné.
Ce temps correspond à l'interval entre maintenant et $verifTime.
Il faut ensuite que tu mettes ton script de vérification (l'appel Ajax) à la place de la function output.
Pour faire simple, le script que je te propose est simplement un sorte de cron en javascript.
Au moment ou la page est appelée, ce bout de code PHP est exécuté:
<?php //11h25 et 20 secondes $verifTime = mktime(11, 25, 20, date("m"), date('d'), date("Y")); //Si l'heure de vérification est passée, on ajoute un jour if($verifTime < time()){ $verifTime += 86400; } $interval = $verifTime - time(); ?>
$verifTime contient l'heure à laquelle tu souhaites vérifier la valeur de ta variable
$interval contient la différence entre l'heure courante et l'heure de vérification (en secondes).
On a ensuite du code HTML avec à l'intérieur un bout de code php:
setTimeout(output, <?php print $interval * 1000; ?>);
On va donc insérer la valeur de $interval en PHP dans du javascript.
setTimeout() sert à déclencher une fonction au bout d'un temps donné.
Ce temps correspond à l'interval entre maintenant et $verifTime.
Il faut ensuite que tu mettes ton script de vérification (l'appel Ajax) à la place de la function output.
Pour faire simple, le script que je te propose est simplement un sorte de cron en javascript.
Ok merci beaucoup c'est très clair mais du coup avec ce code, je n'est pas besoin de tache cron qui update ma table !
Avec ton système à une heure donnée je lance l'affichage de ma div tout simplement non ?
Et à une autre heure j'arrête l'affichage.
C'est bien possible non ?
genre:
Ce code serait bon ?
Avec ton système à une heure donnée je lance l'affichage de ma div tout simplement non ?
Et à une autre heure j'arrête l'affichage.
C'est bien possible non ?
genre:
<script type="text/javascript"> function afficher_ma_div() document.getElementById('ma_div').style.display='block'; setTimeout(afficher_ma_div, <?php print $interval * 1000; ?>); </script>
Ce code serait bon ?
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
Modifié par prosthetiks le 12/02/2012 à 11:59
Modifié par prosthetiks le 12/02/2012 à 11:59
ta crontask te permet de mettre à jour une valeur dans ta base de donnée si j'ai bien compris.
Le javascript va ensuite faire une requête Ajax sur une page php qui va lui retourner la valeur mise à jour par la crontask. En se basant sur cette valeur, le scripts JS va faire apparaître ou disparaître ton div.
Tu as donc besoin des deux scripts pour que le tout fonctionne.
Par contre si ton seul but est d'afficher un div à une heure donnée et de le cacher à une autre heure, tu n'as pas besoin de crontask. C'est ce que tu veux faire ? si oui, je ferai quelques modifications dans mon exemple pour faire qqch de propre =)
Le javascript va ensuite faire une requête Ajax sur une page php qui va lui retourner la valeur mise à jour par la crontask. En se basant sur cette valeur, le scripts JS va faire apparaître ou disparaître ton div.
Tu as donc besoin des deux scripts pour que le tout fonctionne.
Par contre si ton seul but est d'afficher un div à une heure donnée et de le cacher à une autre heure, tu n'as pas besoin de crontask. C'est ce que tu veux faire ? si oui, je ferai quelques modifications dans mon exemple pour faire qqch de propre =)
et bien en fait oui je veux "tout simplement" faire en sorte qu'une div apparaisse à 20h00 exactement sur mon site et disparaisse à 20h01.
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 12:06
12 févr. 2012 à 12:06
Ok, je te pond le code, compte 15 minutes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 12:41
12 févr. 2012 à 12:41
Voila le script:
Il fait apparaitre un div à 20h00 et le fait disparaitre à 20h01
Il fait apparaitre un div à 20h00 et le fait disparaitre à 20h01
<?php //11h25 et 20 secondes $verifTime = mktime(20, 00, 00, date("m"), date('d'), date("Y")); //Si l'heure de vérification est passée, on ajoute un jour if($verifTime < time()){ $verifTime += 86400; } $interval = $verifTime - time(); ?> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css" media="screen"> #statusDiv{ height:100px; width:100px; background-color:#f00; display:none; } </style> </head> <body> <div id="statusDiv"> Status div </div> <?php print $interval; ?> <script type="text/javascript"> var Cron = []; Cron.manager = { showTimer: false, hideTimer: false, //Nombre de MS durant lesquelles le div restera affiché showTime: 60000, _initialize: function(){ this.showTimer = this.setTimer(<?php print $interval * 1000; ?>, this.showDiv); this.hideTimer = this.setTimer(<?php print $interval * 1000; ?> + this.showTime, this.hideDiv); }, setTimer: function(interval, target){ timer = setTimeout(target, interval); return timer; }, hideDiv: function(){ var self = Cron.manager; clearTimeout(self.hideTimer); self.setTimer(86400000, self.hideDiv); document.getElementById('statusDiv').style.display = 'none'; }, showDiv: function(){ var self = Cron.manager; clearTimeout(self.showTimer); self.setTimer(86400000, self.showDiv); document.getElementById('statusDiv').style.display = 'block'; } } Cron.manager._initialize(); </script> </body> </html>
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 12:46
12 févr. 2012 à 12:46
Je te mets juste en garde à l'aspect de la sécurité du script pour le moment: l'utilisateur peut très bien afficher manuellement le div. Donc si il contient des données sensibles, il faudra quand même recourir à Ajax et à PHP pour en récupérer le contenu. L'avantage est de pouvoir faire une vérification de l'heure au niveau PHP.
Merci beaucoup je vais de suite essayer de mettre tout çà en place et tester !!
Quand tu dis l'utilisateur peut afficher manuellement le div c'est à dire ?
Si le div est masqué comment il le fait apparaitre ?
Enfin de toute façon aucune données sensible.
Et merci encore mille fois pour ce script !!!!
Quand tu dis l'utilisateur peut afficher manuellement le div c'est à dire ?
Si le div est masqué comment il le fait apparaitre ?
Enfin de toute façon aucune données sensible.
Et merci encore mille fois pour ce script !!!!
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
Modifié par prosthetiks le 12/02/2012 à 13:00
Modifié par prosthetiks le 12/02/2012 à 13:00
Pour le moment on se contente de masquer le div en CSS, mais il est bien présent dans le code source de la page.
Donc si quelqu'un souhaite accéder à son contenu en dehors des heures d'affichage, c'est possible pour le moment. Souhaites-tu sécuriser tout ça ?
Edit: encore une question... si qqun se connecte à 20h00 et 30 s, il faudrait que le div soit affiché durant 30 secondes quand même ?
Donc si quelqu'un souhaite accéder à son contenu en dehors des heures d'affichage, c'est possible pour le moment. Souhaites-tu sécuriser tout ça ?
Edit: encore une question... si qqun se connecte à 20h00 et 30 s, il faudrait que le div soit affiché durant 30 secondes quand même ?
ok oui effectivement il apparaitra dans le code source de la page mais ce n'est pas un problème.
Mais si çà ne te dérange pas trop de me donner un exemple sécuriser çà pourrait m'être très utile aussi !
Enfin en tout cas merci beaucoup encore de ton aide, faut que je mette en place tout çà vite fait là que je teste !! :-)
Mais si çà ne te dérange pas trop de me donner un exemple sécuriser çà pourrait m'être très utile aussi !
Enfin en tout cas merci beaucoup encore de ton aide, faut que je mette en place tout çà vite fait là que je teste !! :-)
J'ai mis en place le code et ma div s'affiche tout le temps, çà peut être du à un mauvais placement du code ?
J'ai bien mis dans le header et dans body comme il faut il me semble pourtant.
J'ai bien mis dans le header et dans body comme il faut il me semble pourtant.
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 13:29
12 févr. 2012 à 13:29
Tu as bien mis en place ce bout de CSS ?
Je suis en train d'améliorer le script et de te préparer une version sécurisée, reste à l'écoute ;)
<style type="text/css" media="screen"> #statusDiv{ height:100px; width:100px; background-color:#f00; display:none; } </style>
Je suis en train d'améliorer le script et de te préparer une version sécurisée, reste à l'écoute ;)
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
Modifié par prosthetiks le 12/02/2012 à 14:02
Modifié par prosthetiks le 12/02/2012 à 14:02
Voila une version finale:
Code de request.php:
Voir nouvelle version dans post du dessous
Code de request.php:
<?php if(mktime(20, 00, 00, date("m"), date('d'), date("Y")) >= time()){ if(mktime(20, 01, 00, date("m"), date('d'), date("Y")) <= time()){ print 'Dans les heures.'; return false; } } print 'Pas dans les heures.';
Bon alors il ya plusieurs soucis:
Sur firefox: la div s'affiche puis disparait au bout d'une minute et ce à chaque fois qu'on actualise la page
Sur safari,internet explorer: la div ne s'affiche pas, mais à l'heure précisée elle ne s'affiche pas non plus...
Sur firefox: la div s'affiche puis disparait au bout d'une minute et ce à chaque fois qu'on actualise la page
Sur safari,internet explorer: la div ne s'affiche pas, mais à l'heure précisée elle ne s'affiche pas non plus...
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 14:03
12 févr. 2012 à 14:03
Tu peux tester ça sur IE ?
Il faut créer la page request.php (voir code dans post ci-dessus)
Il faut créer la page request.php (voir code dans post ci-dessus)
<?php //11h25 et 20 secondes $verifTime = mktime(14, 01, 00, date("m"), date('d'), date("Y")); //Si l'heure de vérification est passée, on ajoute un jour if($verifTime < time()){ $verifTime += 86400; } $interval = $verifTime - time(); ?> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> <style type="text/css" media="screen"> #statusDiv{ height:100px; width:100px; background-color:#f00; display:none; } </style> </head> <body> <div id="statusDiv"> Status div </div> <?php print 'Déclenchement dans <span id="seconds">' . $interval . '</span> s'; ?> <script type="text/javascript"> var Cron = []; Cron.manager = { showTimer: false, hideTimer: false, //Nombre de MS durant lesquelles le div restera affiché showTime: 60000, _initialize: function(){ <?php if($interval > 86340): ?> $('#statusDiv').css('display', 'block'); this.showTimer = this.setTimer(<?php print $interval * 1000 ?>, this.showDiv); this.hideTimer = this.setTimer(<?php print ($interval - 86400 + 60) * 1000; ?>, this.hideDiv); <?php else: ?> this.showTimer = this.setTimer(<?php print $interval * 1000; ?>, this.showDiv); this.hideTimer = this.setTimer(<?php print $interval * 1000; ?> + this.showTime, this.hideDiv); <?php endif; ?> if(this.showTimer > 86341){ $('#statusDiv').css('display', 'block'); } this.getContent(); }, getContent: function(){ $.ajax({ url: "request.php", success: function(result){ $('#statusDiv').html(result); } }); }, setTimer: function(interval, target){ timer = setTimeout(target, interval); return timer; }, hideDiv: function(){ var self = Cron.manager; $('#statusDiv').html(''); clearTimeout(self.hideTimer); self.setTimer(86400000, self.hideDiv); $('#statusDiv').css('display', 'none'); }, showDiv: function(){ var self = Cron.manager; self.getContent(); clearTimeout(self.showTimer); self.setTimer(86400000, self.showDiv); $('#statusDiv').css('display', 'none'); } } Cron.manager._initialize(); function decremente(){ document.getElementById('seconds').innerHTML = document.getElementById('seconds').innerHTML -1; } setInterval(decremente, 1000); </script> </body> </html>
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 18:18
12 févr. 2012 à 18:18
Une erreur s'est glissée dans le script:
à remplacer par block
showDiv: function(){
var self = Cron.manager;
self.getContent();
clearTimeout(self.showTimer);
self.setTimer(86400000, self.showDiv);
$('#statusDiv').css('display', 'none');
}
à remplacer par block
bon alors la div ne s'affiche pas
le echo marque: 29 s"; ?>
donc le temps avant execution
et rien ne se passe...
Enfin là même chose sur tous les navigateurs.
le echo marque: 29 s"; ?>
donc le temps avant execution
et rien ne se passe...
Enfin là même chose sur tous les navigateurs.
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 14:30
12 févr. 2012 à 14:30
tu exécute bien ce script dans via wamp ou easyphp ?
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 14:48
12 févr. 2012 à 14:48
je peux avoir l'url pour voir ce qui s'passe ?
et bien le site n'étant pas fini je n'ai pas trop envie de publier l'adresse ici...
C'est un site de vente donc et je ne voudrais que quelqu'un puisse y accéder avant qu'il ne soit complètement terminer !
C'est d'ailleurs le dernier souci qu'il me reste pour finaliser mon site...
Et çà me stresse de ne pas y arriver...
Je pourrais te donner l'adresse par mail si tu veux ?
C'est un site de vente donc et je ne voudrais que quelqu'un puisse y accéder avant qu'il ne soit complètement terminer !
C'est d'ailleurs le dernier souci qu'il me reste pour finaliser mon site...
Et çà me stresse de ne pas y arriver...
Je pourrais te donner l'adresse par mail si tu veux ?
prosthetiks
Messages postés
1189
Date d'inscription
dimanche 7 octobre 2007
Statut
Membre
Dernière intervention
12 juin 2020
431
12 févr. 2012 à 15:00
12 févr. 2012 à 15:00
Tu peux me l'envoyer par MP, je la diffuserai pas. Ca sera plus simple pour t'aider.
skurseb
Messages postés
8
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
18 février 2012
1
12 févr. 2012 à 15:16
12 févr. 2012 à 15:16
je t'es envoyé l'adresse par MP
12 févr. 2012 à 10:41
Modifié par prosthetiks le 12/02/2012 à 10:46
Après un petit calcul, tu peux connaitre le temps restant avant de devoir exécuter la fonction de vérification. Il ne te reste plus qu'a faire un setTimeout(function_de_verif, delai_calculé) et ton script devrait fonctionner sans surcharger le serveur =)
Modifié par Gégé le 12/02/2012 à 10:51
Tu peux par exemple automatiser la sauvegarde de ta base de donnée tous les jours à une heure définie.
En fait moi ce que je fais c'est j'automatise une requete qui va upadater une table dans ma base de donnée à une heure précise tout simplement.
Donc une fois ma tache effectuée la valeur de ma variable à changer et c'est à ce moment là qu'il faudrait que la valeur de ma variable soit vérifier et qu'elle affiche ma div.
12 févr. 2012 à 11:07
Modifié par Gégé le 12/02/2012 à 11:11
Si par exemple je veux mon script marche que de 20h à 21h: (exemple vite fait biensur :-) )
C'est bien çà ?