Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Загрузка нескольких файлов на сервер

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
KuPbI4
Отправлено: 04 Августа, 2011 - 22:19:04
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Всем здравствуйте!

У меня поставлена задача сделать загрузку нескольких файлов на сервер, но она у меня не очень получается, т.е. с одним файлом загрузки на сервер и добавлением имени файла в БД все хорошо, а с двумя и более - плохо, т.е. не загружается второй файл и не записывается имя файла в БД.
Прилагаю кусочек кода HTML:
CODE (html):
скопировать код в буфер обмена
  1.  
  2.         <form action="add.php" method="post" ENCTYPE="multipart/form-data">
  3.         <label>
  4.           Файл изображения №1: <input type="file" name="file[]"><br>
  5.           Файл изображения №2: <input type="file" name="file[]"><br>
  6.     </label>
  7.         </form>
  8.  

Прилагаю кусочек кода PHP:
PHP:
скопировать код в буфер обмена
  1.  
  2. if(is_uploaded_file($_FILES["file"]["tmp_name"][0])) {
  3.                                                                                 $img1=$file;
  4.                                                                                 $file=$_FILES['file']['name'];
  5.                                                                                 copy($_FILES['file']['tmp_name'][0],"../img/cars/".$_FILES['file']['name']);
  6.                                                                         if(is_uploaded_file($_FILES["file"]["tmp_name"][1])) {
  7.                                                                                 $img2=$file1;
  8.                                                                                 $file1=$_FILES['file1']['name'];
  9.                                                                                 copy($_FILES['file']['tmp_name'][1],"../img/cars/".$_FILES['file1']['name']);
  10. //дальше там идет SQL добавление записи в БД
  11. $query="INSERT INTO cars ( model, year, mesto, phone, probeg, kpp, moschnost, money, img1, img2 ) VALUES ('$model', '$year', '$mesto', '$phone', '$probeg', '$kpp', '$moschnost', '$money', '$img1', '$img2')";
  12. }
  13.  

Как эту проблему решить?!

И в добавок, посоветуйте пожалуйста, какие лучшие jquery плагины мульти-загрузочных файлов можно использовать?!

(Отредактировано автором: 05 Августа, 2011 - 01:37:45)

 
 Top
KuPbI4
Отправлено: 05 Августа, 2011 - 18:21:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Кто-нибудь объяснит, как исправить эту проблему?
Читал конечно в php.su инструкцию загрузки нескольких файлов, так и делал, бесполезно, в поиске искал, там решения не нашел

(Отредактировано автором: 05 Августа, 2011 - 18:21:30)

 
 Top
tsoi85
Отправлено: 05 Августа, 2011 - 19:03:03
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['file']['name'] as $k=>$f) {
  2.   if (!$_FILES['file']['error'][$k]) {
  3.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  4.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  5.         echo 'Файл: '.$_FILES['file']['name'][$k].' загружен.<br />';
  6.       }
  7.     }
  8.   }
  9. }
 
 Top
KuPbI4
Отправлено: 05 Августа, 2011 - 19:08:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




tsoi85
у меня к Вам вопрос, зачем тут нужен foreach и откуда переменные $k и $f?
пробовал Ваш код, но файлы загрузились, но не добавились в БД.
 
 Top
tsoi85
Отправлено: 05 Августа, 2011 - 19:23:00
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




foreach - Специальный цикл перебора массивов
$k - В данном случае ключ файла
$f - Значение массива
http://www.php.su/learnphp/cs/?cycles#foreach


PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['file']['name'] as $k=>$f) {
  2.   if (!$_FILES['file']['error'][$k]) {
  3.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  4.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  5.         echo 'Файл: '.$_FILES['file']['name'][$k].' загружен.<br />';
  6.       }
  7.     }
  8.   }
  9. }
  10. $img1 = $_FILES['file']['name'][0];
  11. $img2 = $_FILES['file']['name'][1];
 
 Top
KuPbI4
Отправлено: 05 Августа, 2011 - 19:30:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




