[Tutorial JS]Autosubmit in x secunde

#1
Nume Tutorial:Autosubmit in x secunde
Descriere:Autosubmit in x secunde
Download:Nu necesita
Autor:Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere:Util.
Tutorialul:
Acest tutorial prezintă o modalitate prin care datele unui formular vor fi transmise către action-ul acestuia într-un anumit interval de timp.
Pentru început am să exemplific un posibil caz în care putem folosi codul din acest tutorial.
Presupunem că avem de făcut o pagină în care este afişată o întrebare grilă cu x variante de răspuns şi un buton "Răspunde la întrebare". Utilizatorul trebuie să răspundă la acea întrebare într-un anumit interval de timp (să zicem 10 secunde). După expirarea celor 10 secunde, browserul va face automat submit (asta în cazul în care utilizatorul nu a apăsat încă pe butonul "Răspunde la întrebare").
Pentru a realiza acestă pagină şi pentru ca aceasta să răspundă cerinţelor noastre vom folosi cod JavaScript şi PHP.

Pagina temp.php
Cod:

Cod: Selectaţi tot

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <title>Tutorial</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <script type="text/javascript" language="JavaScript">
 function data(valoare)   {
    valoare--;
    var numar_zile=Math.floor(valoare/86400);
    var secunde_ramase_pentru_ore= valoare % 86400;
    var numar_ore=Math.floor(secunde_ramase_pentru_ore /3600);
    var secunde_ramase_pentru_minute=secunde_ramase_pentru_ore % 3600;
    var numar_de_minute=Math.floor(secunde_ramase_pentru_minute/60);
    var numar_de_secunde=secunde_ramase_pentru_minute % 60;
    var unitate_zi=" zile ";
    var unitate_ora=" ore ";
    var unitate_minut=" minute ";
    var unitate_secunda=" secunde";
 
    if(numar_zile==1) {
       unitate_zi=" zi ";
    }
 
    if(numar_ore==1) {
       unitate_ora=" ora ";
    }
 
    if(numar_de_minute==1) {
       unitate_minut=" minut ";
    }
 
    if(numar_de_secunde==1) {
       unitate_secunda=" secunda";
    }
 
    window.status=numar_zile+""+unitate_zi+""+numar_ore+""+unitate_ora+""+
       numar_de_minute+""+unitate_minut+""+numar_de_secunde+""+unitate_secunda;
    if(valoare<=0) {
       document.formular.submit();
    }
    setTimeout("data("+valoare+")",1000);
 }
 </script>
 </head>
 <body <?php if(!isset($_GET['auto_submit'])) { echo 'onLoad="data(10)"'; }?> >
 <form method="get" name="formular" action="tmp.php">
 <table align="center" width="30%" cellpadding="1" cellspacing="2" border="1">
 <tr>
 <td>
 Intrebare:<br />
 Ratza impunge?
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" name="raspuns[]" value="da">Da! :D
 </td>
 </tr>
 <tr>
 <td>
 <input type="checkbox" name="raspuns[]" value="nu">Nu!
 </td>
 </tr>
 <tr>
 <td>
 <input type="hidden" name="auto_submit" value="1">
 <input type="submit" name="raspunde" value="Raspunde la intrebare">
 </td>
 </tr>
 </table>
 </form>
 </body>
 </html>
Explicaţia codului:
Cod:

Cod: Selectaţi tot

 <script type="text/javascript" language="JavaScript">
 function data(valoare) {  
    // se transmite ca parametru numarul de secunde ramase pana la submit
    valoare-- ;  
    // numarul de secunde ramas pana la autosubmit este decrementat cu o unitate
    var numar_zile=Math.floor(valoare/86400);
    // se calculeaza numarul de zile ramase
    var secunde_ramase_pentru_ore= valoare % 86400;
    var numar_ore=Math.floor(secunde_ramase_pentru_ore /3600);  
    // se calculeaza numarul de ore ramase
    var secunde_ramase_pentru_minute=secunde_ramase_pentru_ore % 3600;
    var numar_de_minute=Math.floor(secunde_ramase_pentru_minute/60);  
    // se calculeaza numarul de minute ramase
    var numar_de_secunde=secunde_ramase_pentru_minute % 60;  
    // se calculeaza numarul de secunde ramase
    var unitate_zi=" zile ";
    var unitate_ora=" ore ";
    var unitate_minut=" minute ";
    var unitate_secunda=" secunde";
 
    if(numar_zile==1) {
       unitate_zi=" zi ";
    }
 
    if(numar_ore==1) {
       unitate_ora=" ora ";
    }
 
    if(numar_de_minute==1) {
       unitate_minut=" minut ";
    }
 
    if(numar_de_secunde==1) {
       unitate_secunda=" secunda";
    }
 
    window.status=numar_zile+""+unitate_zi+""+numar_ore+""+unitate_ora+""+
       numar_de_minute+""+unitate_minut+""+numar_de_secunde+""+unitate_secunda;  
    // se afiseaza in status bar timpul ramas pana la autosubmit
    if(valoare<=0) {  
       // daca numarul de secunde ramase este mai mic sau egal cu 0 se face submit
       document.formular.submit();
    }
    setTimeout("data("+valoare+")",1000);        
    // se autoapeleaza functia data odata pe secunda &#8211; atentie 1000
    //reprezinta milisecundele (1s=1000milisecunde) A NU SE MODIFICA ACEASTA VALOARE
 }
 </script>

Cod:

Cod: Selectaţi tot

 <?php
 if(!isset($_GET['auto_submit'])){ echo 'onLoad="data(10)"'; }
 // atat timp cat nu este transmis $_GET['auto_submit'] - browserul va apela JavaScriptul.
 // 10 reprezinta numarul de secunde pana la autosubmit.
 // Puteti incerca orice alta valoare intreaga mai mare ca 0.
 //     In cazul in care parametrul functiei este mai mic sau egal cu 0,
 // odata cu incarcarea paginii se va face autosubmit.
 ?>
Folosind această metodă utilizatorul dacă va încerca să schimbe data din sistem, numerotarea inversă nu va fi afectată. Dacă utilizatorul dezactivează JavaScript, atunci se poate verifica pe partea de PHP, dacă s-a răspuns în intervalul dorit sau nu (respectiv se compară data când s-a primit cererea şi data maxim admisă când cererea ar fi trebuit să fi fost primită – în cazul în care serverul este aglomerat se poate lua în calcul şi un delay de x secunde la data maxim admisă).

Observaţie!
PENTRU UTILIZATORII FIREFOX!!! Activaţi CHANGE STATUS BAR TEXT din TOOLS -> OPTIONS -> CONTENT -> ADVANCED (cel din dreptul lui ENABLE JAVASCRIPT) -> check CHANGE STATUS BAR TEXT.
N-am cerut la nimeni niciodata,
Chiar de-a fost sa rabd, in viata mea.
Am dat totul fara nici o plata,
Nevoind nimic sa mi se dea.

@Virgil Carianopol
Vezi-ti de treaba si retine:
"E treaba ta sa spui ce vrei si sa nu conteze pentru nimeni".

@Kazi Ploae

Înapoi la “Tutoriale JS”

Cine este conectat

Utilizatori răsfoind acest forum: Niciun utilizator înregistrat și 2 vizitatori