0

我正在为我正在开发的网站进行一系列测验,但在保存用户数据时遇到了一些麻烦。结构有点奇怪,所以这可能与即将出现的问题有关。我的测验控制器标记为 Quiz1、Quiz2 等,并加载一个名为 Quizzer 的函数,在 jquery 中进行监听。每当在测验页面上单击单选按钮时,jquery 都会激活 Quizzer 以记录用户输入。这是示例代码:

这是加载页面的代码:

    public function Quiz4(){
    $this->load->view("site_header");
    $this->load->view("site_nav");
    $this->load->model("quiz_model");
    $this->data['choices'] = $this->quiz_model->get_records('quiz_4');
    $this->load->view("student/quiztest", $this->data);

    $quiz = 4;

    $this->Quizzer($quiz);

    $this->load->view("site_footer");
}

值 4 被传递给 Quizzer,因此它知道要在数据库中写入哪个测验。

这是控制器测验器:

    public function Quizzer($qid){
    $this->load->model("quiz_model");
    $user = $this->ion_auth->user()->row();
    $user_id = $user->id;
    $data = array(
        'answer' => $this->input->post('answer')
    );
    $question = $this->input->post('question');

            echo $qid;

    $this->quiz_model->update_record($data, $user_id, $qid, $question);
}

$user_id 告诉哪个用户登录了 $data 和 $question 标识用户从哪个组单击了哪个单选按钮。

$qid 应该指出用户在哪个测验页面上,在这个测试的情况下,它回显了一个 4,所以我知道它正在获取数据,但它仍然不会写入数据库。我发现手动输入 4 而不是 $qid 会使函数工作,但当前的 $qid 变量不会被接受。

这是保存到数据库的模型函数:

    function update_record($data, $uid, $quiz, $question)
{
    echo $quiz;
    $this->db->where('uid', $uid);
    $this->db->where('quiz', (int)$quiz);
    $this->db->where('question', $question);
    $this->db->update('quiz_results', $data);
}

我尝试将 $quiz 强制转换为 int 以尝试使数据类型匹配,但这个技巧也不起作用。基于当我手动输入 4 而不是将其作为变量传递时函数的行为方式,这看起来像是数据类型的问题(这就是我尝试进行类型转换的原因)。

4

1 回答 1

0

如果你quiz_model的设计正确,而不是这样:

$this->quiz_model->update_record($data, $user_id, $qid, $question);

..你应该这样做:

$this->quiz_model->data = $data;
$this->quiz_model->user_id = $user_id;
...
$this->quiz_model->update();

此外,您应该有一个Quiz控制器,而不是多个QuizN控制器。最后,让控制器调用其他控制器通常被认为是糟糕的设计。我遇到了我觉得我必须这样做的情况,但应该避免这种情况。为此,您的Quiz控制器提供了哪些您的Quizzer控制器无法封装以致您根本没有Quiz控制器的功能?

干杯

于 2012-08-03T18:33:58.740 回答