0

尝试使用 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);
    }
}

问题是每当我提交表单时它什么都不返回,就像什么都没发生一样。请帮忙。

4

5 回答 5

0

在使用以下命令回显查询并尝试在数据库中手动运行相同查询set_comment后的函数$this->db->insert('comments', $datac);中,您可能会知道问题所在。

回声 $this->db->last_query();

于 2013-10-22T14:01:39.677 回答
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. 或者在你的控制器的构造函数中。

于 2013-10-22T14:02:51.003 回答
0
this->news_model->set_comment()

应该

this->comment_model->set_comment()

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

于 2013-10-22T14:03:41.693 回答
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();
}

编辑

如果您按照以下步骤操作,上述代码将起作用。

进入database.phpapplication/config提供数据库连接设置,如、hostname和名称。 然后像这样进入并自动加载数据库库usernamepassworddatabase
autoload.phpapplication/config

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

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

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

这将确保您收到帖子数据

于 2013-10-22T14:13:46.327 回答
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();

为什么?只是简单地指向错误的模型。也许是复制粘贴错误?

在您的comment_model.php中删除

$this->load->database();

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

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

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

于 2013-10-22T15:13:44.947 回答