Code javascript dans while php

Résolu
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> 




--
Moi je plante et toi tu creuses !!!

6 réponses

  1. bonjour,
    je relance mon sujet MERCI PAR AVANCE
    0
    1. 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.
      0
      1. 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 !!!
        0
        1. 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>';
          	}
          


          0
          1. 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 !!!
            0
            1. 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.
              0
          2. bonjour,

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

            explication clair

            problème résolu

            GRAND MERCI

            0
            1. de rien :-)
              0