为什么我的更新查询创建新行?

时间:2011-07-23 06:41:47

标签: php mysql codeigniter

我正在使用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();
}

3 个答案:

答案 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条件,这可能是您的问题之一..

确保只为您的问题执行了部分代码..

相关问题