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

0

как я могу проверить, что пользователь выбрал по крайней мере один файл для загрузки в код ниже? я пробовал с in_array, isset,! empty функциями, но не успел заметить, что вход в файл пользователя - массив в html

if(!empty($_FILES['userfile']['tmp_name'])){
            $upload_dir = strtolower(trim($_POST['name']));
  // Create directory if it does not exist
                if(!is_dir("../photoes/". $upload_dir ."/")) {
                     mkdir("../photoes/". $upload_dir ."/");
                }
            $dirname = "../photoes/".$upload_dir;

                    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++)
                        {
            // check if there is a file in the array
                         if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i]))
                            {
                            $messages[] = 'No file selected for no. '.$i.'field';
                            }
            /*** check if the file is less then the max php.ini size ***/
                        if($_FILES['userfile']['size'][$i] > $upload_max)
                             {
                             $messages[] = "File size exceeds $upload_max php.ini limit";
                             }
            // check the file is less than the maximum file size
                        elseif($_FILES['userfile']['size'][$i] > $max_file_size)
                            {
                            $messages[] = "File size exceeds $max_file_size limit";
                            }
                        else
                            {
                // copy the file to the specified dir 
                            if(@copy($_FILES['userfile']['tmp_name'][$i],$dirname.'/'.$_FILES['userfile']['name'][$i]))
                                {
                    /*** give praise and thanks to the php gods ***/
                                $messages[] = $_FILES['userfile']['name'][$i].' uploaded';
                                }

                            }
                        }
                }else{
                $messages[] = 'No file selected for upload, Please select atleast one file for upload';
                dispform();
            }
  • 1
    Вы должны так это на клиенте.
  • 0
    Вы можете просто проверить, является ли элемент формы пустым или нет. как это: <?php if(!isset($_POST['elem']) || $_POST['elem']=== null || empty($_POST['elem'])) echo "No selected element"; ?>
Показать ещё 2 комментария
Теги:

3 ответа

0
Лучший ответ

наконец, я нашел ответ, я даю его здесь для других пользователей, у меня есть 5 ключей в html-массиве ввода, поэтому индекс массива до 4

if(!empty($_FILES['userfile']['tmp_name'][0]) or !empty($_FILES['userfile']['tmp_name'][1]) or !empty($_FILES['userfile']['tmp_name'][2]) or !empty($_FILES['userfile']['tmp_name'][3]) or !empty($_FILES['userfile']['tmp_name'][4])){
//at-least one file is selected so proceed to upload 
}else{
//no file selected, notify user
}
0

Здесь, как я это делаю, это пара if, и я использую цикл for, поскольку я разрешаю загрузку нескольких файлов из одной папки, но ее, если это более важно для вас

$uploaded = count($_FILES['userfile']['name']);
for ($i=0;$i<$uploaded;$i++) {
    if (strlen($_FILES['userfile']['name'][$i])>1) {
       // file exists so do something
    } else {
      //file doesn't exist so do nothing
    }
}

Вы заметите, что я сравниваю с элементом name глобального $ _FILES, потому что вы никогда не сможете загрузить файл без имени, которое также применяется для не загруженного файла

Не делайте это на стороне клиента, это глупое место для проверки, так как пользователь может просто отключить обработку js в браузере или заблокировать его некоторыми аддонами или перехватить и изменить через firebug и различные панели поиска с помощью браузера и т.д. как это всегда должно быть сделано на стороне сервера!

  • 0
    Я попробовал это также, но если никогда не сбудется, даже пользователь выбирает файл
  • 0
    Вы пробовали var_dump ($ _ FILES); проверить, что файлы действительно публикуются в? Выше работает нормально в моих приложениях.
0

Существует несколько способов сделать это с помощью PHP (например, проверить, является ли конкретный входной файл пустым), но с JS он быстрее и дешевле на сервере. Используя jQuery, вы можете сделать это:

$.fn.checkFileInput = function() {
    return ($(this).val()) ? true : false;
}


if ($('input[type="file"]').checkFileInput()) {
    alert('yay');
}
else {
    alert('gtfo!');
}
  • 0
    Я новичок в JS, но я попробую это
  • 0
    Не забудьте включить для этого jQuery.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню