0

オンライン テストを実行するための php スクリプトがあります。テストを受けている間、ポストメソッドを使用してアクションページで回答を取得しています。回答は、質問IDと選択されたオプション値(trueまたはfalse /候補者がそのように入力した回答)を含む配列として渡されます。候補者によってマークされた回答をデータベースに挿入します。コードは次のとおりです。

$student_id=$_POST['name'];
$survey_id=$_POST['survey_id'];

$store = array();
    if (isset($_POST['question_id'])) {
        foreach ($_POST['question_id'] as $key => $option) {

            $option1 = array_filter($option);
            print_r($option1);


            if (count($option1) > 1) {
                $option2 = implode("^", $option1);
                $store[] = $option2;

            } else {
                $value = $option1;

                $i = implode(null, $option1);

                $store[] = $i;
            }

        }
           print_r($store);
    }

    $t = new DateTime();
    $t->setTimestamp($time = time());
    $t->setTimeZone(new DateTimeZone("Asia/Singapore"));
    $date = $t->format(DateTime::RFC850);

     $SQL = "INSERT INTO answer_table(student_id ,survey_id, ans_1, ans_2, ans_3, ans_4, ans_5, ans_6, ans_7, ans_8, ans_9, ans_10, timestamp) VALUES ('$student_id','$survey_id', '$store[0]', '$store[1]', '$store[2]', '$store[3]', '$store[4]', '$store[5]', '$store[6]', '$store[7]', '$store[8]', '$store[9]', '$date')";

     $result = mysql_query($SQL);

生徒が順番に (質問番号 1 から 10 まで) テストに答えると、コードは正常に機能します。しかし、候補者がランダムに回答すると (最初の 10 の次に 5 のように)、ans_1 という名前のテーブル フィールドに、質問番号 10 の回答が挿入されます。対応する回答を含むフィールドを挿入する必要があります。つまり、どんなパターンでも、候補者はテストを受けます。

誰でもこの問題を解決するのを手伝ってくれますか? 前もって感謝します。

4

3 に答える 3

0

目標を達成するには、質問IDを回答とともに保存するか、質問IDと対応する回答を回答テーブルのIDとともに保存する別のテーブルを作成する必要があります。

于 2013-09-30T09:11:04.710 に答える
0

変数に質問IDがある$key場合は、次を使用できます

$store[$key] = $option2;

それ以外の

$store[] = $option2;

これにより、投稿配列内の回答の順序に関係なく、最初の質問が配列内の最初のエントリになります。

于 2013-09-30T09:11:58.870 に答える