Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pHP的测验中检查选定答案与正确答案_Php_Codeigniter - Fatal编程技术网

在pHP的测验中检查选定答案与正确答案

在pHP的测验中检查选定答案与正确答案,php,codeigniter,Php,Codeigniter,我有一个测验应用程序,我正在使用codeigniter框架,但是在检查所选答案是否正确时遇到了问题。问题从数据库中填充,数据库如下所示: id | questions | opt1 | opt2 | opt3 | opt4 | correctAns 请给出这种结构,我如何才能最好地再次检查正确答案,以便在测验结束时给考生打分,并向他们展示他们答对和答错的问题。 我的问题控制器中有一个displayQuestions(): public function displayQuestions() {

我有一个测验应用程序,我正在使用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');
}
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;
}
我的问题模型中的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>

回答以下问题

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

    在控制器中:

    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');
    }
    
    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;
    }
    
    然后,您需要创建一个正确和/或不正确答案的数组,这取决于您希望如何处理输出,取决于返回的是真值还是假值。也许你们将它们存储为一个关联数组,将问题编号作为键,然后循环通过该数组并结束测验


    这绝不是最有效的方法。超文本传输协议(HTTP)是web浏览器和以明文形式提供数据的网站之间的通信协议。 选择一个: 正确的 假的