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

Форум PHP

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

 

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

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

тема: Загрузка нескольких файлов на сервер
 
 автор: kis-kis   (20.12.2007 в 21:08)   письмо автору
 
 

Есть форма:


<form name="form1" method="post" action="" enctype="multipart/form-data">
  <input type="file[]" name="file">
  <br>
  <input type="file[]" name="file2">
  <br>
  <input type="file[]" name="file3">
  <br>
  <input type="file[]" name="file4">
  <br>
  <input type="submit" name="Submit" value="Submit">
</form>


Подскажите, как загрузить все файлы на сервер? И еще как сделать проверку на тип файлов (только изображения), размер файлов (не более 200 Kb).

Спасибо.

   
 
 автор: sim5   (20.12.2007 в 21:26)   письмо автору
 
   для: kis-kis   (20.12.2007 в 21:08)
 

<input type="file" name="namefile[]"> - массивом может быть имя поля, но никак не его тип!
Обрабатывайте полученный массив $_FILES['namefile'].

   
 
 автор: kis-kis   (28.12.2007 в 20:22)   письмо автору
 
   для: sim5   (20.12.2007 в 21:26)
 

Есть форма и обработчик (код ниже) помогите с массивом разобраться, почему в конечном итоге если загружаешь всего 1 фото, то $foto принимает значение - 3-1.jpg|3-2|3-3|3-4| , а должно быть всего 3-1.jpg|

Вот код:


<?php
if (($_POST) and ($add == "1"))
{
$err=0;

if (isset(
$HTTP_POST_FILES['pict'])) 
{

for(
$i 0$i count($HTTP_POST_FILES['pict']['name']); $i++) 
{

if (
$HTTP_POST_FILES['pict']['size'][$i]>$mmn_auto_foto

$err=1;
$bad .= "Размер фотографии - ".$HTTP_POST_FILES[pict][name][$i]." - больше допустимого<br>";

}
//i
}


if (
$bad
{
echo 
"<div class=\"error_add\">".$bad."</div>";
}
else
{


//Добавляем информацию в базу

$path "$mmn_root_path/auto/foto/";
$foto '';
$id 3;

// Изменяеи имя фото в соответствии с id
for ($i=0$i<count($HTTP_POST_FILES['pict']['name']); $i++)
{
$num $i+1;
$str $HTTP_POST_FILES['pict']['name'][$i]; 
$pos strrpos($str'.'); 
$name_foto $id.'-'.$num.substr($str$pos);

// Копируем на сервер
copy ($HTTP_POST_FILES['pict']['tmp_name'][$i], $path $name_foto);

// Массив фото для добавления в базу
$foto .= "".$name_foto."|";

}
// Конечное значение массива
echo $foto;

}
}
if (
$err == "1" or $add <> "1")
{

echo
"<form name=\"form1\" method=\"post\" action=\"\" enctype=\"multipart/form-data\">
<input type=\"file\" name=\"pict[]\"><br>
<input type=\"file\" name=\"pict[]\"><br>
<input type=\"file\" name=\"pict[]\"><br>
<input type=\"file\" name=\"pict[]\"><br>
 <input type=\"submit\" name=\"Submit\" value=\"Submit\"><input type=\"hidden\" name=\"add\" value=\"1\">
</form>"
;
}
?>


Спасибо.

   
 
 автор: kis-kis   (29.12.2007 в 10:14)   письмо автору
 
   для: kis-kis   (28.12.2007 в 20:22)
 

Нет никаких вариантов?

   
 
 автор: Unkind   (29.12.2007 в 11:59)   письмо автору
 
   для: kis-kis   (29.12.2007 в 10:14)
 

Нужно сохранять только файлы, которые были загружены успешно, а именно те, у которых $_FILES['pict']['error'][$i] == 0.

P.S. Вместо copy() желательно использовать move_uploaded_file().

   
 
 автор: kis-kis   (29.12.2007 в 13:12)   письмо автору
 
   для: Unkind   (29.12.2007 в 11:59)
 

К сожалению, это $_FILES['pict']['error'][$i] == 0 не помогло, массив все равно принимает неправильное значение... ((

>>P.S. Вместо copy() желательно использовать move_uploaded_file().

А в чем разница, не подскажите?

   
 
 автор: Unkind   (29.12.2007 в 13:46)   письмо автору
 
   для: kis-kis   (29.12.2007 в 13:12)
 

> К сожалению, это $_FILES['pict']['error'][$i] == 0 не помогло
Покажите, как Вы проверку делаете.

> А в чем разница, не подскажите?
Разница в том, что move_uploaded_file() сможет скопировать файл из директории, доступ к которой закрыт из-за safe_mode или open_basedir.

   
 
 автор: kis-kis   (29.12.2007 в 13:52)   письмо автору
 
   для: Unkind   (29.12.2007 в 13:46)
 


if ($_FILES['pict']['error'][$i] == 0)
{
// Изменяеи имя фото в соответствии с id
for ($i=0; $i<count($HTTP_POST_FILES['pict']['name']); $i++)
{
$num = $i+1;
$str = $HTTP_POST_FILES['pict']['name'][$i]; 
$pos = strrpos($str, '.'); 
$name_foto = $id.'-'.$num.substr($str, $pos);

// Копируем на сервер
move_uploaded_file ($HTTP_POST_FILES['pict']['tmp_name'][$i], $path . $name_foto);

// Массив фото для добавления в базу
$foto .= "".$name_foto."|";

}
}

   
 
 автор: Unkind   (29.12.2007 в 14:03)   письмо автору
 
   для: kis-kis   (29.12.2007 в 13:52)
 

Наоборот проверка должна быть в теле цикла...

<?php
// ...

// Изменяеи имя фото в соответствии с id 
for ($i=0$i<count($_FILES['pict']['name']); $i++) 

    if(
$_FILES['pict']['error'][$i] == 0
    { 
        
$num $i+1
        
$str $_FILES['pict']['name'][$i];  
        
$pos strrpos($str'.');  
        
$name_foto $id.'-'.$num.substr($str$pos); 

        
// Копируем на сервер 
        
move_uploaded_file ($_FILES['pict']['tmp_name'][$i], $path $name_foto); 

        
// Массив фото для добавления в базу 
        
$foto .= "".$name_foto."|"
    } 
}
?>

   
 
 автор: kis-kis   (29.12.2007 в 15:20)   письмо автору
 
   для: Unkind   (29.12.2007 в 14:03)
 

Спасибо, работает. А не подскажите как еще сделать проверку на тип загружаемых файлов?

   
 
 автор: Unkind   (29.12.2007 в 15:28)   письмо автору
 
   для: kis-kis   (29.12.2007 в 15:20)
 

<?php
// ...

$allow = array(
IMAGETYPE_GIF,
IMAGETYPE_JPEG,
IMAGETYPE_PNG,
IMAGETYPE_BMP
);

if( !
in_array(exif_imagetype($filename), $allow) )
{
    
// Предупреждение
}
else
{
    
// Сохранение
}
?>


Но сохранять надо только с тем расширением, которое может быть у соответствующих типов изображений GIF => *.gif, JPEG => *.jpg и т.д.

   
Rambler's Top100
вверх

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