2012-08-03 261 views
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传递给嘲弄,所以它知道写入到数据库中的哪些测验。

这是控制器嘲弄:

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而不是将它作为一个变量传递的函数的行为时,它看起来像是数据类型的问题(这就是为什么我试图强制转换)。

回答

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控制器?

干杯

+0

不可否认,编码是相当草率的,这是我的第一个MVC风格的项目。单独的测验页面是因为有单独的测验,每个测验都得到它自己的页面。最初,jquery倾听了我的一个测验,但为了能够听取多个测验,我将处理测验的方法调用分隔到Quizzer控制器中。测验页面是针对测验初始化测验的唯一问题和图像,以及回答这些问题的系统。我正在考虑如何重组网站,但我仍然陷入困境。 – 2012-08-03 19:14:16

+0

另外,这些代码行是如何工作的? $ this-> quiz_model-> data = $ data; $ this-> quiz_model-> user_id = $ user_id; ... $ this-> quiz_model-> update(); – 2012-08-03 19:16:01

相关问题