tsoi85 пишет:

foreach - Специальный цикл перебора массивов
$k - В данном случае ключ файла
$f - Значение массива
http://www.php.su/learnphp/cs/?cycles#foreach

PHP:
скопировать код в буфер обмена
  1.  
  2. скопировать код в буфер обмена
  3. foreach($_FILES['file']['name'] as $k=>$f) {
  4.   if (!$_FILES['file']['error'][$k]) {
  5.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  6.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  7.         echo 'Файл: '.$_FILES['file']['name'][$k].' загружен.<br />';
  8.       }
  9.     }
  10.   }
  11. }
  12. $img1 = $_FILES['file']['name'][0];
  13. $img2 = $_FILES['file']['name'][1];
  14.  


Про foreach помню, теперь понял смысл.
Спасибо, что объяснили, что за переменные. Улыбка
Работает, как нужно.
Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!
 
 Top
illy
Отправлено: 05 Августа, 2011 - 20:01:52
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




KuPbI4 пишет:
Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!

наверно для пропорциональности не надо прям 400x400 делать Ха-ха

photo.html

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <style>
  3. .ai:link,.ai:active ,.ai:visited ,.ai:hover {padding:3;background-color:#2993C1;color:#ffffff;border:0px solid #D0DBE1;cursor:hand;font-weight:none;font-family:arial;font-size:13px;text-decoration:none}
  4. .image_list {color:#000000;font-weight:none;font-family:arial;font-size:13px;text-decoration:none}
  5. </style>
  6.  
  7. <font id=image_list class=image_list></font>
  8. <br>
  9. <form id=sp target=p_a action=p_a.php method=POST enctype="multipart/form-data">
  10. <font class=photo>Фото:</font>
  11. <input id=gfile class=p_i type=File name=ufile size=20>
  12. <input type=hidden name=act value=upf>
  13. &nbsp;&nbsp;<a class=ai href="javascript:with(document.getElementById('sp')){submit()}"> Загрузить </a>
  14. </form>
  15.  
  16.  
  17. <iframe name=p_a frameborder=0 src=p_a.php width=0 height=0 scrolling=no></iframe>

p_a.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $w=500; // Ширина уменьшеного фото
  5. $nh=375; // Высота уменьшеного фото
  6. $size=500; // Максимальный вес фото в киллобайтах, если её размеры меньше 500*375. Например, если грузят анимацию gif размером 50*35, но весит она 1мб
  7. $dir='Photo/'; // Папка для сохранения фото (не менять)
  8. $tt='Ваше фото по размерам меньше '.$w.'*'.$nh.', но весит больше '.$size.' кб';
  9.  
  10. $sd=strtolower($_FILES['ufile']['name']);
  11.  
  12. if ($_POST['act']=="upf" && $_FILES['ufile']['name']<>'' && (preg_match("/\.jpg$/",$sd) or preg_match("/\.png$/",$sd) or preg_match("/\.gif$/",$sd))) {
  13.  
  14. $s=GetImageSize($_FILES['ufile']['tmp_name']) or exit;
  15. $na=substr(time(),3,9).substr(sprintf('%.3f',microtime()),2,4);
  16. $t=preg_replace('/(.*)(.{4})$/','\2',$sd);
  17.  
  18. $sf=$_FILES['ufile']['size']/1024;
  19.  
  20. if($s[0]<=$w && $s[1]<=$nh && $sf<$size){
  21. copy($_FILES['ufile']['tmp_name'], $dir.$na.$t);
  22. echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na$t';</script>";
  23. }
  24. if($s[0]<=$w && $s[1]<=$nh && $sf>$size){
  25. echo "<script>alert('".$tt."');</script>";
  26. }
  27.  
  28. $sn=$_FILES['ufile']['tmp_name'];
  29.  
  30. if(preg_match("/\.png$/",$sd)){
  31. }
  32. if(preg_match("/\.jpg$/",$sd)){
  33. }
  34. if(preg_match("/\.gif$/",$sd)){
  35. }
  36. $k=$s[0]/$w;
  37. $h=ceil($s[1]/$k);
  38. if($h>$nh){
  39. $kh=$h/$nh;
  40. $h=$nh;
  41. $w=ceil($w/$kh);
  42. }
  43. imageSaveAlpha($d,true);
  44. imagecopyresampled($d,$p,0,0,0,0,$w,$h,$s[0],$s[1]);
  45. imagejpeg($d,$dir.$na.'.jpg');
  46. echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na.jpg';</script>";
  47. }
  48. else {exit;}
  49. ?>
  50.  

папка Photo


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
tsoi85
Отправлено: 05 Августа, 2011 - 20:09:29
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




KuPbI4 пишет:
Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!


PHP:
скопировать код в буфер обмена
  1.  
  2. # $src - Исходное изображение (.gif, .png, .jpg, .jpeg)
  3. # $dest - Сохраняемое изображение (.jpg)
  4. # $sidepx - Размер
  5. # $quality - Качество
  6.  
  7. function Img_Resize($src, $dest, $sidepx, $quality=90) {
  8.     if (!file_exists($src)) return false;
  9.     $size = getimagesize($src);
  10.     if ($size === false) return false;
  11.     $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  12.     $icfunc = "imagecreatefrom".$format;
  13.     if (!function_exists($icfunc)) return false;
  14.     $isrc = $icfunc($src);
  15.     $img['r_foto'] = (($size[0]>$size[1])?$size[0]/$sidepx:$size[1]/$sidepx);
  16.     $img['sizex'] = round($size[0]/$img['r_foto']);
  17.     $img['sizey'] = round($size[1]/$img['r_foto']);
  18.     $idest = imagecreatetruecolor($img['sizex'], $img['sizey']);
  19.     imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $img['sizex'], $img['sizey'], $size[0], $size[1]);
  20.     imagejpeg($idest, $dest, $quality);
  21.     imagedestroy($isrc);
  22.     imagedestroy($idest);
  23.     return true;
  24. }
  25.  
  26. if (Img_Resize('./old.png', './uplfile/NEW.jpg', 400, 100)) {
  27.     echo 'resize';
  28. }
  29. else {
  30.     echo 'no resize';
  31. }
 
 Top
KuPbI4
Отправлено: 05 Августа, 2011 - 20:33:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




tsoi85 пишет:

PHP:
скопировать код в буфер обмена
  1. # $src - Исходное изображение (.gif, .png, .jpg, .jpeg)
  2. # $dest - Сохраняемое изображение (.jpg)
  3. # $sidepx - Размер
  4. # $quality - Качество
  5.  
  6. function Img_Resize($src, $dest, $sidepx, $quality=90) {
  7.     if (!file_exists($src)) return false;
  8.     $size = getimagesize($src);
  9.     if ($size === false) return false;
  10.     $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  11.     $icfunc = "imagecreatefrom".$format;
  12.     if (!function_exists($icfunc)) return false;
  13.     $isrc = $icfunc($src);
  14.     $img['r_foto'] = (($size[0]>$size[1])?$size[0]/$sidepx:$size[1]/$sidepx);
  15.     $img['sizex'] = round($size[0]/$img['r_foto']);
  16.     $img['sizey'] = round($size[1]/$img['r_foto']);
  17.     $idest = imagecreatetruecolor($img['sizex'], $img['sizey']);
  18.     imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $img['sizex'], $img['sizey'], $size[0], $size[1]);
  19.     imagejpeg($idest, $dest, $quality);
  20.     imagedestroy($isrc);
  21.     imagedestroy($idest);
  22.     return true;
  23. }
  24. if (Img_Resize('./old.png', './uplfile/NEW.jpg', 400, 100)) {
  25.     echo 'resize';
  26. }
  27. else {
  28.     echo 'no resize';
  29. }

