Code javascript dans while php [Résolu/Fermé]

Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
- - Dernière réponse :  Utilisateur anonyme - 27 janv. 2013 à 19:57
Bonjour,

Voici mon soucis
j'ai créé un code php dont je vous en donne une partie
et également plus bas le code javascript (le code javascript fonctionne)
je récupère des données via une base de données MYSQL
sous forme tableau
et je parcours tous les tableaux pour récupérer un time
c'est dans mon code echo 'tps compte à rebours: '.$exe[2].'<br />';
donc à chaque boucle mon souhait est de voir le compte à rebours
donc là je bug
un compte à rebours ds une boucle oui peut être mais je ne vois pas
comment je peux m'y prendre "lui est en javascript "

bien entendu à chaque passage de boucle while $exe[2] change et je vois les valeurs sous
forme tableau

MERCI PAR AVANCE DE VOTRE AIDE


UNE PARTIE DE MON CODE PHP
AVEC MA BOUCLE "WHILE"

 else
	 {
	 $tab = explode ("|",$tab);
	 
	 $i=0;
	 while ($i<count($tab))
	 {
	 echo '<h1>'.$tab[$i].'</h1>';
	 $exe = explode ("|",$dpr[$tab[$i]]);
	 echo 'time_deb_const: '.$exe[0].'<br />';
	 echo 'time_fin_const: '.$exe[1].'<br />';
	 echo 'tps compte à rebours: '.$exe[2].'<br />';
	 ?>


//C EST CETTE PARTIE QUI M EMBETE
	 <div id="compteur_production">
		<script>
            temps_restant= "<?php echo $exe[2];?>";
            compteur_production();
        </script>
    </div>



	  <?php
	 $i++;
	 echo '<hr color="blue">';
	 }
	 }


VOICI LE CODE DU COMPTE A REBOURS JAVASCRIPT
function compteur_production()

{
	var compteur_production=document.getElementById('compteur_production');
	s=temps_restant;
	m=0;
	h=0;
	j=0;
	if(s<0)
	{
		
		//compteur.innerHTML="Terminé<br />" 
		document.location.href="city.php" 
	
		}
	
	else
	{
		if(s>59)
			{
				m=Math.floor(s/60);
				s=s-m*60
			}
		if(m>59)
			{
				h=Math.floor(m/60);
				m=m-h*60
			}
		if(h>23)
			{
				j=Math.floor(h/24);
				h=h-j*24
			}
		
				if(s<10)
			{
				s="0"+s
			}
		if(m<10)
			{
				m="0"+m
			}
		if(h<10)
			{
				h="0"+h
			}
		
		compteur_production.innerHTML=j+":"+h+":"+m+":"+s+""
	 }

	
	temps_restant=temps_restant-1;
	
	
	window.setTimeout("compteur_production();",1000);

}
  </script> 



Afficher la suite 

6 réponses

Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
9
0
Merci
bonjour,
je relance mon sujet MERCI PAR AVANCE
0
Merci
Bonjour

Tu as mis ton compte à rebours à l'intérieur d'une boucle : veux-tu un seul ou plusieurs compte à rebours ?
Si tu en veux plusieurs, problème : tu crées plusieurs div avec le même id, ce qui est interdit. Et c'est logique que ce soit interdit, car sinon ton getElementById va chercher quoi ?
Si tu en veux vraiment plusieurs, il faut leur donner des noms différents mais il faut aussi plusieurs compteurs, donc remplacer la variable simple temps_restant par un tableau.

D'autre part (et bien moins grave), faire -1 à chaque passage dans la fonction est une très mauvaise méthode, les tempos étant plus qu'approximatives... Il vaut mieux initialiser ta variable avec une heure de fin et calculer à chaque fois le temps restant, il n'y aura pas de dérive du comptage.
Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
9
0
Merci
bonjour,
j'ai pris note
je me doutais bien qu'il fallait plusieurs div id
justement j'ai bûché dessus pour eviter d'avoir à écrire 10000 lignes
concernant le passage du -1 du code javascript
afin de ne pas avoir de dérive du comptage
je vais passer par "date()"
j'ai trouvé une solution avec mon while php
et mes compte à rebours

