почему мой запрос на обновление создает новую строку? - PullRequest
0 голосов
/ 23 июля 2011

Я использую 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 ]

2 голосов
/ 23 июля 2011
<form action="<?=base_url();?>blog/new_post" method="post" name="write_new">

Вы должны изменить атрибут action для вызова метода edit вашего контроллера blog. В противном случае вызывается метод new_post, который, насколько я вижу, просто вставляет данные POST.

1 голос
/ 23 июля 2011

Вы установили какой-то маршрут, потому что я не видел связанной функции в вашем вышеупомянутом контроллере, которая ссылается на тег действия / attr из вашей формы.Трудно понять, откуда возникла ошибка, если вы не включите эту функцию.

Некоторые из моих замечаний: я заметил, что вы добавили в модели проверку формы, шаблон и даже функцию перенаправления вместо того, чтобы поместить это в свойконтроллер.

0 голосов
/ 23 июля 2011

Я думаю, что в вашем запросе UPDATE нет условия WHERE, это может быть одной из проблем вашей проблемы.

убедитесь, что только ваша часть кода выполняется для вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...