Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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

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
Jquery 将数据从控制器传递到控制器到模型_Jquery_Codeigniter_Ion Auth_Database Abstraction - Fatal编程技术网

Jquery 将数据从控制器传递到控制器到模型

Jquery 将数据从控制器传递到控制器到模型,jquery,codeigniter,ion-auth,database-abstraction,Jquery,Codeigniter,Ion Auth,Database Abstraction,我正在为一个正在开发的网站做一系列测试,在保存用户数据时遇到了一些问题。结构有点奇怪,因此可能与即将出现的问题有关。我的测验控制器被标记为Quiz1、Quiz2等,并加载一个名为QUIZER的函数,该函数在jquery中被监听。无论何时单击测验页面上的单选按钮,jquery都会激活Quizzer来记录用户输入。以下是示例代码: 这是加载页面的代码: public function Quiz4(){ $this->load->view("site_header");

我正在为一个正在开发的网站做一系列测试,在保存用户数据时遇到了一些问题。结构有点奇怪,因此可能与即将出现的问题有关。我的测验控制器被标记为Quiz1、Quiz2等,并加载一个名为QUIZER的函数,该函数在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\u 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);
}
我尝试将$quick转换为int,试图使数据类型匹配,但这个技巧也不起作用。
根据我手动键入4时函数的行为,与将其作为变量传递相比,这似乎是数据类型的问题(这就是我尝试键入的原因)。

如果您的
测验\u模型设计正确,而不是此:

$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();
此外,您应该有一个
测验
控制器,而不是多个
测验
控制器。最后,让控制器调用其他控制器通常被认为是糟糕的设计。我已经陷入了我觉得必须的境地,但这应该避免。为此,您的
测验
控制器提供了哪些您的
测验
控制器无法封装的内容,使您根本没有
测验
控制器


干杯

不可否认,编码相当草率,这是我的第一个MVC风格的项目。单独的测验页面是因为有单独的测验,每个测验都有自己的页面。最初,jquery听了我的一个测验,但为了使它能够听多个测验,我将处理测验的方法调用分离到了Quizzer控制器中。测验页面是用测验特有的问题和图像以及回答这些问题的系统初始化测验的页面。我正在考虑如何重新构建网站,但仍然陷于困境。还有,这些代码行是如何工作的$这个->测验模型->数据=$data$此->测验模型->用户id=$user\U id$此->测验模型->更新();