【问题标题】:PHP - accessing a form-submitted file for validationPHP - 访问表单提交的文件以进行验证
【发布时间】:2017-04-28 11:37:53
【问题描述】:

我一直在使用 $_POST 对文本条目进行表单验证。现在我必须通过 HTML type='file' 表单验证上传的文件。我无法通过 $_POST 或 $_FILES 访问它们。有不同的方法可以做到这一点吗?我需要获取文件,以便可以使用 getimagesize() 或 mime_content_type() 检查 MIME 类型

以下是我的表单中的相关部分:

<form action='submission.php' method='POST'>
    <p>Upload photo of professor</p>
    <input type="file" name="pic" accept="image/*>      
    <p>Upload video of professor</p>
    <input type="file" name="video" accept="video/*">
    <p><input type="submit" onclick="validate()"></p>
</form>

submission.php 应该调用验证函数来检查 MIME 类型是否为图像,如果我可以获取文件。

function validateimage(&$errors, $field_list, $field_name, $pattern) {
    if (isset($field_list[$field_name])) {
        if (!preg_match($pattern, mime_content_type($field_list[$field_name]))) {
            $errors[$field_name] = 'Please upload an image file';
        }
    } else {
        $errors[$field_name] = 'Required field';
    }
}

enctype="multipart/form-data" 添加到我的字段并将$field_list 设置为$_FILES 后,它几乎可以工作了。但是,isset($_FILES['pic']) 似乎总是正确的,因为当我尝试提交而不上传时,我收到了这个警告:

validateimage($errors, $_FILES, 'pic', '/^image/i');

警告:mime_content_type():第 36 行 /Applications/XAMPP/xamppfiles/htdocs/cs4ww3/Assignment 3/validate.inc.php 中的文件名或路径为空

【问题讨论】:

  • 表单中缺少 enctype
  • 表单应该是
  • @Shanukk 谢谢!它正在提交并且现在没有给我错误,但似乎我的验证没有按预期工作。你觉得那里有什么问题吗?
  • -你能告诉我们你的完整代码吗?
  • @Shanukk hhmmm... 我认为这些都是相关的部分,其他一切都可能太笨重了。基本上我有一个 $errors 数组,我填充了不同的验证函数。如果我有一个像 ` 这样的表单,在服务器端验证之后,它会创建一个错误,如 $errors['username']。从我调用 validateimage() 的方式可以看出,它首先无法从 'pic' 中找到文件

标签: php html forms validation post


【解决方案1】:

为了使用提交的文件填充$_FILES,您需要在您的html 中将表单上的enctype attr 设置为multipart/form-data

<form action='submission.php' method='POST' enctype="multipart/form-data">

   ...

</form>

【讨论】:

  • 啊,我明白了,谢谢。它正在提交并且现在没有给我错误,但似乎我的验证没有按预期工作。你觉得那里有什么问题吗?
  • 我唯一能看到的是你应该在你的 if 语句中尝试mime_content_type($field_list[$field_name]['tmp_name])。此函数需要文件名,并且您将其传递给整个数组。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2011-11-18
  • 2016-02-14
相关资源
最近更新 更多