Хочу спросить в самом конце вызова самой функции
PHP:
скопировать код в буфер обмена
  1.  img_resize(исходный_файл, новый_файл, размеры)) {
  2. echo 'изменен'}
  3. else { echo 'не изменен'}

Вот я добавляю информацию, и одновременно загружаю изображение, и само изображение должно сжать и добавить в БД имя файла сжатого изображения
Как сделать, чтоб любой файл изображения удачно сжал и загрузился?!
Так?
PHP:
скопировать код в буфер обмена
  1.  
  2. if (Img_Resize($_FILES['file']['name'][$k].'.jpg', $_FILES['file']['name'][$k].'_.jpg', 400, 100)) {
  3.     echo 'resize';
  4. }
  5. else {
  6.     echo 'no resize';
  7. }

(Отредактировано автором: 05 Августа, 2011 - 20:37:39)

 
 Top
tsoi85
Отправлено: 05 Августа, 2011 - 21:10:40
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




KuPbI4 пишет:
Так?
PHP:
скопировать код в буфер обмена
  1. if (Img_Resize($_FILES['file']['name'][$k]'.jpg', Img_Resize($_FILES['file']['name'][$k]'.jpg', $_FILES['file']['name'][$k]'_.jpg', 400, 100)) {
  2.     echo 'resize';
  3. }
  4. else {
  5.     echo 'no resize';
  6. }

Немного неверно.
Расширение файла дополнительно указывать не нужно, его уже содержит $_FILES['file']['name'][$k].

Как-нибудь так:
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['file']['name'] as $k=>$f) {
  2.   if (!$_FILES['file']['error'][$k]) {
  3.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  4.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  5.         echo 'Файл: '.$_FILES['file']['name'][$k].' загружен.<br />';
  6.         if (Img_Resize('../img/cars/'.$_FILES['file']['name'][$k], '../img/cars/sm_'.$_FILES['file']['name'][$k], 400, 100)) {
  7.           echo 'resize';
  8.         }
  9.         else {
  10.           echo 'no resize';
  11.         }
  12.       }
  13.     }
  14.   }
  15. }

