【问题标题】:Codeigniter & Datamapper: Saving uploaded image to database doesn't workCodeigniter 和 Datamapper:将上传的图像保存到数据库不起作用
【发布时间】:2014-05-11 07:45:56
【问题描述】:

我正在尝试使用 datamapper 来帮助我并将 file_name 存储在数据库中。首先,我使用 Codeigniter 手册中给出的 do_upload 的基本示例来完成它,最后我写了 3 行 datamapper 来查看一个带有 id 和 url 的简单表。我运行它,它保存得很好。

现在的问题是当我尝试在我的 add_article 方法中调用 do_upload 函数时,当文章与图片一起上传时,以保存文章的所有详细信息 + 上传的图片名称。但是它不起作用,我尝试了各种类型。这是我所拥有的:

在我的控制器中:

public function add_article($id = NULL)
{
    $articles = new Article_model();
    $article = $articles->where('id', $id)->get();

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


    // Try to upload the image
    if ($this->input->post('submit'))
    {
        $this->do_upload();
    }

    if ($article->save())
    {
        echo '<p>You have successfully added an article</p>';
        redirect('admin/article/');
    }
    else
    {
        echo '<p>' . $article->error->string . '</p>';
    }
}

   public function do_upload()
{
    $config = array(
        'allowed_types' => 'jpg|jpeg|gif|png',
        'upload_path' => $this->gallery_path,
        );

    $this->load->library('upload' , $config);
    $this->upload->do_upload();
    $image_data = $this->upload->data();

    $article = new Article_model();
    $article->url = $image_data['file_name'];
    $article->save();


}

我的看法:

<?php echo form_open_multipart('admin/article/add_article'); ?>
<table class="table">
    <tr>
        <td>Title</td>
        <td><?php echo form_input('title', set_value('title', $article->title)); ?></td>
    </tr>
    <tr>
        <td>Image</td>
        <td><?php echo form_upload('userfile'); ?></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>

【问题讨论】:

  • 您遇到的错误是什么?
  • 我没有收到错误,文件名没有进入数据库:(
  • 我明白了,我怀疑这是因为在您的 do_upload 函数中,您正在实例化一个新的 Article_Model,而不是更新您之前插入的那个。尝试将您的代码更改为我将在答案中输入的内容。

标签: php codeigniter datamapper codeigniter-datamapper


【解决方案1】:

试试这个。

不用在do_upload方法中实例化一个新的Article_Model,只需从do_upload方法返回图像名称,并在保存到数据库之前设置Article_Model的url属性。

public function add_article($id = NULL)
{
    $articles = new Article_model();
    $article = $articles->where('id', $id)->get();

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


    // Try to upload the image
    if ($this->input->post('submit'))
    {
        $article->url = $this->do_upload();
    }

    if ($article->save())
    {
        echo '<p>You have successfully added an article</p>';
        redirect('admin/article/');
    }
    else
    {
        echo '<p>' . $article->error->string . '</p>';
    }
}

public function do_upload()
{
    $config = array(
    'allowed_types' => 'jpg|jpeg|gif|png',
    'upload_path' => $this->gallery_path,
    );

    $this->load->library('upload' , $config);
    $this->upload->do_upload();
    $image_data = $this->upload->data();

    return $image_data['file_name'];
}

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2019-02-18
    • 2012-11-07
    • 2018-05-09
    • 1970-01-01
    • 2021-09-16
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多