gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:36:08 25 4
gpt4 key购买 nike

我有一个包含默认输入(文本、选择等)和文件上传( <input type="file"> )的多部分表单。

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

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

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

我尝试过不同的事情,例如:

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

还花时间在网上寻找解决方案,但没有成功。

最佳答案

在服务器端,您不会获得有关文件在客户端计算机上的位置的任何信息,因此在用户成功上传图像但用户没有正确填写其余字段的情况下,您有简单地省略 input type="file"字段完全但保留文件在您的服务器上的位置的存储。有几种方法可以解决这个问题,但这都涉及获取上传文件的绝对位置以及:

  • 使用 <input type="hidden" name="uploadedFile" value="<?php echo $absPath; ?>" /> 将其作为隐藏值插入回然后检查 $_POST['uploadedFile'] 是否存在并适本地利用它。但这不是一个可靠的想法,因为您现在将服务器路径暴露给最终用户(使您容易受到恶意攻击。)
  • 启动 session 并将绝对路径保存在 $_SESSION 中变量,同时以重新尝试的形式向用户呈现一个简单的 token 。

  • 我会坚持使用方法 2,因此假设您已完成验证表单并上传文件的所有工作,并且您的文件位于 $absFilePath ,您可以执行以下操作:
    session_start(); // This needs to be at the very top of you PHP file

    // ...

    $formToken = md5(time());
    $_SESSION['uploadedFile'][$formToken] = $absFilePath;

    然后使用以下命令将 token 渲染为隐藏变量:
    if (!empty($_SESSION['uploadedFile'][$formToken]))
    echo '<input type="hidden" name="formToken" value="'.$formToken.'" />';

    并使用隐藏文件上传部分
    if (empty($_SESSION['uploadedFile'][$formToken]))
    echo // <input type="file" output here...

    最后在您的表单提交代码中检查是否存在 formToken尝试加载之前的值 $_FILES['image']使用 isset($_POST['formToken']) ,并使用以下方法处理它:
    $absFilePath = $_SESSION['uploadedFile'][$_POST['formToken']];

    砰!现在您有了绝对文件路径,就好像文件已经像以前一样上传了。

    既然你没有给出足够的代码,我只能给你足够的指导来让你开始,但这应该绰绰有余。

    关于php - 表单提交后填写文件输入/表单提交错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788308/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com