【问题标题】:PHP remember file field contentsPHP记住文件字段内容
【发布时间】:2009-08-25 07:52:38
【问题描述】:

我有一个带有文本输入和文件输入的表单;正在验证文本字段。有没有办法让表单记住用户已经选择了哪些文件,如果他们点击提交但需要返回,因为其中一个文本字段没有验证?

【问题讨论】:

  • 在调用PHP脚本之前文件上传已经完成。

标签: php


【解决方案1】:

出于安全原因,您不能“预填充”文件上传字段的内容。此外,这意味着每次提交表单时都会重新上传文件,这不是很好。

相反,这样做:

  • 创建名称为file_upload 的文件上传字段。
  • 在服务器端,无论如何都要处理上传,即使其余的表单验证失败。
  • 如果表单验证失败,但文件已上传,请在表单中插入一个名为 file 的隐藏输入,其中包含刚刚上传的文件的名称。
  • 显示文件正常的用户可见指示。如果是图像,则显示它的缩略图版本。如果是任何其他文件,请显示其文件名和/或图标。
  • 如果用户选择在file_upload 字段中上传不同的文件,则处理上传并将新值存储在file 中。

伪代码:

<?php
    $file = null;
    if (!empty($_POST['file'])) {
        $file = $_POST['file'];
    }
    if (!empty($_FILES['file_upload'])) {

        // process upload, save file somewhere

        $file = $nameOfSavedFile;
    }

    // validate form
?>


<input type="file" name="file_upload" />
<input type="hidden" name="file" value="<?php echo $file; ?>" />
<?php
    if (!empty($file)) {
        echo "File: $file";
    }
 ?>

重要提示

此机制可以允许任何用户通过包含他们猜测存在于您的服务器上的file 名称来声明其他用户的文件为他们自己的文件。您需要确保上传的文件明确与特定用户相关联,以避免此问题。

【讨论】:

  • 谢谢,我正在使用 Codeignitor 框架,我是新手,但我会尝试以某种方式实现它。
  • 现在工作,在 CI 中做起来比我想象的要容易。
  • 太好了。但是我应该怎么做才能将照片保存在数据库中?
【解决方案2】:

文件输入字段是只读的,您不能为它们设置初始值

【讨论】:

    【解决方案3】:

    您仍然可以上传文件并显示文件名而不是文件选择框。要记住这些字段,您可以使用 $_SESSION 变量。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 2012-07-13
      • 2011-04-23
      • 1970-01-01
      • 2012-05-13
      • 2022-08-14
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多