【问题标题】:How to test if a user has SELECTED a file to upload?如何测试用户是否选择了要上传的文件?
【发布时间】:2011-02-26 20:11:00
【问题描述】:

在一个页面上,我有:

if (!empty($_FILES['logo']['name'])) {
    $dossier     = 'upload/';
    $fichier     = basename($_FILES['logo']['name']);
    $taille_maxi = 100000;
    $taille      = filesize($_FILES['logo']['tmp_name']);
    $extensions  = array('.png', '.jpg', '.jpeg');
    $extension   = strrchr($_FILES['logo']['name'], '.');

    if(!in_array($extension, $extensions)) {
        $erreur = 'ERROR you  must upload the right type';
    }

    if($taille>$taille_maxi) {
         $erreur = 'too heavy';
    }

    if(!empty($erreur)) {
      // ...
    }
}

问题是,如果用户想在不上传LOGO的情况下编辑信息,则会引发错误:'error you must upload the right type'

所以,如果用户没有在输入框中输入任何内容来上传它,我不想进入这些条件测试。

我测试过: if (!empty($_FILES['logo']['name'])if (isset($_FILES['logo']['name'])

但两者似乎都不起作用。

有什么想法吗?

编辑:也许我不太清楚,我不想测试他是否上传了徽标,我想测试他是否选择了要上传的文件,因为现在,如果他没有选择文件要上传,php 会报错,告诉他必须以正确的格式上传。

谢谢。

【问题讨论】:

    标签: php file upload


    【解决方案1】:

    您可以通过以下方式检查:

    if (empty($_FILES['logo']['name'])) {
        // No file was selected for upload, your (re)action goes here
    }
    

    或者您可以使用 javascript 构造,仅当上传字段的值不是空字符串 ("") 时才启用上传/提交按钮,以避免在根本不上传的情况下提交表单。

    【讨论】:

    • 这就是我想要的。谢谢... +1 提问和回答。 (y)
    【解决方案2】:

    php 文档中有一段关于file handling。您将find 可以检查各种错误,其中之一是

    UPLOAD_ERR_OK
        Value: 0; There is no error, the file uploaded with success.
    <...>
    UPLOAD_ERR_NO_FILE
        Value: 4; No file was uploaded.
    

    在您的情况下,您需要类似的代码

    if ($_FILES['logo']['error'] == UPLOAD_ERR_OK) { ... }
    

    if ($_FILES['logo']['error'] != UPLOAD_ERR_NO_FILE) { ... }
    

    您还应该考虑检查(并可能为用户提供适当的响应)其他各种错误。

    【讨论】:

    • @Tristan 睁开眼睛看看:值:4; 没有上传文件
    • @Col。弹片哎呀,确实,对不起,也许是我戴眼镜的时候了;p
    • 我自己检查了这个。这确实是检查这种情况的正确方法。另请注意:“如果您的表单中没有选择要上传的文件,PHP 将返回 $_FILES['userfile']['size'] 为 0,并且 $_FILES['userfile']['tmp_name'] 为无。” (来自 PHP 文档)php.net/manual/en/features.file-upload.post-method.php
    【解决方案3】:

    您应该使用is_uploaded_file($_FILES['logo']['tmp_name']) 来确保文件确实是通过 POST 上传的。

    【讨论】:

    • 我在我的帖子中添加了一些信息。如果你能看看它。谢谢
    【解决方案4】:

    我会测试if (@987654321@($_FILES['logo']['tmp_name'])) 看看它是否有效。

    或者,更恰当地说(感谢 Baloo):if (@987654322@($_FILES['logo']['tmp_name']))

    【讨论】:

    • 我在我的帖子中添加了一些信息。如果你能看看它。谢谢
    【解决方案5】:

    我们可以使用

    对于单个文件:

    if ($_FILES['logo']['name'] == "") {
        // No file was selected for upload, your (re)action goes here
    }
    

    对于多个文件:

    if ($_FILES['logo']['tmp_name'][0] == "") {
        // No files were selected for upload, your (re)action goes here
    }
    

    【讨论】:

      【解决方案6】:
      if ($_FILES['logo']['error'] === 0)
      

      是唯一正确的方法

      【讨论】:

      猜你喜欢
      • 2016-06-06
      • 2016-02-15
      • 2021-11-02
      • 2010-09-07
      • 2016-11-12
      • 1970-01-01
      • 2011-04-04
      • 2016-10-31
      • 2011-09-05
      相关资源
      最近更新 更多