尝试使用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);
}
}
问题在于,每当我提交表单时,它都不会返回任何内容,就像没有发生任何事情一样。请帮助。
答案 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
并提供数据库连接设置,例如hostname
,username
,password
和database
名称。
然后转到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());