无法使用codeigniter将值插入数据库

时间:2013-10-22 13:49:30

标签: php mysql codeigniter

尝试使用codeigniter将表单值插入数据库,但没有任何内容。 我的表格是 comment_form.php 就好,

<?php echo validation_errors(); ?>
<?php echo form_open('news/comment_form'); ?>

Name<input type="text" name="comment_name"></input><br />
Email<input type="text" name="comment_email"></input><br />
Comment<input type="text" name="comment_body"></input><br />
<input type="submit" name="submit" value="Comment it" ></input>

</form>

这是我的控制器 comments.php

class Comments extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        $this->load->model('comment_model');
    }

    public function create_comment()
    {
        $this->load->helper('form');
        $this->load->library('form_validation');


        //$data['title'] = 'Create a news item';

        $this->form_validation->set_rules('comment_name', 'comment_name', 'required');
        $this->form_validation->set_rules('comment_email', 'comment_email', 'required');
        $this->form_validation->set_rules('comment_body', 'comment_body', 'required');

        if ($this->form_validation->run() === FALSE) {
            $this->load->view('templates/header', $data);
            $this->load->view('news/comment_form');
            $this->load->view('templates/footer');
        } else {
            $this->news_model->set_comment();
            $this->load->view('news/success');
        }
    }
}

这是我的模型 comment_model.php

class Comment_model extends CI_Model
{

    public function __construct()
    {
        $this->load->database();
    }


    public function set_comment()
    {
        //$this->load->helper('url');

        //$slug = url_title($this->input->post('title'), 'dash', TRUE);

        $datac = array(
            'comment_name' => $this->input->post('comment_name'),
            'comment_email' => $this->input->post('comment_email'),
            'comment_body' => $this->input->post('comment_body')
        );

        return $this->db->insert('comments', $datac);
    }
}

问题在于,每当我提交表单时,它都不会返回任何内容,就像没有发生任何事情一样。请帮助。

5 个答案:

答案 0 :(得分:0)

set_comment之后的$this->db->insert('comments', $datac);函数中,只需使用以下命令回显查询并尝试在数据库中手动运行相同的查询,您就可以了解该问题。

  

echo $ this-&gt; db-&gt; last_query();

答案 1 :(得分:0)

更改:

$this->load->database();
echo form_open('news/comment_form');
$this->news_model->set_comment();

要:

$this->load->library('database');
echo form_open('news/create_comment');
$this->comment_model->set_comment();

如果在autoload.php中加载数据库库会更好。或者在你的控制器的构造函数中。

答案 2 :(得分:0)

this->news_model->set_comment()

应该是

this->comment_model->set_comment()

PS:抱歉格式化。移动版不会读取新行。

答案 3 :(得分:0)

在控制器而不是模型中获取已发布的值,然后将它们传递给模型。

控制器功能

public function create_comment()
{
    $this->load->helper('form');
    $this->load->library('form_validation');
    $this->form_validation->set_rules('comment_name', 'comment_name', 'required');
    $this->form_validation->set_rules('comment_email', 'comment_email', 'required');
    $this->form_validation->set_rules('comment_body', 'comment_body', 'required');

    if ($this->form_validation->run() === FALSE) {
        $this->load->view('templates/header', $data);
        $this->load->view('news/comment_form');
        $this->load->view('templates/footer');
    } else {
        $data['comment_name']   =   $this->input->post('comment_name'),
        $data['comment_email']  =   $this->input->post('comment_email'),
        $data['comment_body']   =   $this->input->post('comment_body')

        $this->news_model->set_comment();
        $this->load->view('news/success');
    }
}

模型功能

public function set_comment($data)
{
    //$this->load->helper('url');

    //$slug = url_title($this->input->post('title'), 'dash', TRUE);

    $this->db->insert('comments', $data);

    return $this->db->insert_id();
}

EDITS

如果您按照这些步骤操作,则上述代码将起作用。

转到database.php中的application/config并提供数据库连接设置,例如hostnameusernamepassworddatabase名称。
然后转到autoload.php中的application/config并像这样自动加载数据库

$autoload['libraries'] = array('database');

同时删除html表单中输入的结束标记。
在继续前进之前尝试在控制器中进行这样的测试

$post = $this->input->post();
echo '<pre>';
print_r($post);

这将确保您收到帖子数据

答案 4 :(得分:0)

comment_form.php 更改

echo form_open('news/create_comment');

echo form_open('comments/create_comment');

为什么?因为您给form_open()的第一个参数是action参数。它会打开一个表单标记,如<form action="bla">。而news / create_comment不是您要调用的正确页面。您的控制器名为comments,这就是您放置comments/create_comment

的原因

comments.php 更改

$this->news_model->set_comment();

$this->comment_model->set_comment();

为什么?只是简单地指向假模型。也许是一个copypaste-error?

comment_model.php 删除

$this->load->database();

并将其加载到 config.php (在库数组中,添加'数据库')。

为什么?恕我直言,这是更合适的解决方案。你可能会经常使用你的数据库,所以为什么每次都加载它?

如果您仍然遇到问题,那么我们需要更多信息。究竟什么不起作用。为我们做一些调试。致电$this->news_model->set_comment()后写var_dump($this->db->last_query());