Как проверить, выбрал ли пользователь ВЫБРАН файл для загрузки? - PullRequest
44 голосов
/ 02 июня 2010

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

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

Проблема в том, что, если пользователи хотят редактировать информацию БЕЗ загрузки логотипа, возникает ошибка: «ошибка, которую вы должны загрузить правильный тип»

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

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

но оба, похоже, не работают.

Есть идеи?

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

спасибо.

Ответы [ 5 ]

78 голосов
/ 02 июня 2010

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

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

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

34 голосов
/ 02 июня 2010

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

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

14 голосов
/ 02 июня 2010

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

7 голосов
/ 02 июня 2010

Я бы протестировал if (<a href="http://php.net/file_exists" rel="noreferrer">file_exists</a>($_FILES['logo']['tmp_name'])) и посмотрел бы, работает ли он.

Или, более уместно (спасибо Балу): if (<a href="http://php.net/is_uploaded_file" rel="noreferrer">is_uploaded_file</a>($_FILES['logo']['tmp_name']))

0 голосов
/ 02 июня 2010
if ($_FILES['logo']['error'] === 0)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...