php mvc викторина - проверка ответов

1

Я пытаюсь сделать простую викторину с помощью Codeigniter2.2.4, но у меня возникают некоторые проблемы с проверкой ответов. У меня есть следующая структура: контроллеры: модели Guess: мнения людей: guessview, results

в классе моих людей у меня есть методы, чтобы получить все вопросы из базы данных и получить случайный. У меня проблемы с проверкой правильности ответа или нет. Он всегда возвращает false

function getQuestions()
{
    if(!isset($questions))
    {
        $this->db->select("id, name, choice1, choice2, correctAnswer");
    $this->db->from('questions');
    $query = $this->db->get();
    foreach ($query->result() as $row) {
    $questions[] = $row;
    }
    }

    return $questions;
}

function getRandomQuestion()
{
    $max = count($this->getQuestions());
    $randpos = rand(0, $max-1);
    $question = $this->getQuestions()[$randpos];

    return $question;
}

И в моем контроллере:

function guess()
{
    $answer = $this->input->get('answers',false);
    //$questionId = $this->input->get('id',false);

        //this will generate random questions.
        $newQuestion = $this->people->getRandomQuestion();
        $this->load->view('guessview',$newQuestion);
        //this is always false
       if($answer == $newQuestion->correctAnswer)
       {
           //do something
       }
}

И, на мой взгляд, у меня есть только форма, отображающая только один вопрос за раз.

//Обновление При использовании предоставленной вами функции я получаю некоторые ошибки в моем контроллере и просмотре. Я пытаюсь схватить вопрос в контроллере

 $question = $this->people->getRandomQuestion();

//это дает мне undefined index correctAnswer, но не должно ли это иметь, поскольку таблица базы данных имеет следующую структуру: id, name, choice1, choice2, correctAnswer?

if($question['correctAnswer'] == $answer)
{
}

Также, когда я хочу передать данные в представление, т.е.

$question = $this->people->getRandomQuestion();
$data['question'] = $question;
$this->load->view('guessview',$data);

И, на мой взгляд, для значений формы я пробовал вот так: $ question ['name'], $ question ['id'], и я получаю undefined имя индекса, id и т.д.

Моя форма от guessview.php

<form id= "form1" class="form"  action="<?php echo base_url();?>guess/people" method='POST'>
                <input type=hidden name=id value="<?php echo $question['id'] ?>"> 
                <label><?php echo $question['name'] ?>
                <div class="radio">
                  <label>
                    <input type="radio" id='rad1' name="answers" value="<?php echo $question['choice1'] ?>">
                    <?php echo $question['choice1'] ?>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="answers"  value="<?php echo $question['choice2'] ?>">
                    <?php echo $question['choice2'] ?>
                  </label>
                </div>
                <div class="radio">
                <label>
                <input type="radio" name="answers"   value="<?php echo $question['correctAnswer'] ?>">
                <?php echo $question['correctAnswer'] ?>
                </label>
                <div>
                    <input type=submit name="sub" value="Answer">
                </div>
</form>

Проблема, которую я отправил, рассматривалась функцией контроллера. Похоже, что когда я пытаюсь проверить правильность ответа пользователя, всегда ложь. Как и то, что пользователь ответил на предыдущий вопрос, по сравнению с правильным ответом на текущий вопрос.

Я попытался получить вход радиокнопки и идентификатора (помещен в скрытое поле), если они возвращали false, это означало, что вопросы не отображаются и отображаются первым вопросом. else, если есть вход, тогда задайте вопрос на основе идентификатора и сравните вопрос правильно. Ответьте на то, что выбрал пользователь. (Но, как я уже сказал выше, он всегда будет ложным). Я отправлю метод, когда вернусь домой.

Теги:
codeigniter

1 ответ

0
Лучший ответ

Вы можете сделать это в одной функции модели

function getRandomQuestion()
{
    $sql = "SELECT * FROM questions ORDER BY RAND() LIMIT 1 )";
    $query = $this->db->query($sql);
    $result = $query->result_array();

    $count = count($result);

    if (empty($count) ||$count > 1) {
        echo "Inavliad Question";
    }
    else{
        return $result;
    }
}
  • 0
    не могли бы вы проверить мой обновленный пост, пожалуйста?
  • 0
    Рад был помочь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню