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:
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')
{
Ajax:
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);
}
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
 
<?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
?>