PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
KuPbI4
Отправлено: 04 Августа, 2011 - 22:19:04
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Всем здравствуйте!
У меня поставлена задача сделать загрузку нескольких файлов на сервер, но она у меня не очень получается, т.е. с одним файлом загрузки на сервер и добавлением имени файла в БД все хорошо, а с двумя и более - плохо, т.е. не загружается второй файл и не записывается имя файла в БД.
Прилагаю кусочек кода HTML:
CODE (
html ):
скопировать код в буфер обмена
<form action = "add.php" method = "post" ENCTYPE = "multipart/form-data" >
<label >
Файл изображения №1: <input type = "file" name = "file[]" ><br >
Файл изображения №2: <input type = "file" name = "file[]" ><br >
</ label >
</ form >
Прилагаю кусочек кода PHP:
PHP:
скопировать код в буфер обмена
$img1 = $file ;
$file = $_FILES [ 'file' ] [ 'name' ] ;
copy ( $_FILES [ 'file' ] [ 'tmp_name' ] [ 0 ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] ) ; $img2 = $file1 ;
$file1 = $_FILES [ 'file1' ] [ 'name' ] ;
copy ( $_FILES [ 'file' ] [ 'tmp_name' ] [ 1 ] , "../img/cars/" . $_FILES [ 'file1' ] [ 'name' ] ) ; //дальше там идет SQL добавление записи в БД
$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 ')" ;
}
Как эту проблему решить?!
И в добавок, посоветуйте пожалуйста, какие лучшие jquery плагины мульти-загрузочных файлов можно использовать?!(Отредактировано автором: 05 Августа, 2011 - 01:37:45)
KuPbI4
Отправлено: 05 Августа, 2011 - 18:21:05
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Кто-нибудь объяснит, как исправить эту проблему?
Читал конечно в php.su инструкцию загрузки нескольких файлов, так и делал, бесполезно, в поиске искал, там решения не нашел
(Отредактировано автором: 05 Августа, 2011 - 18:21:30)
tsoi85
Отправлено: 05 Августа, 2011 - 19:03:03
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
PHP:
скопировать код в буфер обмена
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { echo 'Файл: ' . $_FILES [ 'file' ] [ 'name' ] [ $k ] . ' загружен.<br />' ;
}
}
}
}
tsoi85
Отправлено: 05 Августа, 2011 - 19:23:00
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
foreach - Специальный цикл перебора массивов
$k - В данном случае ключ файла
$f - Значение массива
http://www.php.su/learnphp/cs/?cycles#foreach
PHP:
скопировать код в буфер обмена
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { echo 'Файл: ' . $_FILES [ 'file' ] [ 'name' ] [ $k ] . ' загружен.<br />' ;
}
}
}
}
$img1 = $_FILES [ 'file' ] [ 'name' ] [ 0] ;
$img2 = $_FILES [ 'file' ] [ 'name' ] [ 1] ;
KuPbI4
Отправлено: 05 Августа, 2011 - 19:30:51
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
tsoi85 пишет:
foreach - Специальный цикл перебора массивов
$k - В данном случае ключ файла
$f - Значение массива
http://www.php.su/learnphp/cs/?cycles#foreach
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { echo 'Файл: ' . $_FILES [ 'file' ] [ 'name' ] [ $k ] . ' загружен.<br />' ;
}
}
}
}
$img1 = $_FILES [ 'file' ] [ 'name' ] [ 0] ;
$img2 = $_FILES [ 'file' ] [ 'name' ] [ 1] ;
Про foreach помню, теперь понял смысл.
Спасибо, что объяснили, что за переменные.
Работает, как нужно.
Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!
illy
Отправлено: 05 Августа, 2011 - 20:01:52
Участник
Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011
Откуда: от верблюда)
Помог: 28 раз(а)
KuPbI4 пишет: Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!
наверно для пропорциональности не надо прям 400x400 делать
photo.html
CODE (
html ):
скопировать код в буфер обмена
<style >
.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}
.image_list {color:#000000;font-weight:none;font-family:arial;font-size:13px;text-decoration:none}
</ style >
<font id = image_list class = image_list></ font >
<br >
<form id = sp target = p_a action = p_a.php method = POST enctype = "multipart/form-data" >
<font class = photo> Фото:</ font >
<input id = gfile class = p_i type = File name = ufile size = 20 >
<input type = hidden name = act value = upf>
<a class = ai href = "javascript:with(document.getElementById('sp')){submit()}" > Загрузить </ a >
</ form >
<iframe name = p_a frameborder = 0 src = p_a.php width = 0 height = 0 scrolling = no></ iframe >
p_a.php
PHP:
скопировать код в буфер обмена
<?PHP
$w = 500 ; // Ширина уменьшеного фото
$nh = 375 ; // Высота уменьшеного фото
$size = 500 ; // Максимальный вес фото в киллобайтах, если её размеры меньше 500*375. Например, если грузят анимацию gif размером 50*35, но весит она 1мб
$dir = 'Photo/' ; // Папка для сохранения фото (не менять)
$tt = 'Ваше фото по размерам меньше ' . $w . '*' . $nh . ', но весит больше ' . $size . ' кб' ;
if ( $_POST [ 'act' ] == "upf" && $_FILES [ 'ufile' ] [ 'name' ] <> '' && ( preg_match ( "/\.jpg$/" , $sd ) or
preg_match ( "/\.png$/" , $sd ) or
preg_match ( "/\.gif$/" , $sd ) ) ) {
$sf = $_FILES [ 'ufile' ] [ 'size' ] / 1024 ;
if ( $s [ 0] <= $w && $s [ 1] <= $nh && $sf < $size ) {
copy ( $_FILES [ 'ufile' ] [ 'tmp_name' ] , $dir . $na . $t ) ; echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na $t ';</script>" ;
}
if ( $s [ 0] <= $w && $s [ 1] <= $nh && $sf > $size ) {
echo "<script>alert('" . $tt . "');</script>" ;
}
$sn = $_FILES [ 'ufile' ] [ 'tmp_name' ] ;
}
}
}
$k = $s [ 0] / $w ;
if ( $h > $nh ) {
$kh = $h / $nh ;
$h = $nh ;
}
echo "<script>parent.document.getElementById('image_list').innerHTML+=' $na .jpg';</script>" ;
}
?>
папка Photo
-----Всё гениальное - просто
И ещё проще, если ты - индиго
tsoi85
Отправлено: 05 Августа, 2011 - 20:09:29
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
KuPbI4 пишет: Один вопрос остался, есть такой скрипт, который позволяет сжать картинку в заданный размер изображения, к примеру 400х400?!
PHP:
скопировать код в буфер обмена
# $src - Исходное изображение (.gif, .png, .jpg, .jpeg)
# $dest - Сохраняемое изображение (.jpg)
# $sidepx - Размер
# $quality - Качество
function Img_Resize( $src , $dest , $sidepx , $quality = 90) {
if ( $size === false ) return false ;
$icfunc = "imagecreatefrom" . $format ;
$isrc = $icfunc ( $src ) ;
$img [ 'r_foto' ] = ( ( $size [ 0] > $size [ 1] ) ?$size [ 0] / $sidepx : $size [ 1] / $sidepx ) ;
$img [ 'sizex' ] = round ( $size [ 0
] / $img [ 'r_foto' ] ) ; $img [ 'sizey' ] = round ( $size [ 1
] / $img [ 'r_foto' ] ) ; imagecopyresampled ( $idest , $isrc , 0
, 0
, 0
, 0
, $img [ 'sizex' ] , $img [ 'sizey' ] , $size [ 0
] , $size [ 1
] ) ; return true ;
}
if ( Img_Resize( './old.png' , './uplfile/NEW.jpg' , 400, 100) ) {
echo 'resize' ;
}
else {
echo 'no resize' ;
}
KuPbI4
Отправлено: 05 Августа, 2011 - 20:33:11
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
tsoi85 пишет:
PHP:
скопировать код в буфер обмена
# $src - Исходное изображение (.gif, .png, .jpg, .jpeg)
# $dest - Сохраняемое изображение (.jpg)
# $sidepx - Размер
# $quality - Качество
function Img_Resize( $src , $dest , $sidepx , $quality = 90) {
if ( $size === false ) return false ;
$icfunc = "imagecreatefrom" . $format ;
$isrc = $icfunc ( $src ) ;
$img [ 'r_foto' ] = ( ( $size [ 0] > $size [ 1] ) ?$size [ 0] / $sidepx : $size [ 1] / $sidepx ) ;
$img [ 'sizex' ] = round ( $size [ 0
] / $img [ 'r_foto' ] ) ; $img [ 'sizey' ] = round ( $size [ 1
] / $img [ 'r_foto' ] ) ; imagecopyresampled ( $idest , $isrc , 0
, 0
, 0
, 0
, $img [ 'sizex' ] , $img [ 'sizey' ] , $size [ 0
] , $size [ 1
] ) ; return true ;
}
if ( Img_Resize( './old.png' , './uplfile/NEW.jpg' , 400, 100) ) {
echo 'resize' ;
}
else {
echo 'no resize' ;
}
Хочу спросить в самом конце вызова самой функции
Вот я добавляю информацию, и одновременно загружаю изображение, и само изображение должно сжать и добавить в БД имя файла сжатого изображения
Как сделать, чтоб любой файл изображения удачно сжал и загрузился?!
Так?
PHP:
скопировать код в буфер обмена
if ( Img_Resize( $_FILES [ 'file' ] [ 'name' ] [ $k ] . '.jpg' , $_FILES [ 'file' ] [ 'name' ] [ $k ] . '_.jpg' , 400, 100) ) {
echo 'resize' ;
}
else {
echo 'no resize' ;
}
(Отредактировано автором: 05 Августа, 2011 - 20:37:39)
tsoi85
Отправлено: 05 Августа, 2011 - 21:10:40
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
KuPbI4 пишет: Так?
PHP:
скопировать код в буфер обмена
if ( Img_Resize( $_FILES [ 'file' ] [ 'name' ] [ $k ] '.jpg' , Img_Resize( $_FILES [ 'file' ] [ 'name' ] [ $k ] '.jpg' , $_FILES [ 'file' ] [ 'name' ] [ $k ] '_.jpg' , 400, 100) ) {
echo 'resize' ;
}
else {
echo 'no resize' ;
}
Немного неверно.
Расширение файла дополнительно указывать не нужно, его уже содержит $_FILES['file']['name'][$k].
Как-нибудь так:
PHP:
скопировать код в буфер обмена
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { echo 'Файл: ' . $_FILES [ 'file' ] [ 'name' ] [ $k ] . ' загружен.<br />' ;
if ( Img_Resize( '../img/cars/' . $_FILES [ 'file' ] [ 'name' ] [ $k ] , '../img/cars/sm_' . $_FILES [ 'file' ] [ 'name' ] [ $k ] , 400, 100) ) {
echo 'resize' ;
}
else {
echo 'no resize' ;
}
}
}
}
}
Обработанная копия имеет префикс: sm_ .(Отредактировано автором: 05 Августа, 2011 - 21:13:48)
KuPbI4
Отправлено: 11 Августа, 2011 - 17:18:32
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
У меня вопрос появился.
Существует ли в природе динамическая загрузка файлов? То есть скажем так, в БД, есть таблица, в этой таблице есть один столбец под названием img, а там внутри количество наименований файлов изображения и загрузится хоть 1 файл изображения, хоть 5 изображений и т.д. Если да, то подскажите, как это реализовать?! Тут конечно нужен динамический массив, но я его не совсем представил.
(Отредактировано автором: 11 Августа, 2011 - 17:19:16)
tsoi85
Отправлено: 11 Августа, 2011 - 19:05:02
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
KuPbI4 , очень интересный вопрос.
Итак, в таблице есть поле `files` c типом TEXT, там хранятся имена файлов (одно имя в строке).
file1.jpg
file2.jpg
file3.jpg
При записи, с примером выше:
PHP:
скопировать код в буфер обмена
$img = '' ;
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { $img .= $_FILES [ 'file' ] [ 'name' ] [ $k ] . "\r \n " ;
}
}
}
}
#Далее, $img обработать функцией trim() и записать в базу данных
При выводе из базы:
(Отредактировано автором: 11 Августа, 2011 - 19:12:34)
KuPbI4
Отправлено: 11 Августа, 2011 - 21:26:06
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
tsoi85 пишет: KuPbI4 , очень интересный вопрос.
Итак, в таблице есть поле `files` c типом TEXT, там хранятся имена файлов (одно имя в строке).
file1.jpg
file2.jpg
file3.jpg
При записи, с примером выше:
PHP:
скопировать код в буфер обмена
$img = '' ;
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { $img .= $_FILES [ 'file' ] [ 'name' ] [ $k ] . "\r \n " ;
}
}
}
}
#Далее, $img обработать функцией trim() и записать в базу данных
При выводе из базы:
Не совсем Вас понял.
Вот код:
PHP:
скопировать код в буфер обмена
$files = '' ;
foreach ( $_FILES [ 'file' ] [ 'name' ] as $k => $f ) {
if ( ! $_FILES [ 'file' ] [ 'error' ] [ $k ] ) {
if ( move_uploaded_file ( $_FILES [ 'file' ] [ 'tmp_name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] ) ) { $files .= $_FILES [ 'file' ] [ 'name' ] [ $k ] . "\r \n " ;
echo 'Файл: ' . $_FILES [ 'file' ] [ 'name' ] [ $k ] . ' загружен!' ;
if ( Img_Resize( "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] , "../img/cars/" . $_FILES [ 'file' ] [ 'name' ] [ $k ] , 600, 600) ) {
echo "Файл" . $_FILES [ 'file' ] [ 'name' ] [ $k ] . "изменен!" ;
}
}
}
}
}
$files = $_FILES [ 'file' ] [ 'name' ] [ 0] ;
$query = "INSERT INTO cars ( files ) VALUES ('$files ')" ;
Функция trim() я как понимаю это убирает строки и пробелы c начала до конца.
Далее... совсем не понял про вывод из базы.
PHP:
скопировать код в буфер обмена
#тут сам запрос
$q = "SELECT * FROM `cars` WHERE id_car='$id_car '" ;
#Разбиваем текст и создаём массив c именами файлов:
$files = explode ( "\r \n " , $PRINT [ 'files' ] ) ; #$files[0] - file1.jpg и т.д.
echo '<img width="150px" heigth="150px" src="../../img/cars/' . $img . '">' ;
Так правильнее?(Отредактировано автором: 11 Августа, 2011 - 21:28:13)
tsoi85
Отправлено: 11 Августа, 2011 - 21:36:52
Новичок
Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011
Помог: 10 раз(а)
Цитата: Функция trim() я как понимаю это убирает строки и пробелы c начала до конца.
trim() удаляет не только пробелы.
http://www.php.su/functions/?trim
Да, так правильнее.
(Добавление)
Но, без этого:
(Отредактировано автором: 11 Августа, 2011 - 21:42:26)
Поиск в теме | Версия для печати
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB