Выбрать случайным образом из базы данных

Я создаю приложение для викторины. Я хочу получить, чтобы получать вопросы в случайном порядке, что нормально работает. Но проблема с ответом. Я пытался получить идентификатор каждого вопроса и прикрепить его к каждому вопросу. Суть этого в том, чтобы получить правильный ответ по ID вопроса. Но вместо всех отвеченных вопросов я получаю только одно значение. Я добавил скрытый тип ввода, который сохраняет идентификатор вопроса, чтобы использовать его для получения правильного ответа на каждый вопрос.

Это запрос на получение вопроса

<form method = "POST" role = "form" id = "form" action = "result.php">
    <?php
      // fetch out questions and answers from the database
      $qryquestions = "SELECT * FROM questions WHERE `course_title`='".$course_title."' ORDER BY RAND() LIMIT 10";
          $qryquestionscheck=$conn->query($qryquestions);
          foreach ($qryquestionscheck as $row){
            $question_id = $row['id'];
            $questions = $row['questions'];
            $optionA = $row['option_A'];
            $optionB = $row['option_B'];
            $optionC= $row['option_C'];
            $optionD = $row['option_D'];
            $_SESSION['course_title'] = $course_title;

         ?>
         <div class = "form-group">
            <label style = "font-weight: normal; text-align: justify;"><b><?php echo "Question" . " " . $counter++; ?></b>&nbsp<?php echo $questions; ?></label><br>
            <div id = "quiz-options">
              <label style = "font-weight: normal; cursor: pointer;">
                <input type = "checkbox" name = "option[]" value = "A"> <?php echo $optionA; ?>
              </label><br>
              <label style = "font-weight: normal; cursor: pointer;">
                <input type = "checkbox" name = "option[]" value = "B"> <?php echo $optionB; ?>
              </label><br>
              <label style = "font-weight: normal; cursor: pointer;">
                <input type = "checkbox" name = "option[]" value = "C"> <?php echo $optionC; ?>
              </label><br>
              <label style = "font-weight: normal; cursor: pointer;">
                <input type = "checkbox" name = "option[]" value = "D"> <?php echo $optionD; ?>
              </label><br>
              <input type = "hidden" name = "question_id[]" value = "<?php echo $question_id; ?>">
            </div>
            <hr>
         </div><br>
         <?php } ?>
        <input class = "btn btn-primary pull-right"  name = "submit" type = "submit" value = "Submit">
        </form>

И здесь я получаю правильные ответы с каждым идентификатором вопроса.

//check and compare anwsers
if (isset($_POST['submit'])){

    $option_array = $_POST['option'];
    $each_question_id = $_POST["question_id"];
    echo json_encode($each_question_id).'<br/>';
    // convert question id to string
    $each_question_id_string = implode(",", $each_question_id);
    echo $each_question_id_string . '<br>';


    if (empty($option_array) == false){
      //select answer with the question ID
      $query = "SELECT answer FROM answers WHERE `question_id`='".$each_question_id_string."'";
      $checkquery = $conn->query($query);
      $correct_option = array();


      while ($answerrows = $checkquery->fetch_assoc()){
        $correct_option[] = $answerrows['answer'];
      }


      $correct_string = implode(",", $correct_option);
      echo $correct_string. '<br>';

      $correct_array = explode(",", $correct_string);
      echo json_encode($correct_array).'<br/>';
      echo $each_question_id_string.'<br/>';
      exit();

      $result= array_intersect_assoc($correct_array,$option_array);
      $resultcount = count($result);
      $noOfQuestions = "10";
      $wrongAnswers = $noOfQuestions - $resultcount;


      $date_taken = date('Y-m-d:h:i:s');

      // performance
      if ($resultcount >= "7"){
        $performance = "Excellent";
      } else if ($resultcount >= "5") {
        $performance = "Good";
      } else if ($resultcount <= "4") {
        $performance = "Poor";
      }

      $insertresult = "INSERT INTO result (`username`, `fullname`, `result`, `matricNo`, `date_taken`, `course_title`) VALUES ('$username', '$fullname', '$resultcount', '$matricNo', '$date_taken', '$course_title')";
      $checkinsert = $conn->query($insertresult);
      if (!$checkinsert){
        die ('Error inserting has occurred');
      }
    } else {
      ?><script type = "text/javascript">
        alert('You need to attempt at least one question');
        window.location = "select_course.php";
      </script><?php
    }
    /*?><script type = "text/javascript">
     else {
      console.info('Cancel');
     }</script><?php*/
  } else {
    echo "<p style='text-align: center; font-size: 18px;'>Your Quiz     session has expired... Click <a href='user_dashboard.php'>here</a> to go to your dashboard and re-take the exam if needed</p>";
  }

Теперь проблема в том, что запрашивается только один ответ.. Пожалуйста, помогите мне

вы ищете поле идентификатора, используя строку ..? также вы открыты для SQL-инъекций и должны решить эту проблему как можно скорее

treyBake 04.10.2018 11:47

Пожалуйста, помогите мне больше в этом. Что мне нужно сделать?

Amjos.com 04.10.2018 12:56

Это ссылка, по которой я перешел, потому что я испытываю то же самое, что описано в вопросе здесь stackoverflow.com/questions/31914891/…

Amjos.com 04.10.2018 13:58

Кто-нибудь должен помочь мне, пожалуйста

Amjos.com 04.10.2018 15:41

вы используете где, идентификатор совпадает - есть только одна строка ...

treyBake 04.10.2018 15:43

Хорошо, но я хочу, чтобы это было общее количество полученных вопросов. Таким образом, он должен получить 10 ответов, а не 1. Я добавил LIMIT 10, но не работает. Я получаю значение последней строки в базе данных

Amjos.com 04.10.2018 16:23

добавление лимита ничего не изменит, "SELECT answer FROM questions WHERE id='".$each_question_id_string."'"; -> ваш код получает только один ответ, потому что вы используете поле идентификатора - ответы и вопросы должны быть отдельными таблицами, которые используют внешние ключи

treyBake 04.10.2018 16:24

Позвольте нам продолжить обсуждение в чате.

Amjos.com 04.10.2018 16:31

Я пробовал помещать вопросы в массив с ID. Пожалуйста, мне нужно больше предложений

Amjos.com 05.10.2018 06:58

Вам нужны две таблицы: одна - с ответами, а другая - с вопросами с внешним ключом на question.id = answer.question_id.

treyBake 05.10.2018 10:10

Да, я сделал это именно так

Amjos.com 05.10.2018 16:19

тогда sql должен выглядеть как select * from answers where question_id = :questionId, тогда вы можете использовать rand(), random_int(), array_rand(), чтобы получить что-то случайное

treyBake 05.10.2018 16:23

Можем ли мы перейти в чат? Я сделал, но все еще не работаю. Вопрос, который у меня есть в массиве, поэтому я использую implode, чтобы сделать его строковым. Позвольте мне обновить свой вопрос

Amjos.com 05.10.2018 16:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
13
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Задача решена. Я попытался получить вопросы и ответы случайным образом, и нет необходимости снова использовать второй запрос

Другие вопросы по теме