2017-02-16 3 views
0

Я пытаюсь измерить период времени, с которого пользователь отправляет форму PHP, когда они снова отправляются. Действие формы является одной и той же страницей, так что это просто обновление. Более того, пользователь может снова ввести те же данные. Мне нужно, чтобы он начинал считать до того, как страница обновится, поскольку результат должен быть максимально точным. Я уже пробовал несколько методов, но ни один из них не привел к каким-либо успехам. Я упростил следующий код:измерение времени между двумя представлениями формы PHP

HTML Form

<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> 

В конце концов, мне нужно иметь PHP или переменную JavaScript, сколько времени потребовалось пользователю нажать либо один из этих двух кнопок, когда они снова нажимают на одну из них. Важно, чтобы счетчик начинался до обновления, поскольку переменная должна быть как можно более точной. Кроме того, он должен реагировать так, чтобы после 5 секунд он запускал событие (например, предупреждение JavaScript). Я не чувствовал необходимости включать мои предыдущие попытки, поскольку все они были безуспешными, и я считаю, что, вероятно, лучший способ. У меня есть полный доступ к серверу, на котором размещается сайт, так что запуск подценария python и обмен переменных с использованием JSON или любых других подобных решений вполне возможны.

Извиняюсь за любые ошибки, и мое общее отсутствие стека навыков переполнения :)

Благодаря

+0

У вас есть доступ к базе данных, потому что вы можете сохранить каждый представить в базе данных и сравнить их. Вы также можете использовать локальную хранилище Html 5 (https://www.w3schools.com/html/html5_webstorage.asp), чтобы хранить каждый раз, когда вы отправляете свою форму и сравниваете каждую отправку. – Nicolas

+0

вы хотите получать сообщения одного пользователя или нескольких пользователей из разных мест и машин? –

+0

@ NicolòCozzani просто один пользователь. Кроме того, у меня есть доступ к MySQL, но такой метод будет очень неточным при попытке получить отзывчивый результат. Единственный способ, которым я могу добиться этого, - это цикл запросов к БД, который бы фактически заморозил сайт. –

ответ

0

Изучив использование localStorage с JS, я смог найти точное решение. Я упростил свой код для других, которые могут столкнуться с тем же или подобным вопросом. Спасибо всем тем, кто помог :)

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

Почему бы не дата для каждой отправки формы? то сравнить эти даты? Вы также можете сохранить его в своей базе данных. Надеюсь, вы поняли. (Извините, я должен поставить это в комментарии, но я до сих пор не могу)

+0

Да, я пробовал это раньше, но счетчик должен быть отзывчивым, чтобы сказать, что он достигает 5 секунд, это вызывает событие - извините, я сейчас обновлю свой вопрос. –

+0

Я действительно не совсем понимаю ваш вопрос, но, насколько это возможно как я понимаю, вы можете: 1. получить время первой формы пользователя. 2. получить время второго пользователя. 3. Подождите 5 секунд, затем сделайте что-нибудь вроде предупреждения? вы можете использовать метод setTimeout https://www.w3schools.com/jsref/met_win_settimeout.asp –

+0

Извините, я постараюсь перевести мой код в более удобный контекст - я пытаюсь измерить время работы двигателя, чтобы отслеживать его место нахождения. Я не могу просто вызвать функцию после 5 «единиц расстояния» (например, секунд), поскольку из-за характера проекта в какой-то момент он может быть отрицательным 1 "единицей", и поэтому событие будет вызывать на 4, что не то, что я хочу –

0

, если вы можете доверять системное время пользователя:

, когда пользователь нажимает на кнопку получить системное время пользователя с яваскрипт и отправить его сервер;

на сервере сэкономить время где-нибудь ... например session или db;

, когда пользователь дважды нажал на кнопку -> повторите эти шаги;

и в конце концов вы можете сравнить эти моменты вместе;

//

с JS вы можете отправить каждый период времени, что пользователь тратить на странице тоже. , поскольку при каждой загрузке страницы задается системное время в некоторой переменной, и когда пользователь нажимает кнопки, они снова получают время и отправляют на сервер, чтобы получить точное время;

+0

Спасибо, но таймер должен быть отзывчивым и обновляться в режиме реального времени. Я считаю, что рекомендация Николаса использовать технологии сокетов наиболее актуальна, но если вы можете подумать о каких-то лучших альтернативах, они будут очень благодарны :) –

Смежные вопросы