在pHP中的测验中根据正确答案检查所选答案

时间:2016-06-11 11:40:03

标签: php codeigniter

我有这个测验应用程序正在使用codeigniter框架,但是在检查所选答案与正确答案时遇到问题。问题从数据库填充,数据库如下:

id | questions | opt1 | opt2 | opt3 | opt4 | correctAns

请给出这种结构,我如何能够再次检查正确的答案,以便在测验结束时给候选人打分,并向他们展示他们得到的正确和错误的问题。 我的问题控制器中有一个displayQuestions():

public function displayQuestions()
{
    $this->load->model('questions_model');

    $classLevel = $this->input->post('class_level');
    $subject    = $this->input->post('subject');

    $result = $this->questions_model->selectQuestions($classLevel, $subject);

    if ($result == false) {
        redirect('users/home');
    }

    $data['questions'] = $result;

    // $this->load->view('layouts/header');
    $this->load->view('users/questions', $data);
    // $this->load->view('layouts/sidebar');
    // $this->load->view('layouts/footer');
}

我的Questions_model中的selectQuestions():

public function selectQuestions($classLevel, $subject)
{
    $query = $this->db
                    ->where('class_level', $classLevel)
                    ->where('subj_code', $subject)
                    ->get('questions');

    if ($query->num_rows() > 0) {
        return $query->result();
    }

    return false;
}

这就是我在视图中显示它的方式:

<div id="questions">
<?php
    // declare counter
    $i = 1;

    // array to hold correct answer
    $correctAns = [];

?>
<form method="POST" action="result/check">
    <fieldset>
        <legend>
            <h2>Answer the following questions</h2>
        </legend>
        <ol class="question">
            <?php foreach ($questions as $question): ?>
                <?php if ($i <= 5): ?>
                    <li><?php echo $question->ques; ?>  </li>
                    <ol type="A">
                        <li><input type="radio" name="option" value="<?php echo $question->ansOpt1 ?>"><?php echo $question->ansOpt1 ?></li>
                        <li><input type="radio" name="option" value="<?php echo $question->ansOpt2 ?>"><?php echo $question->ansOpt2 ?></li>
                        <li><input type="radio" name="option" value="<?php echo $question->ansOpt3 ?>"><?php echo $question->ansOpt3 ?></li>
                        <li><input type="radio" name="option" value="<?php echo $question->ansOpt4 ?>"><?php echo $question->ansOpt4 ?></li>
                    </ol>
                <?php endif ?>

                <!-- increase $i -->
                <?php $i++; ?>
            <?php endforeach ?>
        </ol>
        <input type="hidden" name="correct_ans">
    </fieldset>
</form>
</div>

2 个答案:

答案 0 :(得分:0)

提供的代码中没有实际检查正确答案的功能。您需要在表单验证规则中使用回调。

CodeIgniter Form Validation Callbacks

在您的控制器中:

private function verify_answer($q, $a) {
    $sql = "SELECT id FROM table WHERE id = ? AND correctAns = ?";
    $query = $this->db->query($sql, array($q, $a);
    if ($query->num_rows() > 0) {
        return TRUE;
    } else {
        return FALSE;
}

然后,您需要创建一个正确和/或错误答案的数组,具体取决于您希望如何处理输出,具体取决于是返回true还是false值。也许你把它们存储为一个关联数组,问题编号作为键,并循环通过那个和测验结束。

这绝不是最有效的方法。只是“一种方式”。

答案 1 :(得分:0)

超文本传输​​协议(HTTP)是Web浏览器和网站之间的通信协议,数据以明文形式显示。 选择一个: 真实正确 假