Подтвердить что ты не робот

Как проверить, если пользователь выбрал файл для загрузки?

на странице, у меня есть:

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'])

но оба они не работают.

Любые идеи?

edit: может быть, я не был таким ясным, я не хочу проверять, загрузил ли он логотип, я хочу проверить, выбрал ли он файл для загрузки, потому что прямо сейчас, если он не выбирает файл для загрузки, php вызывает ошибку, сообщающую, что он должен загружать нужный формат.

спасибо.

4b9b3361

Ответ 1

Вы можете проверить это с помощью:

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

Или вы можете использовать конструкцию javascript, которая включает только кнопку upload/submit, когда поле загрузки имеет значение, отличное от пустой строки (""), чтобы избежать отправки формы без загрузки вообще.

Ответ 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) { ... }

Вы должны рассмотреть возможность проверки (и, возможно, предоставления соответствующего ответа для пользователя) для других различных ошибок.

Ответ 4

Я бы проверил if (file_exists($_FILES['logo']['tmp_name'])) и посмотрел, работает ли он.

Или, более подходящим (спасибо Baloo): if (is_uploaded_file($_FILES['logo']['tmp_name']))

Ответ 5

if ($_FILES['logo']['error'] === 0)

- единственный правильный способ