上下文:用户注册后,我正在使用#updateprofileform更新user_profile数据,我能够使用标准验证处理所有其他表单字段,并使用usermode插入/更新。问题是resume
字段,它应该接受一个文件作为输入类型并上传到服务器并将其路径存储在服务器上(比如http://domain/uploads/$filename(添加到数据库中的列。
期望登录用户,能够查看他的详细信息(如果已经在数据库中(,如果配置文件不完整,则可以更新详细信息。
问题:我找到了如何使用CI框架将文件上传到服务器,或者如何使用jquery/ajax/java脚本在这种情况下上传文件的方法。但我正在为上述问题寻找简单的解决方案,它可以在不依赖技术的情况下完成工作。
user_profile.php(查看(
<table>
<form class="row" name="updateprofile" action = "<?php echo base_url()?>user/user_profile" method="POST">
<tr>
<td><label for="email">Email ID</label></td><td><input class="form-control" name="email" placeholder="Email-ID" type="text" value="<?php if (isset($email)) echo $email;?>" /> <span style="color:red"><?php echo form_error('email'); ?></span></td>
</tr>
<tr>
<td><label for="resume">Resume</label></td>
<td>
<input name="resume" placeholder="Upload resume" type="file" value="<?php if (isset($resume)) echo $resume;?>" />
<span style="color:red"><?php echo form_error('resume'); ?>
</span>
</td>
</tr>
<tr>
<td></td>
<td><div class="col-md-6 col-lg-3"> <button type="submit" class="btn btn--primary type--uppercase" name="updateprofile" value="updateprofile" formaction = "<?php echo base_url()?>user/user_profile">Update Profile</button> </div></td>
</tr>
</form>
</table>
user_controller
class User extends CI_Controller {
public function __construct()
{
parent::__construct();
$config = array(
'upload_path' => "./uploads/",
'allowed_types' => "doc|docx|pdf",
'overwrite' => TRUE,
'max_size' => "2048000", // Can be set to particular file size , here it is 2 MB(2048 Kb)
//'max_height' => "768",
//'max_width' => "1024"
);
$this->load->library('upload', $config);
}
public function user_profile()
{
$resume = $this->input->post('resume');
if ($this->user_model->set_user_profile($id,FALSE) )
{ if($this->do_upload($resume)){
$this->session->set_flashdata('msg_success','Updation Successful!');
echo validation_errors();}
}
else
{
$this->session->set_flashdata('msg_error','Error! Please try again later.');
redirect('user/user_profile');
}
public function do_upload($resume){
if($this->upload->do_upload($resume))
{
$data = array('upload_data' => $this->upload->data($resume));
$this->load->view('user_profile',$data);
}
else
{
$error = array('error' => $this->upload->display_errors($resume));
$this->load->view('user_profile', $error);
}
}
当前总是出错。。。。错误请稍后再试。因此,请欣赏这里的一些指针,它们可以将文件和表单数据一起上传,并在不使用ajax/jquery的情况下将文件位置保存在数据库中。
感谢
将表单定义更改为以下内容:
<form class="row" action = "<?php echo base_url('user/user_profile'); ?>" method="post" enctype="multipart/form-data" name="updateprofile" >
已解决!需要4个重要步骤,但在大多数问答中缺少一些步骤;在所有其他帖子中的A完成了这项工作。当我有空时,将在github中共享示例代码。
- 表单加密类型必须为enctype="multipart/form data"(谢谢致@Javier Larroulet和@dexter(
- do_upload方法默认情况下查找name=userfile的文件字段(感谢@Alex!引用这篇文章(,所以,如果你有表单的文件字段名不同于userfile,则只有需要提到do_upload("文件字段名"(,否则可选
- 加载上传库配置很棘手如果自动上传上传库,然后load->libraryupload-config将失败,你just=>初始化它。$this->upload->initialize($config(;如果你没有对上传库使用自动加载,那么是的,你可以加载它来自控制器$this->load->library('pload',$config(
- 当你使用上传时,你必须捕捉表单验证错误和数据错误(再次感谢@Alex指出这一点(
代码点火器在这个链接上提供了一个很好的文档(https://www.codeigniter.com/userguide3/libraries/file_uploading.html#the-控制器(,但不突出显示常规错误。
希望这篇文章能帮助人们不要再浪费24小时进行调试。