我试图制作一款游戏"在我的本地浏览器上排序。想法是向玩家呈现数字或单词,然后玩家将输入相关联的单词(如果呈现的是数字)或数字(如果呈现的是单词)。我已经足够轻松地完成了这项工作,并且我使用数据库来访问这些单词。
现在我要做的是衡量玩家为每个问题输入答案所花费的时间(不是每个游戏都有 - 我可以将所有问题时间总和得到),然后插入值进入数据库。
我已经运行了一个脚本,但是测量的时间显示了一个负值。这是脚本(底部的解释)
<?php
try{
$handler = new PDO('mysql:host=127.0.0.1;dbname=databasename', 'username', 'password');
$form_uuid = uniqid();
$_SESSION['Qtime'][$form_uuid] = round(microtime(true) * 1000);
} catch(PDOException $e) {
die($e->getMessage());
}
##########################################################
##################### GAME MODULE ########################
#error_reporting(0);
$id = mt_rand(0,99);
$rev = mt_rand(0,5); //reverse, so 0 asks for id and 1 asks for peg
$random = $handler->query('SELECT * FROM major WHERE id='.$id);
if($rev < 3){
$question = $random->fetch(PDO::FETCH_ASSOC)['peg'];
} else {
$question = $random->fetch(PDO::FETCH_ASSOC)['id'];
}
#echo '<pre>', print_r($handler->query('SELECT * FROM major WHERE id='.$id)->fetch(PDO::FETCH_ASSOC)), '</pre>';
echo '<pre>', print_r($_POST), '</pre>';
#echo $rev;
echo '<h1>';
if(!empty($_POST)){
echo 'Next: ';
}
echo $question, '</h1>';
$P_rev = $_POST['rev'];
if($P_rev < 3){
$sql = "SELECT * FROM major WHERE id='".$_POST['guess']."' AND peg='".$_POST['Q']."'";
} else {
$sql = "SELECT * FROM major WHERE id='".$_POST['Q']."' AND peg='".$_POST['guess']."'";
}
#echo $sql;
$check = $handler->query($sql)->fetch();
if($check){
echo '<h2>Correct!</h2>';
} else {
if(!empty($_POST)){
echo '<h2>Wrong</h2>';
}
}
?>
<form action="flashcards.php" method="post">
<input type="text" name="guess" id="guess" /><br/>
<input type="submit" value="Go" id="submit" />
<input type="hidden" name="Q" value="<?php echo $question; ?>" />
<input type="hidden" name="rev" value="<?php echo $rev; ?>" />
<input type="hidden" name="form_id" value="<?php print $form_uuid; ?>">
<input type="hidden" name="end_time" value="<?php echo round(microtime(true) * 1000) ?>">
</form>
<?php
#echo '<pre>', print_r($_POST), '</pre>';
echo '<pre>', print_r($_SESSION), '</pre>';
#echo $form_uuid, '<br/>';
$form_uuid = $_POST['form_id'];
#echo $form_uuid;
#echo '<pre>', print_r($_SESSION), '</pre>';
$key = key($_SESSION['Qtime']);
$start_time = $_SESSION['Qtime'][$key];
// Do other form processing here..
$end_time = $_POST['end_time'];
echo $end_time - $start_time;
?>
我在那里有很多回声用于调试目的。无论如何:
我所做的是使用
获取会话时间 $form_uuid = uniqid();
$_SESSION['Qtime'][$form_uuid] = round(microtime(true) * 1000);
唯一ID允许我区分此问题和上一个问题。那么,这应该给我在页面刷新开始时的时间。
到目前为止一切顺利。但是当我尝试记录结束时间时,问题出现了。我把它放在我的表格中记录下来:
<input type="hidden" name="end_time" value="<?php echo round(microtime(true) * 1000) ?>">
我的印象是,这应该是给我提交表单的时间,对吧?这意味着它可以衡量页面提交时间。但是当我得到不同之处时:
$key = key($_SESSION['Qtime']);
$start_time = $_SESSION['Qtime'][$key];
// Do other form processing here..
$end_time = $_POST['end_time'];
echo $end_time - $start_time;
回声是消极的。
我有两个想法,两个似乎都错了:
也许我会在结束时减去这个问题的开始时间 上一个问题的时间。这是有道理的,因为我存储 页面加载会话中当前问题的时间,然后 从表单中的提交时间中减去它。
在这种情况下,这必须是我得到的页面加载时间。页面加载 当前问题的时间减去前一页的提交时间 问题 - 只在该间隔内发生页面刷新。
但我知道我错了,因为当我点击提交按钮时, 答案的大小取决于我点击的时间 提交。因此,如果我花时间,答案可能会消极 成千上万,如果我尽快点击,它就会停留 在负数百到两百。
它不能是页面刷新时间。
所以想法2是这可能是我想要的实际值,即页面 提交减去页面加载。但那么,为什么它是否定的?否定的 标志似乎告诉我,我正在反过来......但我有 没有想法。
此脚本中发生了什么?