Empecher rafraichissement chronomètre dans quiz

Résolu
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 - 30 juil. 2018 à 12:48
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 - 30 juil. 2018 à 14:46
Bonjour,
j'ai fait une page pour un quiz avec un chronomètre pour calculer le temps
le problème si actualisation du navigateur le chrono repart zéro

J'ai pense à mettre $_SESSION['depart'] avec microtime
et en cas de actualisation de la page avec navigateur recupérer $_SESSION['depart']
je ne sais pas si ca serait fiable mais rien d'autre me vient à l'esprit

un CS aurait la solution en java ou PHP

alert(beau temps belle mer')
Jorgio

<?php
   session_start();
   $seconde = 0;$minute = 0;$heure = 0;     
?>
<body onLoad="clock()" onKeyDown="disableF5(event)">
   <form name='clock' onSubmit='0'><input type='text' id='date' name='date' readonly='true'></form>
   <form name=quizz action=# method=POST enctype='multipart/form-data'>
      <input name='R1' type='radio' value="1">response 1</div><br>
      <input name='R1' type='radio' value="1">response 2</div>
   </form>
   <span onclick='_valider()'>Valider</span>
   
   <script>
    bcle = 0;
    function clock() {
        if (bcle == 0) {
            heure = <?php echo $heure ?>;
            min   = <?php echo $minute ?>;
            sec   = <?php echo $seconde ?>;
        } else {
            sec++;
            if (sec == 60) {
                sec = 0;
                min++;
                if (min == 60) {
                    min = 0;
                    heure++;
                };
            };
        };
        txt = "";
        if (heure < 10) {txt += "0";}
        txt += heure + ":";
        if (min < 10) {txt += "0"}
        txt += min + ":";
        if (sec < 10) {txt += "0"}
        txt += sec;
        timer = setTimeout("clock()", 16.5);
        bcle++;
        document.clock.date.value = txt;
    }
                      
    function disableF5(e) {
          if ((e.which || e.keyCode) === 116 || (e.which || e.keyCode) === 82) {
              debugger;
              e.preventDefault();
          }
      }
    $(document).ready(function() {
        $(document).on("keydown", disableF5);
    });
        
    function _valider(){
         var x = document.getElementById("date").value;
         document.forms['quizz'].action = 'pagevalider?temps='+x;document.forms['quizz'].submit();return true;
    }
    
    </script>
</body>


--

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
30 juil. 2018 à 14:35
Bonjour,

Oui, la session sera sûrement le plus simple

Un truc du genre :
session_start();
if(empty($_SESSION['start'])){
  $heure = date('H');
  $minute = date('i');
  $seconde = date('s');
  $_SESSION['start'] = array('H'=>$heure, 'M'=>$minute , 'S'=>$seconde );
}else{
  $heure = $_SESSION['start']['H'];
  $minute = $_SESSION['start']['M'];
  $seconde =$_SESSION['start']['S'];
}


Bien entendu.. si l'utilisateur ferme son navigateur complètement... tu risques de perdre la session.
Le mieux alors serait de stocker les données dans une BDD (en te servant de l'IP de l'utilisateur pour l'identifier éventuellement ).
Mais le principe reste le même.
A toi de voir;


1
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
30 juil. 2018 à 14:46
Slt Jordane
Je vais travailler sur la $_SESSION
Pour ce qui est de stocker pas la peine car une fois le quiz lance il ne peut pas le refaire une deuxième fois il est prévenu sur la première page.
Merci a toi
Jorgio
0
Rejoignez-nous