j'y connais pas grand chose en javascript
alors j'ai cherché des exemples et j'en ai analysé
quelques uns bien que sur internet y a pas énormément d'exemple

j'en ai choisi un qui est intéressant

je fais encore quelques essais mais pour l'instant
c'est bon
je vous exposerai le résultat final

y a deux ou trois petite chose que je n'ai pas très bien compris
dont je demanderai explication

a très bientot


Moi je plante et toi tu creuses !!!
Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
9
0
Merci
bonjour,
voici le code que j'ai trouvé

que veut dire date_event????
Après je vois id_compte_rebours partie javascript, et plus bas vers mon code php
j'ai setInterval(function(){Rebour('_______,'compte_rebours_<?php echo $i;?>');}, ____);
j'ai du mal à saisir peut on m'expliquer ????

j'ai essayé plusieurs compte à rebours, le script fonctionne
mais j'essaye de le modifier
et là j'ai vraiment de gros soucie enfin pour moi
voici ce que j'aurai espéré


lorsque le compte à rebours arrive à zéro, rafraichissement de la page
là on peut dire pas de soucis c'est eventuellement ds mon javascript en else

mais pour aller plus loin

dans mon code php j'aurai voulu donné des condition soit deux au préalable
première condition c'est si le compte à rebours est supérieur à zéro on affiche le compte à rebours
sinon si le compte a rebours est inferieur à zéro on affiche un lien

MERCI PAR AVANCE DE VOS EXPLICATIONS

voici le code javascript

<script type="text/JavaScript">
function Rebour(date_event,id_compte_rebours) {

	var Affiche=document.getElementById(id_compte_rebours);
	var date1 = new Date();
	var date2 = new Date (date_event); // Date et heure de l'événement
	var sec = (date2 - date1) / 1000; // Temps donné en millièmes de seconde
	var n = 24 * 3600; //nombre de secondes dans un jour
	
	// Si le temps restant est supérieur à 0
	if (sec >= 0) {
		j = Math.floor (sec / n);
		h = Math.floor ((sec - (j * n)) / 3600);
		mn = Math.floor ((sec - ((j * n + h * 3600))) / 60);
		sec = Math.floor (sec - ((j * n + h * 3600 + mn * 60)));
		if(j == 0){
			j = '';
			Jour = '';
		} else {
			Jour = (j == 1) ? "j <span class='or'>|</span>" : "j <span class='or'>|</span>";
		}
		if(h == 0){
			h = '';
			Heure = '';
		} else {
			Heure = (h == 1) ? "h <span class='or'>|</span>" : "h <span class='or'>|</span>";
		}
		if(mn == 0){
			mn = '';
			Minute = '';
		} else {
			Minute = (mn == 1) ? "min <span class='or'>|</span>" : "min <span class='or'>|</span>";
		}
		if(sec == 0){
			sec = '';
			Seconde = '';
			Et = '';
		} else {
			Seconde = (sec == 1) ? "sec" : "sec";
			Et = (mn == 0 && h == 0 && j == 0) ? "" : "";
		}
			Affiche.innerHTML = j + ' ' + Jour + ' ' + h + ' ' + Heure + ' ' + mn + ' ' + Minute + ' ' + Et + ' ' + sec + ' ' + Seconde;
	}else{
		Affiche.innerHTML="<font color=\"red\">C'est fini !!</font>";
	//document.location.href="voir_production.php" 
	}
}
</script> 




voici une partie de mon code php

