как я могу проверить, что пользователь выбрал по крайней мере один файл для загрузки в код ниже? я пробовал с 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();
}
наконец, я нашел ответ, я даю его здесь для других пользователей, у меня есть 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
}
Здесь, как я это делаю, это пара 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 и различные панели поиска с помощью браузера и т.д. как это всегда должно быть сделано на стороне сервера!
Существует несколько способов сделать это с помощью PHP (например, проверить, является ли конкретный входной файл пустым), но с JS он быстрее и дешевле на сервере. Используя jQuery, вы можете сделать это:
$.fn.checkFileInput = function() {
return ($(this).val()) ? true : false;
}
if ($('input[type="file"]').checkFileInput()) {
alert('yay');
}
else {
alert('gtfo!');
}
<?php if(!isset($_POST['elem']) || $_POST['elem']=== null || empty($_POST['elem'])) echo "No selected element"; ?>