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

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

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, возникает ошибка: «Ошибка вы должны загрузить нужный тип»,

Таким образом, если пользователь ничего не помещал в поле ввода, чтобы загрузить его, я не хочу вводить в эти условия тест.

я тестировал: if (!empty($_FILES['logo']['name']) и if (isset($_FILES['logo']['name'])

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

Есть идеи?

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

Благодарю.

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

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

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

В документации 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) { ... } 

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

Вы должны использовать is_uploaded_file ($ _ FILES ['logo'] ['tmp_name']), чтобы убедиться, что файл действительно загружен через POST.

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

Или, более уверенно (спасибо Baloo): if ( is_uploaded_file ($_FILES['logo']['tmp_name']))

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

это единственный правильный путь