Javascript Секундомер в базу данных MySQL - PullRequest
1 голос
/ 19 апреля 2011

Итак, мне нужно иметь время начала и окончания на HTML-странице, которую я создаю.Это так, что техник может запустить часы, как только он начнет работу, и когда он заканчивает этот день, он нажимает на остановку и вычисляется общее истекшее время.Теперь я нашел кучу кода, который сделает это, но мне нужно сделать еще один шаг вперед.Мне нужно получить истекшее время и отправить его через мой PHP-файл, чтобы оно было сохранено в таблице, созданной в нашей базе данных MySQL.

<script type="text/javascript">
var duration = 0;

// Javascript to compute elapsed time between "Start" and "Finish" button clicks
function timestamp_class(this_current_time, this_start_time, this_end_time, this_time_difference) { 
        this.this_current_time = this_current_time;
        this.this_start_time = this_start_time;
        this.this_end_time = this_end_time;
        this.this_time_difference = this_time_difference;
        this.GetCurrentTime = GetCurrentTime;
        this.StartTiming = StartTiming;
        this.EndTiming = EndTiming;
    }

    //Get current time from date timestamp
    function GetCurrentTime() {
    var my_current_timestamp;
        my_current_timestamp = new Date();              //stamp current date & time
        return my_current_timestamp.getTime();
        }

    //Stamp current time as start time and reset display textbox
    function StartTiming() {
        this.this_start_time = GetCurrentTime();        //stamp current time
        document.TimeDisplayForm.TimeDisplayBox.value = 0;      //init textbox display to zero
        }

    //Stamp current time as stop time, compute elapsed time difference and display in textbox
    function EndTiming() {
        this.this_end_time = GetCurrentTime();          //stamp current time
        this.this_time_difference = (this.this_end_time - this.this_start_time) / 1000; //compute elapsed time
        document.TimeDisplayForm.TimeDisplayBox.value = this.this_time_difference;      //set elapsed time in display box
        }

var time_object = new timestamp_class(0, 0, 0, 0);  //create new time object and initialize it

//-->

function assignDuration()
{
   document.stopform.duration.value = duration;
}
</script>

    <form>
        <input type="button" value="Start" onClick="time_object.StartTiming()"; name="StartButton">
    </form>
    <form>
        <input type="button" value="Finish" onClick="time_object.EndTiming()"; name="EndButton">
    </form>

<form name="stopform" action="process-form.php" method="POST">
   <input type="hidden" name="duration" value="0"/>
   <input type="submit" name="dostop" onClick="assignDuration()" value="Stop"/>
</form>

Спасибо заранее!

1 Ответ

1 голос
/ 19 апреля 2011

Пока вы полагаетесь на то, что JavaScript включен, вы можете создать скрытый элемент формы и назначить ему рассчитанную продолжительность, когда пользователь нажимает «Стоп».Само по себе это должна быть кнопка отправки.

Так что ваш Javascript будет выглядеть примерно так:

<script type="text/javascript">
var duration = 0;
...YOUR TIME CALCULATION CODE...

function assignDuration()
{
   document.stopform.duration.value = duration;
}

</script>

И ваш HTML также будет иметь:

<form name="stopform" action="process-stop.php" method="POST">
   <input type="hidden" name="duration" value="0"/>
   <input type="submit" name="dostop" onClick="assignDuration()" value="Stop"/>
</form>

Вы будететакже нужен файл PHP, который обрабатывает значение длительности:

$duration = $_POST['duration'];
mysql_query('INSERT INTO MyTable (duration, technician) VALUES ('.$duration.', '.$technicianId.')');

Приведенный выше код предполагает, что у вас уже есть средства для идентификации пользователя.

Для записи я согласен с предыдущим комментарием озапись времени начала и окончания на сервере, а затем вычисление продолжительности там.Проблема с выполнением этого на стороне клиента - как уже было сказано - заключается в том, что пользователь способен изменять данные либо путем манипулирования кодом JavaScript, либо даже просто системным временем и датой.Также, если JavaScript не включен, то ни одна из функций таймера не будет работать вообще.

Если вы уверены, что JavaScript всегда будет включен и что пользователь не будет манипулировать им, тогда решение, как указано выше (иличто-то очень похожее) должно работать.

PS Возможно, вам придется перепроверить синтаксис для JavaScript и PHP, так как я только что набрал его на макушке и не видел его в редакторе кода.

...