[javascript] Compte à rebours bizarre

Fermé
ska3110 Messages postés 3 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 30 avril 2008 - 30 avril 2008 à 13:23
 Zozo - 23 oct. 2008 à 16:47
Bonjour,
j'ai besoin pour mon projet actuel d'un compte à rebours. J'ai pensé au javascript. La particularité de ce compte à rebours est qu'il doit être le même pour tous les utilisateurs de mon site en même tps (en effet il s'agit d'un compte à rebours avant le tirage d'une loterie). Pour cela, je recupère la date et l'heure de mon dernier tirage dans ma base, je lui ajoute l'intervalle de temps entre deux tirages et je lance le compte à rebours jusqu'a cette nouvelle date. C'est ici que les bizarreries commencent :
des fois le compte a rebours demarre correctement (1min et05sec avant le prochain tirage)
des fois il n'en fait qu'a sa tête : (59min et 50sec avant le prochain tirage)

De plus je souhaiterai qu'une fois le 0min et 0 sec atteint, il s'arrete et ne continue pas (d'ou la partie secondsRound==0 && minutesRounds==0) mais affiche un bouton permettant de lancer une autre page php.


Ce qui est bizarre c'est que certaines fois tout fonctionne parfaitement et d'autres rien ne marche !

merci de votre aide, je joins le code en question



<?php

$user=$_POST['username'];
//**********************************************************************
//Connexion a la base (récupération de la base)
	$connect=mysql_connect('******','********','*******');
	$base = "*******";
	mysql_select_db($base,$connect);
//**********************************************************************	
	$query = "SELECT * FROM Tirage ORDER BY NumTirage";
	$result = mysql_query($query);
	while ($row = mysql_fetch_array($result)){
		$numTirage=$row["NumTirage"];
		$date = strtotime($row["Date"]);
	}
	$date=$date+120; //date vaut la date du prochain tirage
	$numTirage++;
	//echo "date = ".$date."<br/>";
	$time=time();
	//echo "time = ".$time;
	$str=date('M d Y H:i:s',$date);
	//echo "str = ".$str;
	//echo "diff =".$diff;

	
echo '<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<SCRIPT LANGUAGE="Javascript" SRC="./components/com_hello/fonctions.js" charset=utf-8> </SCRIPT>
<link href="./components/com_hello/test.css" rel="stylesheet" type="text/css" />
<SCRIPT LANGUAGE="JavaScript">
<!-- 
function getTime(str) {
var string=str;
now = new Date();
y2k = new Date(string);
days = (y2k - now) / 1000 / 60 / 60 / 24;
daysRound = Math.floor(days);
hours = (y2k - now) / 1000 / 60 / 60 - (24 * daysRound);
hoursRound = Math.floor(hours);
minutes = (y2k - now) / 1000 /60 - (24 * 60 * daysRound) - (60 * hoursRound);
minutesRound = Math.floor(minutes);
seconds = (y2k - now) / 1000 - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) - (60 * minutesRound);
secondsRound = Math.round(seconds);
sec = (secondsRound == 1) ? " seconde" : " secondes";
min = (minutesRound == 1) ? " minute, " : " minutes, ";
hr = (hoursRound == 1) ? " heure" : " heures, ";
dy = (daysRound == 1)  ? " jour" : " jours, "
document.timeForm.input1.value = "Encore " +minutesRound + min + secondsRound + sec + " avant le prochain tirage !";
if (minutesRound==0){
	if (secondsRound==0){
	document.getElementById(\'bouton\').innerHTML=\'<INPUT TYPE=\"submit\" VALUE=\"Vérifiez si vous avez gagné\">\';
	document.timeForm.input1.value = "Tirage effectué"}
	else{
	newtime = window.setTimeout(function(string){getTime(str)},1000);
	}
}
else{
newtime = window.setTimeout(function(string){getTime(str)},1000);
}
}
// -->
</script>

</head><body onLoad="getTime(\''.$str.'\')">
<form name=timeForm>
<input type="texte" name=input1 size=110 border-style="none" style="border-bottom: 0px solid; border-left: 0px solid;border-right: 0px solid;border-top: 0px solid;font:12px arial, helvetica,sans-serif">
</form>';	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////	
if(isset($_POST["valeurs"])){
	$chaine = $_POST["valeurs"];
	$coeff = $_POST["liste"];
	$query = "INSERT INTO `kadoloto`.`GrilleJouee` (`Pseudo` ,`NumTirage` ,`NumerosJoues` ,`Coeff`)VALUES ('$user', '$numTirage', '$chaine', '$coeff'); ";
	$result=mysql_query($query);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	//**********************************************************************	
		//Calcul du nombre de parties jouées et décrémentation du nombre de parties restantes
	$query="SELECT * FROM Client WHERE Pseudo = '$user'"; 
	$result = mysql_query($query);
	$row = mysql_fetch_array($result);
			 $existant = $row['Nb_Parties_Restantes'];
			 $nb_parties_rest=$existant-$coeff;
	if ($nb_parties_rest>=0){// on verifie que le nb de parties restantes est suffisant
	 $query="UPDATE`Client` SET `Nb_Parties_Restantes` = '$nb_parties_rest' WHERE CONVERT(`Client`.`Pseudo` USING utf8 ) = '$user' LIMIT 1 ";
	 		$result = mysql_query($query);
	 	}
	else echo "<h1>Vous n'aviez pas assez de parties restantes</h1>";
	 //**********************************************************************	
echo "<FORM METHOD=\"POST\"  ACTION=\"hello3.php\" ENCTYPE=\"x-www-form-urlencoded\">";
echo "<INPUT TYPE=\"hidden\" NAME=\"username\" VALUE=".$user.">";
echo "<div id=bouton></div>";

	
echo '</body></html>'




?>
A voir également:

3 réponses

ska3110 Messages postés 3 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 30 avril 2008
30 avril 2008 à 15:01
Petite précision supplémentaire : je me suis aperçu que le seul moment ou le compte à rebours déconne est une période de 36 secondes entre le tirage précédent et le tirage suivant. Cela serait-il du à un décallage entre l'heure du serveur et l"heure de ma machine ? les fonctions utilisées utilisent elles toutes les deux l'heure du serveur ?

Si vous avez des idées.....
0
ska3110 Messages postés 3 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 30 avril 2008
30 avril 2008 à 16:05
Le problème vient d'une différence de temps entre l'heure du serveur et l'heure de la machine cliente car le javascript se base sur l'heure du client et pas sur celle du serveur.


Si vous avez des idées sur comment recupérer l'heure du serveur via javascript, requetes AJAX et headers HTML, un ptit coup de main serait pas de refus
0
Bonjour,

C'est facile : tu récupères la date en PHP sur le serveur (fonction DATE), puis tu la passes à Javascript.
0