Codeigniter & Datamapper: сохранение формы ведет себя странно

У меня странная проблема с Codeigniter и Datamapper,

Я делаю систему CMS и пытаюсь отредактировать статью из базы данных с помощью Datamapper. Когда я нажимаю, чтобы отредактировать статью, я получаю сообщение «Вы успешно сохранили статью», не нажимая кнопку «СОХРАНИТЬ», также все данные становятся пустыми и оставляют 0. Когда я ввожу данные и нажимаю «СОХРАНИТЬ», он сохраняет их, но снова когда я пытаюсь отредактировать его снова, он возвращается к 0 ... Может кто-нибудь помочь, пожалуйста

Вот моя функция редактирования в контроллере

public function edit($id = NULL)
{
   // Get articles by ID
    $articles = new Article_model();
    $article = $articles->where('id', $id)->get();

    if ($id)
    {
        $id == NULL || $article;
        count($article) || $error = 'Page not found ';
    }
    else
    {
        $article = $this->article_model->get_new();
    }

    $article->title = $this->input->post('title');
    $article->text = $this->input->post('text');

    if ($article->save())
    {
        echo 'You have succesfully saved the article';
    }
    else
    {
        echo 'Sorry something went terribly worng';
    }


    $data = array(
        'admin_content' => 'admin/article/edit',
        'article' => $article,
        );

    $this->parser->parse('admin/template_admin', $data);
}

а вот мой взгляд

<?php if ($this->tank_auth->is_logged_in()): ?>
<div class="container">
<div class="row">
    <div class="col-md-9">
      <h3><?php echo empty($article->id) ? 'Add an article' : 'Edit a Page ' . $article->title ;?></h3>

 <?php echo form_open(); ?>
<table class="table">
    <tr>
        <td>Publication Date</td>
        <td><?php echo form_input('pubdate', set_value('pubdate', $article->pubdate), 'class="datepicker"'); ?></td>
    </tr>
    <tr>
        <td>Title</td>
        <td><?php echo form_input('title', set_value('title', $article->title)); ?></td>
    </tr>
    <tr>
        <td>Body</td>
        <td><?php echo form_textarea('text', set_value('text' , $article->text), 'class="tinymce"'); ?></td>
    </tr>
    <tr>
        <td></td>
        <td><?php echo form_submit('submit', 'Save', 'class="btn btn-primary"'); ?></td>
    </tr>       
</table>

<?php echo form_close(); ?>
    </div>
</div>
</div>
<?php else: redirect('/auth/login'); ?>
<?php endif; ?>

person Unsparing    schedule 30.03.2014    source источник


Ответы (1)


это совсем не странно... каждый раз, когда этот контроллер загружается, он будет выполнять метод save() класса статьи.

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

person John Corry    schedule 30.03.2014
comment
да, даже с проверкой формы он все еще пытается сохранить даже до того, как попытается нажать кнопку сохранения ... и отображает ошибки вверху. Пожалуйста, помогите - person Unsparing; 31.03.2014
comment
Это потому, что метод $article-›save() вызывается каждый раз, когда запускается метод edit() контроллера. В коде нет проверки, чтобы гарантировать, что он запускается только при нажатии кнопки сохранения или даже только при отправке формы. Какие ошибки отображаются? - person John Corry; 31.03.2014
comment
Кроме того, почему вы проверяете статус auth-›login, по-вашему? Это имеет гораздо больше смысла в контроллере... где должна жить ваша логика. - person John Corry; 31.03.2014
comment
Исправлено, он создал другую функцию с именем add_article, так что теперь она работает. Да, я знаю об этом, я исправлю это в конце. Здоровья дружище :) - person Unsparing; 31.03.2014