Probleme construction boucle WHILE

Syl20 -  
 Syl20 -
Bonjour à tous.

J'ai un probleme dans la mise en place d'une boucle while.

J'ai ce script de compte à rebours qui depend d'une date de debut et date de fin de questions enregistrés dans une base sql. J'ai 52 questions.

require ("connectdb.php");
$id=1;
while($id < 53)//boucle pour passer à la question suivante jusqu'à la 53
{
$datedebut="SELECT date_deb,date_fin FROM parties WHERE id=$id";// selection des 2 dates pour la question 1
$date=mysql_query($datedebut)
or die('Erreur SQL !'.$date.'
'.mysql_error());
$datefetch=mysql_fetch_array($date);
$datedeb=$datefetch['date_deb'];
$datefin=$datefetch['date_fin'];
$datedebtime=strtotime($datedeb);//Conversion timestamp date_deb
$datefintime=strtotime($datefin);//conversion timestamps date_fin
$datediff=$datefintime-$datedebtime;//Différence entre les deux dates
$nbSecondes= $datediff -(mktime($datefin) % $datediff);
echo "Id question : $id<br>";
echo "Compte à rebours : $nbSecondes<br>";//c'est ce qui est récupéré par le javascript...
echo "Date debut : $datedeb<br/>";
echo "Date fin :$datefin<br/>";
echo "Timestamp deb :$datedebtime<br/>";
echo "Timestamp Date fin :$datefintime<br/>";
echo "Difference : $datediff<br/>";
$id++;
}

Il m'affiche :

Id question : 1
Compte à rebours : 118
Date debut : 2007-09-06 18:24:53
Date fin :2007-09-06 18:26:53
Timestamp deb :1189095893
Timestamp Date fin :1189096013
Difference : 120

Id question : 2
Compte à rebours : 58
Date debut : 2007-09-06 18:25:53
Date fin :2007-09-06 18:26:53
Timestamp deb :1189095953
Timestamp Date fin :1189096013
Difference : 60

Id question : 3
Compte à rebours : 58
Date debut : 2007-09-06 18:26:53
Date fin :2007-09-06 18:27:53
Timestamp deb :1189096013
Timestamp Date fin :1189096073
Difference : 60

Etc, etc, puisqu'il affiche les 52.

Ce que je souhaite, c'est n'afficher que le compte à rebours de l'ID question 1. Une fois que celui-ci est à 0, passer à l'affichage de l'ID question 2, etc, etc...

Merci d'avance.
Configuration: Windows Vista
Firefox 2.0.0.6

8 réponses

  1. pitxu Messages postés 708 Statut Membre 95
     
    Je ne suis pas sur, mais essaie :

    require ("connectdb.php");
    $id=1;
    while($id < 53)//boucle pour passer à la question suivante jusqu'à la 53
    {
    $datedebut="SELECT date_deb,date_fin FROM parties WHERE id=$id";// selection des 2 dates pour la question 1
    $date=mysql_query($datedebut)
    or die('Erreur SQL !'.$date.'
    '.mysql_error());
    $datefetch=mysql_fetch_array($date);
    $datedeb=$datefetch['date_deb'];
    $datefin=$datefetch['date_fin'];
    $datedebtime=strtotime($datedeb);//Conversion timestamp date_deb
    $datefintime=strtotime($datefin);//conversion timestamps date_fin
    $datediff=$datefintime-$datedebtime;//Différence entre les deux dates
    $nbSecondes= $datediff -(mktime($datefin) % $datediff);
    echo "Id question : $id<br>";
    echo "Compte à rebours : $nbSecondes<br>";//c'est ce qui est récupéré par le javascript...
    echo "Date debut : $datedeb<br/>";
    echo "Date fin :$datefin<br/>";
    echo "Timestamp deb :$datedebtime<br/>";
    echo "Timestamp Date fin :$datefintime<br/>";
    echo "Difference : $datediff<br/>";
    if ($nbSecondes=0) { $id++; }
    }
    0
  2. Syl20
     
    Merci de t'occuper de cela...

    J'avais essayé cette condition, mais cela semble boucler à l'infini...
    0
  3. pitxu Messages postés 708 Statut Membre 95
     
    Je suis d'accord. Je pense qu'il faut passer par une fonction javascript qui détecte que $nbSecondes=0.
    0
  4. Syl20
     
    Tu aurias une idée de comment cela se fait en JS?

    Cela me semble pourtant bizarre que je ne puisse pas le gerer en php...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pitxu Messages postés 708 Statut Membre 95
     
    Publie la routine js pour le compte à rebours, je vais regarder.
    0
  7. Syl20
     
    Voila :

    <script language=javascript>

    var x;

    function tempsSession()
    {
    var xhr_object = null;

    if(window.XMLHttpRequest) // Firefox
    xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
    xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    return;
    }

    var method = "GET";
    var filename = "renvoyeTempsRestantSession.php";

    var data = null;

    xhr_object.open(method, filename, true);

    xhr_object.onreadystatechange = function() {
    if(xhr_object.readyState == 4) {
    var tmp = xhr_object.responseText;
    document.form1.tempsRestantInitial.value = tmp;
    document.form1.tempsRestant.value = tmp;
    }
    }
    xhr_object.send(data);
    }

    function Decompte() {
    //((document.form1.tempsRestant.value > 0)) ? (window.document.form1.tempsRestant.value = --valeur) : (window.clearInterval(x));
    window.document.form1.tempsRestant.value--;
    if (window.document.form1.tempsRestant.value == 0) {
    window.clearInterval(x);
    window.document.form1.submit.disabled = false;
    window.document.getElementById("reponse").style.visibility="visible";

    }
    //function Decompte() {
    //window.document.form1.tempsRestant.value = parseInt(document.form1.tempsRestant.value)--;
    //if (window.document.form1.tempsRestant.value == 0) {
    //window.clearInterval(x);
    //window.document.form1.submit.disabled = false;
    //window.document.getElementById("reponse").style.visibility="visible";
    //}
    }

    function init() {
    x = window.setInterval('Decompte()', 1000);
    }

    function initCompteur()
    {
    tempsSession();
    init();

    }

    </script>

    le champs temps.restant.initial n'est pas utilisé.

    dans mon champs du form1, c'est tempsrestant...

    Merci
    0
  8. pitxu Messages postés 708 Statut Membre 95
     
    Apparement c'est faisable avec une imbrication de while. je cherche ...
    0
  9. Syl20
     
    C'est sympa...

    Je me permets également, puisque tu es dans le js, de te demander autre chose.

    Pour l'instant l'affichage de mon compteur dans le script php se fait avec uniquement les secondes.

    Le but, parce que je suis en train de modifier ce php, c'est un affichage de type date('i:s', $nbSecondes) du compte à rebours, pour avoir par exemple :

    00:36

    Bon, ça je sais faire.

    Mais le pb se situe au niveau du JS. Lui, il n'accepte pas les ":". Car il traite une valeur numérique et que le : lui pose probleme. D'ailleurs, il m'affiche Nan (Not a number).
    De la même façon, et lorsque j'enlèbe les :, il affiche 0036 sur la première seconde d'affichage et revient ensuite à 36. Il ne semble pas prendre les 0 des minutes, et ni le 0 si secondes <10.

    Je pense que le problème vient de la définition de la value dans la fonction Decompte :

    function Decompte() {
    window.document.form1.tempsRestant.value--;
    if (window.document.form1.tempsRestant.value == 0) {
    window.clearInterval(x);
    window.document.form1.submit.disabled = false;
    window.document.getElementById("reponse").style.visibility="visible";

    Mais je sèche... Si tu as une idée...
    0