else
	 {
	 $tab = explode ("|",$tab);
	 
	 $i=0;
	 while ($i<count($tab))
	 {
	 echo '<h1>'.$tab[$i].'</h1>';
	 $exe = explode ("|",$dpr[$tab[$i]]);
	 echo 'time_deb_const: '.$exe[0].'<br />';
	 echo 'time_fin_const: '.$exe[1].'<br />';
	 echo 'tps compte à rebours: '.'<br />';
	
	
	 echo $dat1[$i] = strtotime($exe[1]).'<br />';
	echo $dat0 = strtotime(date("Y-m-d H:i:s")).'<br />';
	
if ($dat1[$i]>$dat0) //si "time construction" est superieur à "time()",
// on affiche le compte à rebours
{
?>	
	<div id="compte_rebours_<?php echo $i;?>">
	 
	<script type="text/JavaScript">
	setInterval(function(){Rebour('<?php echo $exe[1];?>','compte_rebours_<?php echo $i;?>');}, 1000);
</script>
	</div>
	<?php	
}
if ($dat1[$i]<$dat0)//ou else //   si "time construction" est inferieur à "time()",
//on n'affiche pas le compte à rebours mais on affiche un lien
{
echo '<a href="city.php">acceuil</a>';
	}


Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
9
0
Merci
bonjour,
voici le code que j'ai trouvé

que veut dire date_event????
Après je vois id_compte_rebours partie javascript, et plus bas vers mon code php
j'ai setInterval(function(){Rebour('_______,'compte_rebours_<?php echo $i;?>');}, ____);
j'ai du mal à saisir peut on m'expliquer ????

le code fonctionne très bien la partie javascript et également la partie php
mais après de nombreuses vérifications
j'ai pu remarqué qu'il fallait rajouter 1 heure "heure d'hivers"

mais cela pose problème comment faire pour changer ce changement d'heure été hivers sans le faire manuellement directement ds le code ????
Une petite idée?????

<?php    
include('config.php')    
?>    
<!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" />  
   
        <link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />    
        <title>Voir mes productions</title>   

<script type="text/JavaScript"> 
function Rebour(date_event,id_compte_rebours) { 

 var Affiche=document.getElementById(id_compte_rebours); 
 var date1 = new Date(); 
 var date2 = new Date (date_event); // Date et heure de l'événement 
 var sec = (date2 - date1) / 1000; // Temps donné en millièmes de seconde 
 var n = 24 * 3600; //nombre de secondes dans un jour 
  
 // Si le temps restant est supérieur à 0 
 if (sec >= 0) { 
  j = Math.floor (sec / n); 
  h = Math.floor ((sec - (j * n)) / 3600); 
  mn = Math.floor ((sec - ((j * n + h * 3600))) / 60); 
  sec = Math.floor (sec - ((j * n + h * 3600 + mn * 60))); 
  if(j == 0){ 
   j = ''; 
   Jour = ''; 
  } else { 
   Jour = (j == 1) ? "j <span class='or'>|</span>" : "j <span class='or'>|</span>"; 
  } 
  if(h == 0){ 
   h = ''; 
   Heure = ''; 
  } else { 
   Heure = (h == 1) ? "h <span class='or'>|</span>" : "h <span class='or'>|</span>"; 
  } 
  if(mn == 0){ 
   mn = ''; 
   Minute = ''; 
  } else { 
   Minute = (mn == 1) ? "min <span class='or'>|</span>" : "min <span class='or'>|</span>"; 
  } 
  if(sec == 0){ 
   sec = ''; 
   Seconde = ''; 
   Et = ''; 
  } else { 
   Seconde = (sec == 1) ? "sec" : "sec"; 
   Et = (mn == 0 && h == 0 && j == 0) ? "" : ""; 
  } 
   Affiche.innerHTML = j + ' ' + Jour + ' ' + h + ' ' + Heure + ' ' + mn + ' ' + Minute + ' ' + Et + ' ' + sec + ' ' + Seconde; 
 }else{ 
  //Affiche.innerHTML="<font color=\"red\">C'est fini !!</font>"; 
 document.location.href="voir_production.php"  
 } 


} 

</script>  


   
   </head>    
   <body>    
   
<center>    
 <img src = "default/images/titre.gif"></img><br />    
