[AJAX] Compte a rebours multi utilisateur
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:
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:
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:
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
?> |