Php 表单提交后填写文件输入/表单提交错误

Php 表单提交后填写文件输入/表单提交错误,php,forms,codeigniter,Php,Forms,Codeigniter,我有一个包含默认输入(文本、选择等)和文件上传()的多部分表单 我使用表单验证类和Codeigniter上传库的组合来提交表单。这很有效 对于我还没有找到解决方案的问题,我只有一个问题:如果用户选择了一个图像,但没有填充另一个必填字段(如“名称”),那么表单验证类会阻止请求并向客户显示错误消息 但是现在我遇到了一个问题,图像已经成功提交,我不想让用户再次添加文件。所以我想用这些数据预填充文件输入 我尝试过不同的方法,比如: <input type="file" name="image" v

我有一个包含默认输入(文本、选择等)和文件上传(
)的多部分表单

我使用表单验证类和Codeigniter上传库的组合来提交表单。这很有效

对于我还没有找到解决方案的问题,我只有一个问题:如果用户选择了一个图像,但没有填充另一个必填字段(如“名称”),那么表单验证类会阻止请求并向客户显示错误消息

但是现在我遇到了一个问题,图像已经成功提交,我不想让用户再次添加文件。所以我想用这些数据预填充文件输入

我尝试过不同的方法,比如:

<input type="file" name="image" value="<?php echo set_value('image','');?>" />

在服务器端,您无法获得有关文件在客户端计算机上的位置的任何信息,因此在用户成功上载图像但用户未正确填写其余字段的情况下,您只需省略
输入type=“file”
字段,但保留文件在服务器上的存储位置。有几种方法可以做到这一点,但都需要获取上传文件的绝对位置,并:


  • 使用
    将其作为隐藏值插入,当用户已上传图像时,尝试使用隐藏输入,如
    Ok,因此CI中似乎没有允许我解决问题的设计模式!?“手动”解决方案总是一种可行的方法,但在使用框架时并不是很好:)感谢您的投入@Michael框架是框架。。。它们为您提供了简单的东西和帮助功能,使工作更容易,但并不能完成所有工作!即使是我最喜欢的框架Symfony,也没有一个完全优雅的方式来处理文件上传,因为有太多的首选方式来实现它。由于您使用的是CI,因此可以使用CI提供的POST辅助函数替换
    $\u POST
    变量。如果你觉得这个答案帮助了你或解决了你的问题,请随意将其标记为正确:)我知道框架的含义:)但这不是我第一次独自构建一个复杂的功能,一周后发现这个功能已经由框架提供,但我没有找到它(究竟是什么原因):)
    session_start(); // This needs to be at the very top of you PHP file
    
    // ...
    
    $formToken = md5(time());
    $_SESSION['uploadedFile'][$formToken] = $absFilePath;
    
    if (!empty($_SESSION['uploadedFile'][$formToken]))
        echo '<input type="hidden" name="formToken" value="'.$formToken.'" />';
    
    if (empty($_SESSION['uploadedFile'][$formToken]))
        echo // <input type="file" output here...
    
    $absFilePath = $_SESSION['uploadedFile'][$_POST['formToken']];