</center>  
<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?><br /> 
<?php echo "id: ".$_SESSION['userid'];?><br /> 
<br /> 
<?php 
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter 
if(isset($_SESSION['username'])) 
{ 
  //On compte le nombre de nouveaux messages que lutilisateur a 
  $nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"')); 
  //Le nombre de nouveaux messages est stoque dans la variable $nb_new_pm 
  $nb_new_pm = $nb_new_pm['nb_new_pm']; 

  //on enregistre heure actuel et heure fin de connection  
  $time_fin_connect = time() + $seconde_fin_connect; 
  mysql_query("UPDATE users SET time_connect = '".time()."' , time_fin_connect = '".$time_fin_connect."' WHERE username='".$_SESSION['username']."'") or die("erreur time_connect ou time_fin_connect<br>");  

  if ($_SESSION['username']=='admin') 
  { 
   
?>  
<a href="gestion_production.php">Gestion des productions</a><br />   
<?php 
} 
?>  
<a href="accueil.php">Accueil</a><br />  
<a href="city.php">Ma ville</a><br /> 
<a href="creer_production.php">Créer une production</a><br /> 
<a href="voir_production.php">Voir mes productions</a><br /> 
<a href="production.php">Acheter une production</a><br /> 
<a href="users.php">Classement</a><br /> 
<a href="option.php">Option</a><br /> 
<a href="list_pm.php">Messages(<?php echo $nb_new_pm; ?> non-lus)</a><br /> 
<a href="index.php">Se déconnecter</a><br /> 
<br /> 

<?php 
include_once "calcul.php";  

$result = mysql_query('SELECT * FROM production where username = "'.$_SESSION['username'].'"'); 
$dpr = mysql_fetch_array($result, MYSQL_ASSOC);  
  

  
$_SESSION['production_id'] = $dpr['id']; 
echo $_SESSION['production_id'].'<br />'; 
    
  echo "production de: ".$dpr['username'].'<br />'; 
  
  echo "nom des produits: ".$dpr['production'].'<br />'; 
   
  $tab=$dpr['production']; 
  if($tab=="") 
  { 
  echo '<h1>Vous ne possédez pas de productions actuellement</h1>'; 
  } 
  else 
  { 
  $tab = explode ("|",$tab); 
   
  $i=0; 
  while ($i<count($tab)) 
  { 
  echo '<h1>'.$tab[$i].'</h1>'; 
  $exe = explode ("|",$dpr[$tab[$i]]); 
  echo 'time deb: '.$exe[0].'<br />'; 
  echo 'time fin: '.$exe[1].'<br />'; 
  echo 'tps compte à rebours: '.'<br />'; 
   
 echo $dat0[$i] = strtotime($exe[0]).'heure deb<br />'; 
  echo $dat1[$i] = strtotime($exe[1]).'heure fin<br />'; 
  
 $madate= date("Y-m-d H:i:s"); 

list($annee,$mois,$jour,$h,$m,$s)=sscanf($madate,"%d-%d-%d %d:%d:%d"); 
echo "Ancienne date: ".$annee."-".$mois."-".$jour." ".$h.":".$m.":".$s."<br />"; 
$h+=1; 
$timestamp=mktime($h,$m,$s,$mois,$jour,$annee); 
$dat5=date('Y-m-d H:i:s',$timestamp); 

 echo $dat5 = strtotime($dat5);  
  
if ($dat5<$dat1[$i]) //si "time construction" est superieur à "time()", 
// on affiche le compte à rebours 
{ 
?>  
 <div id="compte_rebours_<?php echo $i;?>"> 
   
 <script type="text/JavaScript"> 
 setInterval(function(){Rebour('<?php echo $exe[1];?>','compte_rebours_<?php echo $i;?>');}, 1000); 
</script> 
 </div> 
 <?php  
} 
else//ou else //   si "time construction" est inferieur à "time()", 
//on n'affiche pas le compte à rebours mais on affiche un lien 
{ 
echo '<a href="city.php">acceuil</a>'; 
 } 
  
  //on recupere des donnees via id_production pour calcul 
 $nm_pt = mysql_real_escape_string($tab[$i]); 
 $result_id = mysql_query('SELECT * FROM id_production where nm_pt="'.$nm_pt.'"'); 
 $did = mysql_fetch_array($result_id, MYSQL_ASSOC); 
  
 echo 'temps de fabrication: '.$did['tps_fab'].'<br />'; 
 echo 'nom de la matière n°1: '.$did['nm_mat_pre1'].'<br />'; 
 echo 'image matière première n°1: '.$did['url1'].'<br />'; 
 echo 'consommation de la matière n°1: '.$did['cons_mp1'].'<br />'; 
   ?> 
   <a href="const_id.php?id=<?php echo $nm_pt; ?>">construire</a> 

   <?php 
  $i++; 
  echo '<hr color="blue">'; 
  } 
  } 
 // echo "temps de fabrication du produit :".$dpr['tps_fab'].'<br />'; 
 // echo "combien de vente par heure pour 1000 personnes :".$dpr['comb_vt'].'<br />'; 
 // echo "nom de la matière n°1 :".$dpr['nm_mat_pre1'].'<br />'; 
 // echo "image de la matière n°1 :".$dpr['url1'].'<br />'; 
  //echo "prix achat de la matiere n°1 :".$dpr['px_at_mp1'].'<br />'; 
 // echo "consommation de la matiere n°1 :".$dpr['cons_mp1'].'<br />'; 
 //  echo "nom de la matière n°2 :".$dpr['nm_mat_pre2'].'<br />'; 
 // echo "image de la matière n°2 :".$dpr['url2'].'<br />'; 
 // echo "prix achat de la matiere n°2 :".$dpr['px_at_mp2'].'<br />'; 
 // echo "consommation de la matiere n°2 :".$dpr['cons_mp2'].'<br />'; 
 // echo "nom de la matière n°3 :".$dpr['nm_mat_pre3'].'<br />'; 
 // echo "image de la matière n°3 :".$dpr['url3'].'<br />'; 
 // echo "prix achat de la matiere n°3 :".$dpr['px_at_mp3'].'<br />'; 
 // echo "consommation de la matiere n°3 :".$dpr['cons_mp3'].'<br />'; 
  
  
 ?> 
<!-- <a href="achat_production.php?id=<?php //echo $dpr['id'];?>">acheter</a><br /> 
 <hr color="blue">--> 
  

<?php 

} 
else 
{ 
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter 
header('location:index.php'); 
} 
?> 
</body> 
</html> 









