将数据从控制器传递到控制器到模型
问题描述:
我正在为我正在处理的网站进行一系列测验,并且在保存用户数据时遇到了一些问题。这个结构有点奇怪,所以这可能与出现的问题有关。我的测验控制器被标记为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传递给嘲弄,所以它知道写入到数据库中的哪些测验。
这是控制器嘲弄:
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告诉哪个用户登录 $数据和$问题识别单选按钮,用户从哪个组点击。
$ 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);
}
我试图铸造$测验,企图获取数据类型,以匹配为int,但这一招不工作要么。 根据当我手动输入一个4而不是将它作为一个变量传递的函数的行为时,它看起来像是数据类型的问题(这就是为什么我试图强制转换)。
答
如果您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
控制器?
干杯
不可否认,编码是相当草率的,这是我的第一个MVC风格的项目。单独的测验页面是因为有单独的测验,每个测验都得到它自己的页面。最初,jquery倾听了我的一个测验,但为了能够听取多个测验,我将处理测验的方法调用分隔到Quizzer控制器中。测验页面是针对测验初始化测验的唯一问题和图像,以及回答这些问题的系统。我正在考虑如何重组网站,但我仍然陷入困境。 – 2012-08-03 19:14:16
另外,这些代码行是如何工作的? $ this-> quiz_model-> data = $ data; $ this-> quiz_model-> user_id = $ user_id; ... $ this-> quiz_model-> update(); – 2012-08-03 19:16:01