###はじめに
お世話になります。現在php学習中の者です。
学習を兼ねて、4択問題のできる学習サイトを作っています。
よくある英単語の学習サイトのようなものです。
ある程度は動いているのですが、ページ遷移の際に困ったことがあり質問させて頂きました。
質問以外の箇所でも、おかしな記述、書き方があれば教えていただけると助かります。
初めての質問で至らない点もあると思いますが、よろしくお願いします。
前提・実現したいこと
ページ遷移の際にキャッシュを使用したくない。
発生している問題
サイトの流れは以下の様になっています。
インデックスページ
↓
レッスンカテゴリー選択ページ
↓(カテゴリーIDを渡す)
レッスン選択ページ
↓(レッスンIDを渡す)
レッスンページ
→渡されたカテゴリーIDとレッスンIDをもとにmySQLに接続。
カテゴリーIDとレッスンIDをもとに選択したレッスンの中から、ランダムに問題を選び、問題を表示する。
困っているのはここからで、問題を解いて次の問題へ行くときです。
問題を解いた後、次の問題ページへ飛ぶ際なのですが、キャッシュを使用されてしまい、同じ問題のループになってしまいます。
前のページから引き継いだ、カテゴリーIDとレッスンIDをもとにアドレスを作っているので、現在のページと次のページのアドレスは同じになってしまいます。
現ページ :/learning.php?category_id=1&lesson_id=1/learning.php?category_id=1&lesson_id=1
↓
次のページ :
アドレスが同じになってしまっているため、キャッシュが使用されてしまい、phpが実行されません。
phpが実行されないので、同じ問題のループになってしまいます。
キャッシュが使用されなければ解決するのですが、色々調べてみたものの解決手段を見つけることができず、質問させていただきました。
お手間おかけしますが、アドバイスいただけると助かります。
php
1<?php 2 3 require('./include/dbconnect.php'); 4 session_start(); 5 $category_id = $_REQUEST['category_id']; 6 $lesson_id = $_REQUEST['lesson_id']; 7 8 $lesson_info = $db ->query("SELECT questions_table,answers_table FROM lessons WHERE category_id = $category_id && lesson_id = $lesson_id"); 9 // 問題と答えのテーブル名を取得 10 11 foreach($lesson_info as $lesson_info_value){ 12 $answers_table = $lesson_info_value['answers_table']; 13 $questions_table = $lesson_info_value['questions_table']; 14 } 15 16 $max_question_id = $db->query("SELECT count(question_id) FROM $questions_table"); 17 // questions_tableにある問題数取得 18 $max_question_id = $max_question_id->fetch(PDO::FETCH_ASSOC); 19 // question_idをランダムに抽出 20 $question_id = mt_rand(1,$max_question_id['count(question_id)']); 21 // ランダムに選んだquestion_idのquestion_titleとquestionを抽出 22 $question_array = $db->query("SELECT question_title,question FROM $questions_table WHERE question_id = $question_id"); 23 // ランダムに選んだquestion_idのanswer_id,answerを抽出 24 $testbox = $db->query("SELECT $questions_table.answer_id,answer FROM $questions_table LEFT OUTER JOIN $answers_table ON $questions_table.answer_id = $answers_table.answer_id WHERE $questions_table.question_id = $question_id"); 25 // answer_id,answerを$testboxへ代入 26 $question_array = $question_array->fetchAll(); 27 foreach($testbox as $test){ 28 $correct_answer_id = $test['answer_id']; 29 $incorrect_anwer = $test['answer']; 30 } 31 $number_of_answers = 4; 32 // 問題数を4問設定 33 $max_answer_id = $db->query("SELECT count(answer_id) FROM $answers_table"); 34 // 答えの数を取得 35 $max_answer_id = $max_answer_id->fetch(PDO::FETCH_ASSOC); 36 37 $total_answer_id = [($correct_answer_id)]; 38 // $total_answer_idに$correct_answer_id(正解のID)を代入 39 for($i = 2; $i <= $number_of_answers; $i++){ 40 while(true){ 41 $incorrect_anwer_id = mt_rand(1,$max_answer_id['count(answer_id)']); 42 // 不正解の回答IDをmt_randで生成 43 if(! in_array($incorrect_anwer_id,$total_answer_id)){ 44 array_push($total_answer_id,$incorrect_anwer_id); 45 break; 46 } 47 } 48} 49 $total_answer_id = implode(",", $total_answer_id); 50 $answers_array = $db->query("SELECT answer,description FROM answers_html_tag WHERE answer_id IN ($total_answer_id)"); 51 // 回答と回答の説明を取得 52 foreach( $answers_array as $answer){ 53 $answers[] = $answer['answer']; 54 $answers_description[] = $answer['description']; 55 } 56 shuffle($answers); 57 // 回答の表示がID順にならないようシャッフル 58 59?> 60<!doctype html> 61<html lang="ja"> 62<head> 63<meta charset="utf-8"> 64<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 65<link rel="stylesheet" href="css/learning.css"> 66<link rel="stylesheet" href="css/responsive/learning-responsive.css"> 67<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script> 68<title>TECH PRO</title> 69<!--共通common-head--> 70<?php include_once( $_SERVER['DOCUMENT_ROOT'] . '/study/TECH_PRO/include/common-head.inc'); ?> 71<!--共通common-head 終わり--> 72<script type="text/javascript" src="js/check-answer.js"></script> 73</head> 74<body class="learning__body"> 75<!--共通common-header--> 76<?php include_once( $_SERVER['DOCUMENT_ROOT'] . '/study/TECH_PRO/include/common-header.inc'); ?> 77<!--共通common-header 終わり--> 78<main> 79 <article class="learning__container"> 80 81 <?php foreach( $question_array as $question): ?> 82 <!-- <h2 class="learning__header">レッスンタイトル</h2> --> 83 <section class="question__box"> 84 <h3 class="question__title"><?php echo $question['question_title']; ?></h3> 85 <p class="question__description"><?php echo $question['question']; ?></p> 86 </section> 87 <?php endforeach; ?> 88 89 <section class="answer__box"> 90 <?php foreach( $answers as $answer): ?> 91 <?php if( $answer == $incorrect_anwer ):?> 92 <?php $correct_answer = $answer ?> 93 <button id="answer__btn--correct" class="answer__btn"><?php echo $correct_answer; ?></button> 94 <?php else: ?> 95 <button class="answer__btn answer__btn--incorrect"><?php echo $answer; ?></button> 96 <?php endif; ?> 97 <?php endforeach; ?> 98 </section> 99 100 </article> 101 <article id="check-answer__modal" class="check-answer__container"> 102 <section id="check-answer__box--correct" class="check-answer__box"> 103 <h2 class="check-answer__header">さすが!!正解です!!</h2> 104 <p>正解は"<?php echo $correct_answer ?>"!!</p> 105 <div class="check-answer__next-btn-box"> 106 <a class="check-answer__next-btn" href="learning.php?category_id=<?php echo $category_id ?>&lesson_id=<?php echo $lesson_value['lesson_id']; ?>">次の問題へ</a> 107 <a class="check-answer__next-btn" href="./lesson-category-list.php">カテゴリー一覧へ戻る</a> 108 </div> 109 <p>-解説-</p> 110 <?php foreach( $answers_description as $description): ?> 111 <p><?php echo $description; ?></p> 112 <?php endforeach; ?> 113 </section> 114 <section id="check-answer__box--incorrect" class="check-answer__box"> 115 <h2 class="check-answer__header">残念!!不正解です!!</h2> 116 <p>正解は"<?php echo $correct_answer ?>"!!</p> 117 <div class="check-answer__next-btn-box"> 118 <a class="check-answer__next-btn" href="learning.php?category_id=<?php echo $category_id ?>&lesson_id=<?php echo $lesson_value['lesson_id']; ?>">次の問題へ</a> 119 <a class="check-answer__next-btn" href="./lesson-category-list.php">カテゴリー一覧へ戻る</a> 120 </div> 121 <p>-解説-</p> 122 <?php foreach( $answers_description as $description): ?> 123 <p><?php echo $description; ?></p> 124 <?php endforeach; ?> 125 </section> 126 </article> 127</main> 128</body> 129</html>
回答2件
あなたの回答
tips
プレビュー