我正在使用codeigniter并尝试执行UPDATE查询,但它一直在创建一个像INSERT查询一样的新行。我很困惑,在网上搜索并没有给我带来太多好处。 (我有点像n00b)。任何帮助将不胜感激。
以下是表格:
<form action="<?=base_url();?>blog/new_post" method="post" name="write_new">
<input type="hidden" name="user" value="<?=$user?>">
<label>Title:</label><br>
<input type="text" name="title" value="<?php if(isset($query->title)) { echo $query->title; }?>" size="50"><br>
<label>Date:</label><br>
<input type="text" name="date" size="46" value="<?php if(isset($query->date)) { echo $query->date; }?>" />
<script language="JavaScript">
new tcal ({
// javascript calender thingy
// form name
'formname': 'write_new',
// input name
'controlname': 'date'
});
</script> <br><br>
<label>Article:</label><br>
<textarea name="content" style="width:100%;height:300px;"><?php if(isset($query->article)) { echo $query->article; }?></textarea><br>
<select name="category">
<option value="news">Dreamsy News</option>
<option value="web">From the Interwebs</option>
</select>
<input type="submit"/>
</form>
<div class="clearboth"></div>
以下是模型:
function edit_post($title, $date, $author, $article, $category, $id)
{
$this->load->helper('form'); //loads the CI form helper
$this->load->library('form_validation'); //loads the form validation class
$this->form_validation->set_rules('title', 'title', 'required|min_length[3]|max_length[40]|xss_clean');
$this->form_validation->set_rules('date', 'date', 'required|min_length[5]|max_length[15]|xss_clean');
$this->form_validation->set_rules('category', 'category', 'required|xss_clean');
$this->form_validation->set_rules('content', 'article', 'required|xss_clean');
$this->form_validation->set_rules('user', 'you are not logged in', 'required');
if ($this->form_validation->run() == FALSE) //If the form does not validate
{
$this->load->vars(array('title' => 'Error'));
$this->template->write_view('content', 'error/new_post_fail');
$this->template->render();
}
else
{
$article = htmlentities($article, ENT_QUOTES);
/*$data = array(
'title' => $title,
'date' => $date,
'author' => $author,
'article' => $article,
'category' => $category
);*/
//$this->db->where('id', $id);
//$this->db->update('blog', $data);
$query = 'UPDATE blog SET title = '.$title.' date = '.$date.', author = '.$author.', article = '.$article.', category = '.$category;
$this->db->query($query);
redirect(base_url().'blog');
}
这是控制器:
public function write()
{
$id = $this->uri->segment(3);
$query = 'SELECT * FROM blog WHERE id = '.$id;
$query = $this->db->query($query);
$query = $query->row();
$title = $query->title;
$user = $this->session->userdata('user_id');
if(isset($id)){ $title = 'Edit: '.$title; } else { $title = 'Write new post'; }
$vars['title'] = $title;
$vars['page'] = 'blog';
$vars['user'] = $user;
$vars['id'] = $id;
$vars['query'] = $query;
$this->load->helper('form'); //loads the CI form helper
$this->load->library('form_validation'); //loads the form validation class
$this->load->vars($vars);
$this->template->write_view('content', 'blog/write');
$this->template->render();
}
答案 0 :(得分:2)
<form action="<?=base_url();?>blog/new_post" method="post" name="write_new">
您必须修改action
属性才能调用edit
控制器的blog
方法。否则调用new_post
方法,据我所知,只插入POST数据。
答案 1 :(得分:1)
您是否设置了一些路线,因为我没有在您的上述控制器中看到相关功能,该功能通过表单中的action tag / attr引用。如果您不包含该功能,那么很容易出现错误的来宾。
我的一些亮点,我注意到你在模型中放置了表单验证,模板内容甚至重定向功能,而不是将它放在你的控制器中。
答案 2 :(得分:0)
我认为您的UPDATE查询中没有WHERE条件,这可能是您的问题之一..
确保只为您的问题执行了部分代码..