如何在测试评估期间保护秒表?

时间:2011-09-09 10:41:24

标签: php oop pdo stopwatch

我想知道如何设置秒表并防止他做出欺骗行为。 我打算用

  • date()
  • $_SERVER['DATE_GMT']
  • $_SERVER['DATE_LOCAL']

但我不知道这是不是一个好方法,如果我处于良好状态。

当时间结束时,必须对测试评估进行修改(结束测试),并且我想检查$end_test = $end_planned$start_test + 60min

1 个答案:

答案 0 :(得分:2)

您可以将他们开始的时间存储在数据库或外部文件中。然后,当他们重新加载测试时,您需要获得他们开始测试的时间,当前时间,并计算他们是否还有时间。

当他们提交测试时,你会检查同样的事情。

您必须为学生提供唯一的PIN才能使用,因此在您存储时,可以再次查找。

这样的事情可能有用。

当他们加载页面时,请询问他们的唯一PIN:

$test_duration = 30; // minutes
$test_duration *= 60; // turning into sections for later use

// check if results from a PIN lookup are empty
if($pin_from_db == "") { // there no pin in the database. Student didn't start yet
   $sql = "INSERT INTO example_student_table(student_id, start_time) VALUES ($student_id, " . date('U') . ")";
   $start = date('U');
} else { // there was a PIN in the Database
   $start = (int)$time_from_db;
}

// check if they still have time left
if($start < (date('U') + $start)) {
   // let them do the test
} else {
   // dont let them continue the test
}

您的表单看起来像这样

<form action="processor.php" method="post">
   // what ever other questions you need answered put here
   <input type="hidden" name="end_time" value="<?php echo $start + $test_duration" />
</form>

然后,当他们提交页面时,您的'processor.php'可以检查他们是否在规定的时间内完成了

if(isset($_POST)) {
   $allotment = $_POST['end_time'];
   $now       = date('U');
   if($now <= $allotment) {
      // they finished in time
   } else {
      // they didn't finish in time
   }
}