Bonjour, j'ai un gros problème à faire un compte à rebours qui serait affiché pour tout les utilisateurs. C'est un site de quiz multi utilisateur en temps réel que je veux faire. Un compte à rebours de 30 secondes qui serait remis à 30 après qu'un utilisateur à la bonne réponse ou bien terminé si aucune bonne réponse pour passé a la prochaine question.
Voici ce que j'ai pour l'instant.
Démarche:
- Appel de la fonction ajax dès l'ouverture de la page
- Ajax appel un script php qui lui utilise un fichier texte pour le compte a rebours. (dernier nombre - 1)
- Retour a ajax pour voir si les compte a rebour est a 0 sinon, afficher le nombre et rappel du script php. Si 0, stop.
Problème:
-Si plusieurs utilsateurs sont présent et bien le compte à rebours va de plus en plus vite car le script php est appelé plus d'une fois.
-Je ne sais pas comment faire pour remettre le compteur a 30 si un utilisateur clique sur la bonne réponse(choix de réponse).
Idées et solution bienvenue, merci
Dans ma page principale:
Ajax:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $enjeu = "on"; if ($enjeu == 'on') { echo "<SCRIPT LANGUAGE='javascript'>"; echo "makeRequest('compteur.php')"; echo "</SCRIPT>"; } elseif ($enjeu == 'off') {
Et script php qui appel le fichier texte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 function makeRequest(url) { url = 'compteur.php'; http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } http_request.onreadystatechange = function() { if (http_request.readyState == 4) { if (http_request.status == 200) { document.getElementById('compteur1').innerHTML = http_request.responseText; // on écrit le résultat dans le div if (http_request.responseText != 89) // Si le terme 'créée' est renvoyé par php { makeRequest(url) // Récursivité : On repart dans la fonction } if (http_request.responseText == 89) // Si le terme 'créée' est renvoyé par php { document.getElementById('compteur1').innerHTML = 'fin'; // on écrit le résultat dans le div } } else { alert('There was a problem with the request.'); } } } http_request.open('GET', url, true); http_request.send(null); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php header("Content-Type: text/plain ; charset=utf-8"); header("Cache-Control: no-cache , private"); header("Pragma: no-cache"); sleep(1); $fp = fopen("compteur1.txt","r+"); // 1.On ouvre le fichier en lecture/écriture $compteur1 = fgets($fp,11); // 2.On récupère le nombre dans le fichier $compteur1--; // 3.On incrémente le nombre de visites(+1) fseek($fp,0); // 4.On se place en début de fichier fputs($fp,$compteur1); // 5.On écrit dans le fichier le nouveau nb fclose($fp); // 6.On ferme le fichier echo $compteur1 // 7.On affiche le compteur à l'écran ?>
Partager