Moi je plante et toi tu creuses !!!
Utilisateur anonyme -
Bonjour

date_event représente dans la fonction la date de l'événement. Je suppose que ce script a été écrit par un français, car en anglais on dirait plutôt event_date ^^
compte_rebours_<?php echo $i;?> : ce code est lié au problème que je te signalais, si tu voulais plusieurs comptes à rebours. Il faut créer des <div> avec des noms différents, et, comme on passe le nom du div à la fonction, il faut aussi les appeler en passant des noms différents. Ces noms différents sont obtenus en ajoutant un compteur à la fin d'un nom de base. Quand on repasse dans la boucle avec $i=0,1,2 .. on crée successivement des div avec les noms compte_rebours_0,compte_rebours_1,compte_rebours_2... et on appelle la fonction Rebour en lui passant ces noms de div. Tous ces noms de div sont différents, chaque copie de la fonction peut retrouver le sien sans se mêler les pinceaux avec ceux des autres.

Pour ton problème d'heure d'hiver / heure d'été, je n'ai pas de réponse.
Messages postés
225
Date d'inscription
samedi 25 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2013
9
0
Merci
bonjour,

merci de vos réponses
j'ai compris
comment fonctionne ce code

explication clair

problème résolu


GRAND MERCI


Utilisateur anonyme -
de rien :-)