【问题标题】:php html file upload form validation errorphp html文件上传表单验证错误
【发布时间】:2014-03-03 18:52:00
【问题描述】:

我在表单验证方面遇到问题。当我没有选择要上传的文件时,我仍然会收到一个错误,提示只有 png 图像有效。我认为如果没有选择文件,$_FILES 数组将为空。

我做错了什么?

我用于文件上传的 html 表单摘录如下所示:

<label for="file">Filename
<span class="small">Upload image</span>
</label>
<input type="file" name="file" id="file">

我的 php 处理如下:

 $submitted_file = $_FILES['file'];

 if(isset($submitted_file)) {

    // verify the file PNG only
    $fileType = exif_imagetype($submitted_file["tmp_name"]);
    $allowed = array(IMAGETYPE_PNG);
    $max_filesize = 512000;

    if (!in_array($fileType, $allowed)) {
    $proceed = false;
    $arrErrors['submitted_file_ext'] = 'Please upload .png images only.';
    }
}

【问题讨论】:

  • var_dump($_FILES); 并看到即使您不加载文件,$_FILES 数组仍然设置。
  • 您正在查看 isset($submitted_file),您将其设置为等于 $_FILES["file"]。所以即使它是空的,它也会被设置。您应该使用 empty() 函数或 if($submitted_file=="") 之类的函数检查它是否为空
  • 我做了一个 var_dump 并得到了 array(5) { ["name"]=> string(0) "" ["type"]=> string(0) "" ["tmp_name"] => string(0) "" ["error"]=> string(1) "4" ["size"]=> string(1) "0" }
  • 如果变量等于null - isset 返回false,顺便说一句

标签: php html forms file upload


【解决方案1】:

如果您正在检查的数组为空,则应将字段 ["tmp_name"] 设为 null。试试这个代码:

if(!empty($submitted_file["tmp_name"])) {

【讨论】:

  • 我试过不为空但没用 if(!empty($submitted_file)) {
  • 谢谢。那行得通。如果你不介意告诉我,为什么要解决它。
  • tmp_name 是上传文件在服务器上的临时位置。如果没有上载文件,则值“tmp_name”将为空。因此,empty() 命令正在查看该值是否为空。
【解决方案2】:

正确的方法是查看$_FILES['error']

if ($_FILES['name']['error'] === UPLOAD_ERR_OK) {
    // file successfully uploaded
}

更多信息在这里http://ru2.php.net/manual/en/features.file-upload.php

【讨论】:

    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2023-03-17
    相关资源
    最近更新 更多