如何测试用户是否选择了要上传的文件?

2022-08-30 11:14:44

在页面上,我有:

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的情况下编辑信息,则会引发错误:“错误您必须上传正确的类型”

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

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

但两者似乎都不起作用。

有什么想法吗?

编辑:也许我不是那么清楚,我不想测试他是否上传了徽标,我想测试他是否选择了一个文件来上传,因为现在,如果他不选择要上传的文件,php会引发一个错误,告诉他必须以正确的格式上传。

谢谢。


答案 1

您可以使用以下命令进行检查:

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

或者,您可以使用javascript结构,仅当上传字段具有空字符串(“”)以外的值时,才启用上传/提交按钮,以避免提交根本没有上传的表单。


答案 2

php 文档中有一节是关于文件处理的您会发现您可以检查各种错误,其中之一是

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) { ... }

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


推荐