テストページ(問題を1から順番に取得する場合)
問題の取得
<?php
global $wpdb;
$table_question = $wpdb->prefix . 'question';
$table_answer = $wpdb->prefix . 'answer';
$current_question_id = isset($_GET['question_id']) ? intval($_GET['question_id']) : 1;
$question = $wpdb->get_row(
$wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $current_question_id)
);
?>
解答の保存
<?php
if ( isset($_POST['submit_answer']) ) {
// 解答の保存
if ( $_POST['input_answer'] == $question->correct_answer ) {
$accuracy = 1;
} else {
$accuracy = 0;
}
$user_data = array(
'user' => wp_get_current_user()->user_login,
'question_id' => $question->id,
'user_answer' => sanitize_text_field($_POST['input_answer']),
'accuracy' => $accuracy,
'created_at' => date('Y-m-d H:i:s'),
);
$format = array('%s', '%d', '%s', '%d', '%s');
$inserted = $wpdb->insert($table_answer, $user_data, $format);
// エラーハンドリング
if ($inserted === false) {
echo 'データの保存に失敗しました: ' . $wpdb->last_error;
}
// 次の問題へ
$next_question_id = $current_question_id + 1;
wp_redirect(
add_query_arg('question_id', $next_question_id, get_permalink());
);
exit;
}
?>
header
<!DOCTYPE html>
<html lang="ja">
省略
</header>
問題の終了
<?php
if (!$question) {
echo '<p class="result_good_job">全ての問題が終了しました。お疲れ様でした。</p>';
echo '<a class="result_to_home" href="' . site_url() . '">トップページに戻る</a>';
// 問題数と正解数
$question_count = $wpdb->get_var(
$wpdb->prepare("SELECT COUNT(*) FROM $table_question")
);
$accuracy_count = $wpdb->get_var(
$wpdb->prepare("SELECT COUNT(*) FROM $table_answer WHERE user_name = %s AND accuracy = %d", wp_get_current_user()->user_login, 1)
);
?>
<div class='result_accuracy'>
<span><?php echo $question_count ?></span>問中
<span><?php echo $accuracy_count ?></span>問正解
</div>
<?php
// 正解とあなたの答え
for ( $i = 1; $i <= $question_count; $i++ ) {
$quiz = $wpdb->get_row(
$wpdb->prepare("SELECT * FROM $table_question WHERE question_id = %d", $i)
);
$your_answer = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM $table_answer WHERE user_name = %s AND question_id = %d",
wp_get_current_user()->user_login,
$i
)
);
?>
<section class='result_question'>
<h2><?php echo esc_html($quiz->question_text) ?></h2>
<ul>
<li>
<?php echo esc_html($quiz->option_a) ?>
</li>
<li>
<?php echo esc_html($quiz->option_b) ?>
</li>
<li>
<?php echo esc_html($quiz->option_c) ?>
</li>
<li>
<?php echo esc_html($quiz->option_d) ?>
</li>
</ul>
<div>
<p>正解は<?php echo esc_html($quiz->correct_answer) ?></p>
<p>あなたの答えは<?php echo esc_html($your_answer->user_answer) ?></p>
</div>
</section>
<?php
}
echo '<a class="result_to_home" href="' . site_url() . '">トップページに戻る</a>';
return;
}
?>
フォーム
<form method="post" action="" class="form_question">
<h2><?php echo esc_html($question->question_text) ?></h2>
<ul>
<li>
<label>
<input type="radio" name="input_answer" value="a" />
<?php echo esc_html($question->option_a) ?>
</label>
</li>
<li>
<label>
<input type="radio" name="input_answer" value="b" />
<?php echo esc_html($question->option_b) ?>
</label>
</li>
<li>
<label>
<input type="radio" name="input_answer" value="c" />
<?php echo esc_html($question->option_c) ?>
</label>
</li>
<li>
<label>
<input type="radio" name="input_answer" value="d" />
<?php echo esc_html($question->option_d) ?>
</label>
</li>
</ul>
<input type='submit' name='submit_answer' value='次の問題へ' />
</form>
BACK