我正在为我正在处理的网站进行一系列测验,并且在保存用户数据方面遇到了一些麻烦。结构有点奇怪,因此可能与出现的问题有关。我的测验控制器标记为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,因此它知道要在数据库中写入哪个测验。
这是控制器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而不是将其作为变量传递时函数的行为方式使得它看起来像是数据类型的问题(这就是为什么我试图进行类型转换)。
答案 0 :(得分: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
控制器?
干杯