在页面加载和页面刷新之间获得时间 - 我有负面时间?

时间:2014-06-07 05:57:36

标签: javascript php html forms time

我试图制作一款游戏"在我的本地浏览器上排序。想法是向玩家呈现数字或单词,然后玩家将输入相关联的单词(如果呈现的是数字)或数字(如果呈现的是单词)。我已经足够轻松地完成了这项工作,并且我使用数据库来访问这些单词。

现在我要做的是衡量玩家为每个问题输入答案所花费的时间(不是每个游戏都有 - 我可以将所有问题时间总和得到),然后插入值进入数据库。

我已经运行了一个脚本,但是测量的时间显示了一个负值。这是脚本(底部的解释)

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

回声是消极的。

想法为什么

我有两个想法,两个似乎都错了:

  1. 也许我会在结束时减去这个问题的开始时间 上一个问题的时间。这是有道理的,因为我存储 页面加载会话中当前问题的时间,然后 从表单中的提交时间中减去它。

    在这种情况下,这必须是我得到的页面加载时间。页面加载 当前问题的时间减去前一页的提交时间 问题 - 只在该间隔内发生页面刷新。

    但我知道我错了,因为当我点击提交按钮时, 答案的大小取决于我点击的时间 提交。因此,如果我花时间,答案可能会消极 成千上万,如果我尽快点击,它就会停留 在负数百到两百。

    它不能是页面刷新时间。

  2. 所以想法2是这可能是我想要的实际值,即页面 提交减去页面加载。但那么,为什么它是否定的?否定的 标志似乎告诉我,我正在反过来......但我有 没有想法。

  3. 此脚本中发生了什么?

0 个答案:

没有答案