Обработанная копия имеет префикс: sm_.

(Отредактировано автором: 05 Августа, 2011 - 21:13:48)

 
 Top
KuPbI4
Отправлено: 05 Августа, 2011 - 21:39:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




tsoi85
Спасибо за подсказки Улыбка
 
 Top
KuPbI4
Отправлено: 11 Августа, 2011 - 17:18:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




У меня вопрос появился.
Существует ли в природе динамическая загрузка файлов? То есть скажем так, в БД, есть таблица, в этой таблице есть один столбец под названием img, а там внутри количество наименований файлов изображения и загрузится хоть 1 файл изображения, хоть 5 изображений и т.д. Если да, то подскажите, как это реализовать?! Тут конечно нужен динамический массив, но я его не совсем представил.

(Отредактировано автором: 11 Августа, 2011 - 17:19:16)

 
 Top
tsoi85
Отправлено: 11 Августа, 2011 - 19:05:02
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




KuPbI4, очень интересный вопрос.
Итак, в таблице есть поле `files` c типом TEXT, там хранятся имена файлов (одно имя в строке).

file1.jpg
file2.jpg
file3.jpg

При записи, с примером выше:
PHP:
скопировать код в буфер обмена
  1. $img = '';
  2. foreach($_FILES['file']['name'] as $k=>$f) {
  3.   if (!$_FILES['file']['error'][$k]) {
  4.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  5.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  6.         $img .= $_FILES['file']['name'][$k]."\r\n";
  7.       }
  8.     }
  9.   }
  10. }
  11. #Далее, $img обработать функцией trim() и записать в базу данных
  12.  


При выводе из базы:
PHP:
скопировать код в буфер обмена
  1.  
  2. $PRINT = mysql_fetch_array();
  3. #Разбиваем текст и создаём массив c именами файлов:
  4. $files = explode("\r\n", $PRINT['files']);
  5. #$files[0] - file1.jpg и т.д.
  6.  

