pb de boucle

Eléphant du PHP | 223 Messages

11 mai 2010, 17:39

je doit faire dans la meme page plusieur compte rebour dynamique
la date est une datetime sql mais pas moyen que sa marche sur plusieur
si je met sur un seul compte rebour cela marche nickel
mais des que j'en met deux ou plus un seul marche
voici le code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include('../conf/conf.php');
$db = mysql_connect($serveur, $user, $passw);
mysql_select_db($bd_base ,$db);
$req_atts = "SELECT  * FROM Objet " ;
$reqs = mysql_query($req_atts) OR die('erreur dans la requete pour savoir l\'attaque continu');
while($datas = mysql_fetch_array($reqs)) 
{ 
$id= $datas['id'];
/////////////////////////////////////////////
$req_att = "SELECT  h_fin, DAY(h_fin) AS jour, MONTH(h_fin) AS mois, YEAR(h_fin) AS annee, HOUR(h_fin) AS heure, MINUTE(h_fin) AS minute, SECOND(h_fin) AS seconde  FROM Objet where id=$id ";
$req = mysql_query($req_att) OR die('erreur dans la requete pour savoir l\'attaque continu');
while($data = mysql_fetch_array($req)) 
{ 
$jour= $data['jour'];
$mois= $data['mois'];
$heure= $data['heure'];
$minute= $data['minute'];
$seconde= $data['seconde'];
$annee= $data['annee'];
}
$targetYear  = $annee ;
$targetMonth = $mois ;
$targetDay   = $jour ;
$targetHour  = $heure ;
$targetMinute = $minute ;
$targetSecond = $seconde ;
$dateFormat = "Y-m-d H:i:s";
$targetDate = mktime($targetHour,$targetMinute,$targetSecond,$targetMonth,$targetDay,$targetYear);
$actualDate = time();
$secondsDiff = $targetDate - $actualDate;
$remainingDay     = floor($secondsDiff/60/60/24);
$remainingHour    = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
$remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))/60);
$remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))-($remainingMinutes*60));
$targetDateDisplay = date($dateFormat,$targetDate);
$actualDateDisplay = date($dateFormat,$actualDate);
?>
<script type="text/javascript">
  var days = <?php echo $remainingDay; ?>  
  var hours = <?php echo $remainingHour; ?>  
  var minutes = <?php echo $remainingMinutes; ?>  
  var seconds = <?php echo $remainingSeconds; ?>  
function setCountDown ()
{
  seconds--;
  if (seconds < 0){
      minutes--;
      seconds = 59
  }
  if (minutes < 0){
      hours--;
      minutes = 59
  }
  if (hours < 0){
      days--;
      hours = 23
  }
if( days < 0 ){
	document.getElementById(<?php echo $id ?>).innerHTML =" Termin&eacute;s";
 
}
else
{		
  document.getElementById(<?php echo $id ?>).innerHTML = days+":"+hours+":"+minutes+":"+seconds;
   
}
  setTimeout ( "setCountDown()", 1000 );
}
</script>
</head>
<body onload="setCountDown();">
<?php echo $id ?>
<div  id=<?php echo $id ?>><?php echo "$remainingDay days, $remainingHour hours, $remainingMinutes minutes, $remainingSeconds seconds";?></div>
<?php
}
?>

quelqun as une idée
merci

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 17:40


Eléphant du PHP | 223 Messages

11 mai 2010, 17:52

car maintenat c'est du php

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 17:55

car maintenat c'est du php
non puisque ton erreurs est dans ton javascript,
pourquoi tu fais 2 boucle avec une requete une pour allé cherché les id et l'autre pour allé cherche le reste ?

Eléphant du PHP | 223 Messages

11 mai 2010, 18:03

ben sinon il m affiche que le dernier compte rebours

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 18:06

ben sinon il m affiche que le dernier compte rebours
suffis de faire
SELECT  h_fin, DAY(h_fin) AS jour, MONTH(h_fin) AS mois, YEAR(h_fin) AS annee, HOUR(h_fin) AS heure, MINUTE(h_fin) AS minute, SECOND(h_fin) AS seconde  FROM Objet

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 18:38

bon allé je suis gentil, prend exemple la dessus c'est quand meme beaucoup plus propre et plus simple
<?php
	$link 	= mysql_connect('127.0.0.1', 'root', '');
	$db		= mysql_select_db('test' ,$link);

	$req_atts 	= 'SELECT id, time FROM test';
	$reqs 		= mysql_query($req_atts) or exit(mysql_error());
	
	$datas		= array();
	
	while($data = mysql_fetch_object($reqs))
	{
		$datas[$data->id] = strtotime($data->time) * 1000;	
		printf('<div id="%d"></div>', $data->id);
	}
?>
<script type="text/javascript">
	//<![CDATA[
	var datas 	= <?php echo json_encode($datas) ?>;
		
	var timer = function()
	{
		var date = new Date();
		
		for(i in datas)
		{
			var div 	= document.getElementById(i);
			var diff 	= datas[i] - date.getTime();

			if(diff > 0)
			{
				var down 	= new Date(diff);
				var days	= Math.floor(diff / 8640000);

				div.innerHTML = days + ' days ' + down.getHours() + ' hours ' + down.getMinutes() + ' minutes ' + down.getSeconds() + ' seconds';
			}
			else
			{
				delete datas[i];
				div.innerHTML = 'Terminé';
			}			
		}

		window.setTimeout(timer, 1000);
	}
	
	window.setTimeout(timer, 1000);	
	//]]>
