【发布时间】: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