Pobleme Compte à rebours javascript dans boucle PHP

Signaler
Messages postés
29
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
19 mars 2010
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour,

J'ai énormement de mal à créer un compte à rebours javascript intégré dans une boucle PHP. Voici mon code PHP avec
une table produit qui a comme champs id_produit, heure_fin (en seconde):
<?php
$sql="SELECT * FROM produit LIMIT 0,5";
$result=mysql_query($sql);
while $n=mysql_fetch_object($result) { #dans cette boucle le probleme
echo '
id_produit.'">
'; ?>

<script language="javascript">
[code=js]
duree="<?php print ($n->heure_fin-time()); ?>";
t('<?php print $n->id_produit; ?>');

</script>
}
?>
/code

A coté de ça, j'ai un fonction javascript nommée t(id) qui permet de faire le compte à rebours :
function t(id)
                {
            var compteur=document.getElementById('compteur_'+id);
            s=duree;
            m=0;h=0;j=0;
            if(s<0) {
            	compteur.innerHTML="Vendu"
            }
            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(j>0) {
                	compteur.innerHTML=j+"j "+h+"h "+m+"m "+s+"s";
} 
else {
if(h>0) {
                		compteur.innerHTML=h+"h "+m+"m "+s+"s";
}
else {
compteur.innerHTML=m+"m "+s+"s";
}
}
            }
            duree=duree-1;
            setTimeout(function() {t(id);},1000);

        }

Quand je n'affiche qu'un seul produit, le compte à rebours décrément bien d'une seconde toutes les secondes et me l'affiche dans la div donc l'id correspond au produit.
Par contre, quand j'affiche 2 produits, dans chaque div un compte à rebours apparait mais correspond au temps restant du dernier produit de la boucle WHILE, et chaque compte à rebours décrémente de 2 secondes toutes les secondes.
Idem si 3 produits affichés, 3 comptes à rebours affichée mais le temps affiché est toujours celui du dernier produit et il décrément de 3 secondes.

Merci pour toute aide qui pourrait me sortir de l'un ou l'autre des problemes.

1 réponse

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
Bonjour,
__ déjà si on avait la page html résultante et
pas le php ( comment on devine le contenu
de la base de données ? le contenu des
$variables ? ... ), si irait mieux
__ ensuite, vous utilisez une seule variable "duree"
pour tous les produits, c'est donc normal, qu
ce ne soit que le "dernier" qui s'affiche
__ enfin un setTimeout ( comme avec tous les autres
langages ) n'est pas un modèle de très haute
précision ( douc euphémisme )
sur quelques secondes ce n'est pas très
grave mais au bout de quelques temps, un certain
décalage ( voire un décalage certain ) va apparaître.
il faut refaire le calcul avec "l'heure actuelle"
et pas en décrémentant des compteurs

Cordialement [mon Site] [M'écrire] Bul