</script>

Eléphant du PHP | 223 Messages

11 mai 2010, 18:39

marche pas cela m'affiche

compteur 1 (non dynamique)
1 days, 23 hours, 22 minutes, 24 seconds
compteur 2 (non dynamique)
1 days, 23 hours, 45 minutes, 24 seconds
compteur 3 (non dynamique)
1 days, 23 hours, 1 minutes, 53 seconds
compteur 4 celui si marche
1:23:1:39

Eléphant du PHP | 223 Messages

11 mai 2010, 18:42

stealth35
il faut que mes compte rebours soit sur l'heure du serveur et pas sur le client

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 18:43

marche pas cela m'affiche

compteur 1 (non dynamique)
1 days, 23 hours, 22 minutes, 24 seconds
compteur 2 (non dynamique)
1 days, 23 hours, 45 minutes, 24 seconds
compteur 3 (non dynamique)
1 days, 23 hours, 1 minutes, 53 seconds
compteur 4 celui si marche
1:23:1:39
normale ta la meme fonction pour chaque, tu la redéfinies a chaque fois normale que seul le dernier marche :wink:
fais le code que je t'ai mis plus haut

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 18:45

stealth35
il faut que mes compte rebours soit sur l'heure du serveur et pas sur le client
pas rave au lieu de
var date = new Date();

tu fais
var date = <?php echo time() ?>

et plus loin
var diff = datas - date;

<pre>
<?php
	$link 	= mysql_connect('127.0.0.1', 'root', '');
	$db		= mysql_select_db('test' ,$link);

	$req_atts 	= 'SELECT id, time FROM test';
	$reqs 		= mysql_query($req_atts) or exit(mysql_error());
	
	$datas		= array();
	
	while($data = mysql_fetch_object($reqs))
	{
		$datas[$data->id] = strtotime($data->time) * 1000;	
		printf('<div id="%d"></div>', $data->id);
	}
?>
<script type="text/javascript">
	//<![CDATA[
	var datas = <?php echo json_encode($datas) ?>;
	var date  = <?php echo time() * 1000 ?>;
	
	var timer = function()
	{		
		for(var i in datas)
		{
			if(datas.hasOwnProperty(i))
			{
				var div  = document.getElementById(i);
				var diff = datas[i] - date;
	
				if(diff > 0)
				{
					var down = new Date(diff);
					var days = Math.floor(diff / 86400000);
	
					div.innerHTML = days + ' days ' + down.getHours() + ' hours ' + down.getMinutes() + ' minutes ' + down.getSeconds() + ' seconds';
				}
				else
				{
					delete datas[i];
					div.innerHTML = 'Terminé';
				}
			}	
		}
		date -= 1000;
		window.setTimeout(timer, 1000);
	};
	
	window.setTimeout(timer, 1000);
	//]]>
</script>
Modifié en dernier par stealth35 le 11 mai 2010, 19:06, modifié 1 fois.

Eléphant du PHP | 223 Messages

11 mai 2010, 18:53

ok pour l'heure serveur
mais pareil que le dernier est dynamique les autre non

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 18:56

ok pour l'heure serveur
mais pareil que le dernier est dynamique les autre non
avec mon truc ?
montre le code source de ta page html

Eléphant du PHP | 223 Messages

11 mai 2010, 19:02

Code : Tout sélectionner

<?php $link = mysql_connect('127.0.0.1', 'root', 'root'); $db = mysql_select_db('test' ,$link); $req_atts = 'SELECT id, h_fin FROM Objet'; $reqs = mysql_query($req_atts) or exit(mysql_error()); $datas = array(); while($data = mysql_fetch_object($reqs)) { $datas[$data->id] = strtotime($data->time) * 1000; printf('<div id="%d"></div>', $data->id); } ?> <script type="text/javascript"> //<![CDATA[ var datas = <?php echo json_encode($datas) ?>; var timer = function() { var date = <?php echo time() ?>; for(i in datas) { var div = document.getElementById(i); var diff = var diff = datas[i] - date; if(diff > 0) { var down = new Date(diff); var days = Math.floor(diff / 8640000); div.innerHTML = days + ' days ' + down.getHours() + ' hours ' + down.getMinutes() + ' minutes ' + down.getSeconds() + ' seconds'; } else { delete datas[i]; div.innerHTML = 'Terminé'; } } window.setTimeout(timer, 1000); } window.setTimeout(timer, 1000); //]]> </script>
je mate sa demain
bonne soiree all merci

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 19:05

normale chez toi $data->time n'existe pas (et ta pas recopier le bon code), bizarre que ca t'affiche pas d'erreur tu devrais les activés c'est galere sinon pour bosser

php.ini

Code : Tout sélectionner

display_errors = On error_reporting = E_ALL | E_STRICT