(Отредактировано автором: 11 Августа, 2011 - 19:12:34)

 
 Top
KuPbI4
Отправлено: 11 Августа, 2011 - 21:26:06
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




tsoi85 пишет:
KuPbI4, очень интересный вопрос.
Итак, в таблице есть поле `files` c типом TEXT, там хранятся имена файлов (одно имя в строке).

file1.jpg
file2.jpg
file3.jpg

При записи, с примером выше:
PHP:
скопировать код в буфер обмена
  1. $img = '';
  2. foreach($_FILES['file']['name'] as $k=>$f) {
  3.   if (!$_FILES['file']['error'][$k]) {
  4.     if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  5.       if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  6.         $img .= $_FILES['file']['name'][$k]."\r\n";
  7.       }
  8.     }
  9.   }
  10. }
  11. #Далее, $img обработать функцией trim() и записать в базу данных
  12.  


При выводе из базы:
PHP:
скопировать код в буфер обмена
  1.  
  2. $PRINT = mysql_fetch_array();
  3. #Разбиваем текст и создаём массив c именами файлов:
  4. $files = explode("\r\n", $PRINT['files']);
  5. #$files[0] - file1.jpg и т.д.
  6.  


Не совсем Вас понял.
Вот код:
PHP:
скопировать код в буфер обмена
  1.  
  2. $files = '';                                   
  3.                                                                 foreach($_FILES['file']['name'] as $k=>$f) {
  4.                                                                         if (!$_FILES['file']['error'][$k]) {
  5.                                                                                 if (is_uploaded_file($_FILES['file']['tmp_name'][$k])) {
  6.                                                                                         if (move_uploaded_file($_FILES['file']['tmp_name'][$k], "../img/cars/".$_FILES['file']['name'][$k])) {
  7.                                                                                                 $files .= $_FILES['file']['name'][$k]."\r\n";
  8.                                                                                                 echo 'Файл: '.$_FILES['file']['name'][$k].' загружен!';
  9.                                                                                                         if (Img_Resize("../img/cars/".$_FILES['file']['name'][$k], "../img/cars/".$_FILES['file']['name'][$k], 600, 600)) {
  10.                                                                                                                 echo "Файл".$_FILES['file']['name'][$k]."изменен!";
  11.                                                                                                         }
  12.                                                                                         }
  13.                                                                                 }
  14.                                                                         }
  15.                                                                 }
  16. trim($files);
  17.                                                                 $files=$_FILES['file']['name'][0];
  18. $query="INSERT INTO cars ( files ) VALUES ('$files')";
  19.  

Функция trim() я как понимаю это убирает строки и пробелы c начала до конца.
Далее... совсем не понял про вывод из базы.
PHP:
скопировать код в буфер обмена
  1.  
  2. #тут сам запрос
  3. $q = "SELECT * FROM `cars` WHERE id_car='$id_car'";
  4. $result = mysql_query($q);
  5. $PRINT = mysql_fetch_array($result);
  6. #Разбиваем текст и создаём массив c именами файлов:
  7. $files = explode("\r\n", $PRINT['files']);
  8. #$files[0] - file1.jpg и т.д.
  9. echo '<img width="150px" heigth="150px" src="../../img/cars/'.$img.'">';
  10.  

Так правильнее?

(Отредактировано автором: 11 Августа, 2011 - 21:28:13)

 
 Top
tsoi85
Отправлено: 11 Августа, 2011 - 21:36:52
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




Цитата:
Функция trim() я как понимаю это убирает строки и пробелы c начала до конца.

trim() удаляет не только пробелы. http://www.php.su/functions/?trim

Цитата:
Так правильнее?

Да, так правильнее.
(Добавление)
Но, без этого:
CODE (php):
скопировать код в буфер обмена
  1. echo '<img width="150px" heigth="150px" src="../../img/cars/'.$img.'">';

(Отредактировано автором: 11 Августа, 2011 - 21:42:26)

 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB