2017-02-16 5 views
0

Ich versuche, den Zeitraum zu messen, von einem Benutzer ein PHP-Formular sendet, wenn sie erneut einreichen. Die Aktion des Formulars ist dieselbe Seite, also ist es nur eine Aktualisierung. Darüber hinaus kann der Benutzer dieselben Daten erneut eingeben. Ich brauche es, damit es beginnt zu zählen, bevor die Seite aktualisiert wird, da das Ergebnis so genau wie möglich sein muss. Ich habe bereits eine Reihe von Methoden ausprobiert, von denen jedoch noch keine Erfolge erzielt wurden. Ich habe den folgenden Code vereinfacht:Messung der Zeit zwischen zwei PHP-Formularübergaben

HTML-Formular

<form method="GET" action="index.php"> 
<input id="motion_image" type="image" value="1" name="x" src="img/btn1.png"> 
<input id="motion_image" type="image" value="2" name="x" src="img/btn2.png"> 
</form> 

Letztlich, ich brauche ein PHP oder JavaScript-Variablen haben, wie lange ein Benutzer nahm drücken entweder eine dieser beiden Tasten, wenn sie drücken wieder einen von ihnen. Es ist wichtig, dass der Zähler vor der Aktualisierung beginnt, da die Variable so genau wie möglich sein muss. Außerdem muss es reaktionsfähig sein, so dass es nach etwa 5 Sekunden ein Ereignis auslöst (z. B. eine JavaScript-Warnung). Ich hielt es nicht für notwendig, meine früheren Versuche einzubeziehen, da sie alle erfolglos waren und ich glaube, dass es wahrscheinlich einen besseren Weg gibt. Ich habe vollen Zugriff auf den Server, auf dem die Site gehostet wird, so dass ein Python-Subskript ausgeführt werden kann und Variablen mit JSON oder ähnlichen Lösungen ausgetauscht werden können.

Apologies für Fehler und mein allgemeiner Mangel an Stack-Überlauf Fähigkeiten :)

Dank

+0

Haben Sie Zugriff auf eine Datenbank haben, weil Sie jeder einreichen in der Datenbank speichern können und vergleichen Sie. Sie können auch die Html 5 localStorage (https://www.w3schools.com/html/html5_webstorage) verwenden.asp), um jedes Mal zu speichern, wenn Sie Ihr Formular abschicken und jedes Senden vergleichen. – Nicolas

+0

Sie möchten Einreichungen einzelner Benutzer oder mehrerer Benutzer von verschiedenen Standorten und Maschinen verfälschen? –

+0

@ NicolòCozzani nur ein einziger Benutzer Darüber hinaus habe ich Zugriff auf MySQL aber eine solche Methode wäre sehr ungenau, wenn Sie versuchen, ein reaktionsfähiges Ergebnis zu haben. Die einzige Möglichkeit, die ich erreichen könnte, wäre eine Schleife von DB-Abfragen, die die Website effektiv einfrieren würde. –

Antwort

0

Nachdem ich die Verwendung von localStorage mit JS untersucht habe, konnte ich eine genaue Lösung finden. Ich habe meinen Code für andere vereinfacht, die möglicherweise mit dem gleichen oder einem ähnlichen Problem konfrontiert sind. Vielen Dank für alle, die geholfen :)

HTML

<form method="GET" action="index.php"> 
<input id="motion_image" type="image" value="1" name="x" src="img/btn1.png" onclick="return processInput(1)"> 
<input id="motion_image" type="image" value="2" name="x" src="img/btn2.png" onclick="return processInput(2)"> 
<input id="motion_image" type="image" value="3" name="x" src="img/btn2.png" onclick="return processInput(3)"> 
</form> 

JavaScript

function processInput(x) { 
    localStorage.eventType = x; 
    checkEventType(); 
} 

function checkEventType() { 
    if (Number(localStorage.eventType) == 1) { 
     runningInterval = setInterval(function() { 
      localStorage.counter = Number(localStorage.counter) + 1; 
     }, 10); 
    } else if (Number(localStorage.eventType) == 2) { 
     runningInterval = setInterval(function() { 
      localStorage.counter = Number(localStorage.counter) - 1; 
     }, 10); 
    } else if (Number(localStorage.eventType) == 3) { 
     window.alert("Your counter is at " + localStorage.counter); 
    } 
} 
0

Warum nicht das Datum einreichen für jede Form erhalten? dann diese Daten vergleichen? Sie können es auch in Ihrer Datenbank speichern. Ich hoffe, Sie bekommen eine Idee. (Sorry, ich habe dies in den Kommentar, aber ich kann immer noch nicht)

+0

Ja, ich habe das früher erfolgreich versucht aber der Zähler muss reagieren, so sagen, dass es 5 Sekunden erreicht löst ein Ereignis - sorry ich werde meine Frage jetzt aktualisieren –

+0

Ich verstehe nicht wirklich Ihre Frage, aber soweit So wie ich es verstehe, möchten Sie vielleicht: 1. Zeit der ersten Benutzerformular einreichen. 2. Holen Sie sich Zeit für den 2. Antrag des Benutzers. 3. 5 Sekunden warten, dann etwas wie Alarm machen? Sie können setTimeout-Methode verwenden https://www.w3schools.com/jsref/met_win_settimeout.asp –

+0

Sorry, ich werde versuchen, meinen Code in einen besseren Kontext zu setzen - ich versuche, die Zeit zu messen, die ein Motor läuft, um es zu verfolgen Lage. Ich kann nicht einfach eine Funktion nach 5 "Entfernungseinheiten" (zum Beispiel Sekunden) auslösen, da es aufgrund der Art des Projekts an einem bestimmten Punkt eine negative 1 "Einheit" hätte und das Ereignis also bei 4 auslösen würde nicht was ich will –

0

, wenn Sie können Benutzer-Systemzeit vertrauen:

, wenn der Benutzer klickt auf die Schaltfläche die Systemzeit mit Javascript des Benutzers erhalten und senden zum Server;

am Server speichern Sie die Zeit irgendwo ... wie Sitzung oder db;

wenn der Benutzer zum zweiten Mal auf die Schaltfläche geklickt hat -> wiederholen Sie diese Schritte;

und nach all dem können Sie diese Zeiten miteinander vergleichen; Auch

//

mit js Sie jede Periode Mal verbringen die auf Seite, dass die Benutzer senden können. dafür, wann immer geladene Seite die Systemzeit in irgendeiner Variable einstellt, und wenn Benutzer die Knöpfe anklickt, erhält die Zeit wieder und sendet beide zum Bediener, um die genaue Ausgabenzeit zu erhalten;

+0

Danke aber der Timer muss reagieren und in Echtzeit aktualisiert werden. Ich glaube, Nicolas 'Empfehlung, Socket-Technologien zu verwenden, ist am relevantesten, aber wenn du dir bessere Alternativen vorstellen kannst, wären sie sehr dankbar :) –