php Codeigniter:上传/保存图像到数据库
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/28514379/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Codeigniter: Upload/Save Image to Database
提问by Jeffrey Teruel
I'm trying to create a user profile edit form on a Codeigniter project with the ability to upload a profile image. I'd like allow the upload to go through when the user clicks the submit button. I have no problems with the form (no errors), but I do not see any image on the uploads folder I set up. Any help to get the upload working would be greatly appreciated.
我正在尝试在 Codeigniter 项目上创建一个用户个人资料编辑表单,并能够上传个人资料图片。我希望在用户单击提交按钮时允许上传。我的表单没有问题(没有错误),但我在我设置的上传文件夹中没有看到任何图像。任何帮助上传工作将不胜感激。
Controller (User Edit/Insert Values to Database)
控制器(用户编辑/将值插入数据库)
public function update_edit($id)
{
$config['upload_path'] = '/uploads/profilepics';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['max_size'] = 250;
$this->load->library('upload', $config);
$this->upload->do_upload('profile_img_path');
$data_upload_files = $this->upload->data();
$image = $data_upload_files[full_path];
//input data
$data = array(
'user_name' => $this->input->post('user_name'),
'email' => $this->input->post('email'),
'first_name' => $this->input->post('first_name'),
'last_name' => $this->input->post('last_name'),
'city' => $this->input->post('city'),
'country' => $this->input->post('country'),
'description' => $this->input->post('description'),
'date_edited' => $this->input->post('today'),
'profile_img_path' => $image
);
$this->user_model->update_account($id,$data);
//send a confirmation of user account update
redirect('/');
}
}
Controller to access the form
控制器访问表单
public function update_account()
{
$id = $this->uri->segment(3);
$data['user_profile'] = $this->user_model->get_user_profile($id);
//only profile owner can access
if (!$this->uri->segment(3))
{
redirect('404');
}
if ($this->is_logged_in())
{
if ($this->is_logged_user())
{
//update views
$this->load->view('components/top');
$this->load->view('interact/form/user/edit',$data);
$this->load->view('components/bottom');
}
else
{
redirect('403');
}
}
else
{
redirect('403');
}
}
The View
风景
<div id="page">
<div class="container">
<div class="row">
<h3>Edit Your Account</h3>
<?php foreach ($user_profile as $user): ?>
<form id="edit_form" class="form-horizontal" method="post" action="<?php echo base_url() . "users/update_edit/" . $user->user_id; ?>" enctype="multipart/form-data">
<label>Enter a new username: *</label>
<p>yloko.com/users/user_profile/<?php echo $user->user_name; ?> </p>
<br/>
<input type="text" name="user_name" value="<?php echo $user->user_name; ?>">
<label >Enter a new email*</label>
<input type="email" name="email" value="<?php echo $user->email; ?>" >
<label >First Name</label>
<input type="text" name="first_name" value="<?php echo $user->first_name; ?>" >
<label >Last Name</label>
<input type="text" name="last_name" value="<?php echo $user->last_name; ?>" >
<label >City</label>
<input type="text" name="city" value="<?php echo $user->city; ?>" >
<label >Country</label>
<input type="text" name="country" value="<?php echo $user->country; ?>" >
<label >Description</label>
<textarea name="description"><?php echo $user->description; ?></textarea>
<!--INPUT-->
<?php echo $user->profile_img_path; ?>
<input name = "profile_img_path" type="file" class="input-xlarge" id = "profile_img_path" />
<!--submit button-->
<input type="hidden" name="today" value="<?php echo date('Y-m-d H:i:s'); ?>" >
<input type="submit" value="Update">
</form>
<?php endforeach; ?>
<a href="<?=site_url('/')?>">Back</a>
<br/>
</div>
</div>
</div>
回答by Arun
You should include enctype in form
您应该在表单中包含 enctype
enctype="multipart/form-data"
<form id="edit_form" class="form-horizontal" method="post" action="<?php echo base_url() . "users/update_edit/" . $user->user_id; ?>" enctype="multipart/form-data">
回答by Yashah1990
Can you try this code after library is being loaded.
您可以在加载库后尝试此代码。
$this->upload->initialize($config);
if (!$this->upload->do_upload('profile_img_path')) {
$error = array('error' => $this->upload->display_errors());
echo $error['error'];
}
Let us know what exact error you are getting.
让我们知道您遇到的确切错误。
回答by Yashah1990
$config['upload_path'] = '/uploads/profilepics';
points to a folder in the filesystem, which you probably have no write access to. Use a relative path like $config['upload_path'] = './uploads/profilepics';
(./
being the current directory). Also make sure the folder(s) exist and you have write access to it.
$config['upload_path'] = '/uploads/profilepics';
指向文件系统中的一个文件夹,您可能没有写入权限。使用相对路径,如$config['upload_path'] = './uploads/profilepics';
(./
即当前目录)。还要确保文件夹存在并且您对其具有写入权限。