Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка поля типа file
 
 автор: chexov   (23.08.2010 в 04:31)   письмо автору
 
 

Доброго времени суток есть вопрос

Форма содержит 3 поля типа file, как перед сохраннением проверить выбран ли хоть один файл?
isset и empty не выходит, форма отправляется успешно:(((((

  Ответить  
 
 автор: Commander   (23.08.2010 в 06:41)   письмо автору
 
   для: chexov   (23.08.2010 в 04:31)
 

<?php
$fileexists 
false;
if (
file_exists($_FILES['file1']['tmp_name'])){
    
$fileexists true;
}
else{
    if (
file_exists($_FILES['file2']['tmp_name'])){
         
$fileexists true;
    }
    else{
         if (
file_exists($_FILES['file3']['tmp_name'])){
            
$fileexists true;
        }
    }
}
if (!
$fileexists$error "Пожалуйста, укажите хотя бы один файл";
?>

  Ответить  
 
 автор: sim5   (23.08.2010 в 06:44)   письмо автору
 
   для: Commander   (23.08.2010 в 06:41)
 

А зачем? Количество элементов массива $_FILES достаточно проверить.

  Ответить  
 
 автор: chexov   (23.08.2010 в 08:47)   письмо автору
 
   для: sim5   (23.08.2010 в 06:44)
 

сделал так:
<?php
for( $i 0$i count($_FILES['file']['tmp_name']); $i++) 
    {
    if (empty(
$_FILES['file']['tmp_name'][$i])) echo "Пожалуйста, укажите хотя бы один файл";
   }
?>


работает, но только если выбраны все 3 файла...

Или сделать проверку первого поля
<?php
for( $i 0$i count($_FILES['file']['tmp_name']); $i++) 
    {
    if (empty(
$_FILES['file']['tmp_name']['0'])) echo "Пожалуйста, укажите хотя бы один файл";
   }
?>

  Ответить  
 
 автор: xMikeXeeioi   (23.08.2010 в 09:40)   письмо автору
 
   для: chexov   (23.08.2010 в 08:47)
 


if (count($_FILES['file']['tmp_name']) === 0 ) echo "Пожалуйста, укажите хотя бы один файл";


у вас в коде, в цикле если хотя бы один файл не указан, то будет выводится сообщение, поэтому и работает только при указании 3х файлов

  Ответить  
 
 автор: sim5   (23.08.2010 в 10:53)   письмо автору
 
   для: xMikeXeeioi   (23.08.2010 в 09:40)
 

Так нельзя проверять. Количество ключей будет возвращено столько, сколько элементов в форме, и не важно, пустые они или нет.

  Ответить  
 
 автор: Commander   (23.08.2010 в 09:49)   письмо автору
 
   для: chexov   (23.08.2010 в 08:47)
 


<?php
    $fileexists 
false;
    foreach (
$_FILES as $value){
        if (
file_exists($value['tmp_name'])){
            
$fileexists true;
            break;
        }
    }
    if (! 
$fileexists) echo "Пожалуйста, укажите хотя бы один файл";
?>

  Ответить  
 
 автор: sim5   (23.08.2010 в 10:38)   письмо автору
 
   для: chexov   (23.08.2010 в 08:47)
 

Достаточно проверить количество возвращаемых элементов массива $_POST ключа ['file']['tmp_name'] (пример для условия, если поля именуются как file[]).
<?
if($num array_diff($_FILES['file']['tmp_name'], array(''))) echo count($num);
else echo 
"No files";

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования