0

いくつかの質問 (複数選択、正誤問題) を含むクイズ ページがあります。ページの送信後の結果で、次のようなものを表示したい:

Started on  Tuesday, 1 January 2013, 04:09 AM
Completed on    Tuesday, 1 January 2013, 04:10 AM
Time taken  47 secs
Grade   7 out of a maximum of 10 (65%)

上記の結果を表示するための開始時間と終了時間をカウントする方法と、ユーザーがページを読み込んでからフォームを送信するまでの時間をカウントする方法がわかりません。

私は新しいので、あなたのアドバイスが必要です。問題がphpまたはjavascriptまたはjqueryで解決された場合、問題はありません

4

4 に答える 4

2

このようなことができ、開始タイムスタンプと終了タイムスタンプがフォームと一緒に送信されます。その後、PHPを使用して計算を行うことができます。

var form = document.getElementById("form");

window.onload = function() {
    var start = document.createElement("input");
        start.type = "hidden";
        start.name = "start";
        start.value = +new Date()/1000; //unix timestamp

    form.appendChild(start);
};

form.onsubmit = function() {
    var stop = document.createElement("input");
        stop.type = "hidden";
        stop.name = "stop";
        stop.value = +new Date()/1000;

    form.appendChild(stop);
};
于 2013-01-01T19:17:51.603 に答える
1

これが私の解決策です。

1-ユーザーがクイズを開始し、時間を$_SESSIONvarに入力します

 $_SESSION['quiztime']=date("Y-m-d H:i:s");

2-ユーザーがテストを終了し、経過時間を確認します(この例は分単位であり、秒が必要な場合は60で割る必要はありません)

 $to_time = strtotime(date("Y-m-d H:i:s"));
 $from_time = strtotime($_SESSION['quiztime']);
 echo round(abs($to_time - $from_time) / 60,2). " minutes";
于 2013-01-01T19:25:31.827 に答える
1

開始した時間をCookieまたはセッションに入れ、完了したら、現在の時間からその時間を差し引くだけです。これが所要時間です。

次のようになります。

クイズページ:

session_start();
$_SESSION['startTime'] = time();
// This is where the quiz would be displayed

クイズ結果ページ:

session_start();
$totalTime = time() - $_SESSION['startTime'];
echo $totalTime;
于 2013-01-01T19:16:38.593 に答える
1

私の「防弾」ソリューションは、フォームごとに生成され、非表示フィールドに保持される一意のIDに関連付けられた(セッション内の)サーバーに開始時間を保存することです。

このようにして、ユーザーが改ざんするのを防ぎ (一意の ID を変更する可能性がありますが、その場合、フォームは無効になります)、JavaScript が有効になっているクライアントに依存しません。

<?php
$form_uuid = uniqid();
$_SESSION['quiz_start_time'][$form_uuid] = time();

次に、フォームに次のようなものを入れます。

<input type="hidden" name="form_id" value="<?php print $form_uuid; ?>">

そして、フォーム送信ハンドラーで:

<?php
$form_uuid = $_POST['form_id'];
if (!isset($_SESSION['quiz_start_time'][$form_uuid])) {
    // The user is trying to do something nasty (or the session just expired)
    // Return something like a 400 error
}
else {
    $start_time = $_SESSION['quiz_start_time'][$form_uuid];
    // Do other form processing here..
}
于 2013-01-01T19:32:48.807 に答える