Одновременная загрузка нескольких изображений PHP

12 3
Ilekor
На сайте с 22.04.2009
Offline
138
8009

Как всегда со своими вопросами в PHP.

Как ранее уже говорил я учусь...Прошу помочь.

Значит задача:

Загрузить изображения в папку на сервер и создать путь к фото в таблице.

Для каждого изображения создаем миниатюрку и большое изображение.

Существует 10 полей для загрузки изображений.

Значит сделал для двух первых, можно и для остальных сделать повторение обработки, но слишком большой код получится.

Полям присвоены имена fupload,fupload2,fupload3 и так до 10.

Подскажите как можно не писать кучу кода, но все загрузить и каждое изображение в свое поле в БД?

Лучший дорген 21 века AgDor(http://agdor.info)
T
На сайте с 11.08.2005
Offline
181
#1

Не понимаю в чем собственно проблема...

В цикле называть поля для загрузки изображений, так же в цикле их обрабатывать и формировать запрос для записи в БД.

Ilekor
На сайте с 22.04.2009
Offline
138
#2
Timen:
Не понимаю в чем собственно проблема...
В цикле называть поля для загрузки изображений, так же в цикле их обрабатывать и формировать запрос для записи в БД.

Я же и не спорю, что для вас это легко. А я пока еще не совсем гребу как что и где. Если не затрудник покажите пример!

SEXCRIME
На сайте с 18.11.2009
Offline
8
#3

http://php.su/phphttp/?uploads

вот тут прочитай об аплоаде )

SEXCRIME добавил 21.12.2009 в 22:21

щас буду пробовать что тебе нужно )

Всё для WEB мастера (http://wm-i.net)
SI
На сайте с 19.12.2007
Offline
77
#4

for($i = 0; isset($_POST["param{$i}"]); $i++) { .. } ?

это, конечно, без всех условий "предохранения"...

St.I.An добавил 21.12.2009 в 22:37

или

<?

for($i = 1; isset($_POST["fupload".(($i > 1) ? $i : '')]); $i++) {

.. // ваш небольшой код

} ?

?>

как-то так, сам не тестил.

рисуем, верстаем, кодим и крутим ...аа, да, еще принимаем заказы (:
Ilekor
На сайте с 22.04.2009
Offline
138
#5
St.I.An:
<?
for($i = 1; isset($_POST["fupload".(($i > 1) ? $i : '')]); $i++) {
.. // тут большой код :)
} ?
?>

Вот мой код



if (empty($_FILES['fupload']['name']))
{
//если переменная пустая (пользователь не отправил изображение)
echo '<br><strong>Вы не выбрали фото для загрузки.</strong><br><br><a href="'.$_SERVER['HTTP_REFERER'].'">
<<< Назад</a>';
}

else
{
//иначе - загружаем изображение пользователя для обновления
$path_to_90_directory = 'useruploads/album/';//папка, куда будет загружаться начальная картинка и ее копия


if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
{

$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$target = $path_to_90_directory . $filename;
move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory

if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ

// Создание квадрата
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности

$w = 130; // квадратная. Можно поставить и другой размер.

// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения

// создаём пустую квадратную картинку
// важно именно truecolor!, иначе будем иметь 8-битный результат
$dest = imagecreatetruecolor($w,$w);

// вырезаем квадратную серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));

// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);


$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы не было одинаковых имен.

$foto = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру
}
else
{
//в случае несоответствия формата, выдаем соответствующее сообщение
exit ("Фото должно быть в формате <strong>JPG,GIF или PNG</strong>");
}

}

$user_id = $myrow2["id"];
/* Можно заносить в базу */
$result = mysql_query ("INSERT INTO name_foto (user_id, name, foto) VALUES ('$user_id', '$name', '$foto')");

$result22 = mysql_query("SELECT id FROM name_foto WHERE foto='$foto'",$db);
$myrow22 = mysql_fetch_array($result22);

$filename2 = $_FILES['fupload2']['name'];
$source = $_FILES['fupload2']['tmp_name'];
$target = $path_to_90_directory . $filename2;
move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory

if(preg_match('/[.](GIF)|(gif)$/', $filename2)) {
$im = imagecreatefromgif($path_to_90_directory.$filename2) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename2)) {
$im = imagecreatefrompng($path_to_90_directory.$filename2) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename2)) {
$im = imagecreatefromjpeg($path_to_90_directory.$filename2); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

//СОЗДАНИЕ ВТОРОГО КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ

// Создание квадрата
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности

$w = 130; // квадратная. Можно поставить и другой размер.

// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения

// создаём пустую квадратную картинку
// важно именно truecolor!, иначе будем иметь 8-битный результат
$dest = imagecreatetruecolor($w,$w);

// вырезаем квадратную серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));

// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);


$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы не было одинаковых имен.


$foto = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.

$filename3 = $_FILES['fupload2']['name'];
$source = $_FILES['fupload2']['tmp_name'];
$target = $path_to_90_directory . $filename3;
move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory

if(preg_match('/[.](GIF)|(gif)$/', $filename3)) {
$im = imagecreatefromgif($path_to_90_directory.$filename3) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename3)) {
$im = imagecreatefrompng($path_to_90_directory.$filename3) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename3)) {
$im = imagecreatefromjpeg($path_to_90_directory.$filename3); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}

//СОЗДАНИЕ ВТОРОГО КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ

// Создание квадрата
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности

$w = 636; // квадратная. Можно поставить и другой размер.

// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения

// создаём пустую квадратную картинку
// важно именно truecolor!, иначе будем иметь 8-битный результат
$dest = imagecreatetruecolor($w,$w);

// вырезаем квадратную серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));

// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));

// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);


$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date."_big.jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы не было одинаковых имен.


$foto_big = $path_to_90_directory.$date."_big.jpg";//заносим в переменную путь до аватара.

$delfull = $path_to_90_directory.$filename2;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру

$post = $myrow22["id"];
/* Можно заносить в базу */
$result3 = mysql_query ("INSERT INTO foto_album (post, user_id, foto_big, foto) VALUES ('$post', '$user_id', '$foto_big', '$foto')");


if ($result and $result3 == 'true') {echo "<p><strong>Успешно добавлено.</strong></p>";}
else {echo "<p><strong>Не добавлено.</strong></p>";}

первое изображение это картинка альбома, а все остальные 9 уже идут в альбом в отдельную таблицу. Делается миниатюра и большое.

SEXCRIME
На сайте с 18.11.2009
Offline
8
#6

Вот состряпал загрузку двух файлов на сервер(увеличить кол-во не проблема)

файл index.php (или всё равно как,файл где код для загрузки)

<?php

echo '<form action=upload.php method=post enctype=multipart/form-data>

<input type=file name=uploadfile1><br/>

<input type=file name=uploadfile2><br/>

<input type=submit value=Загрузить></form>';

?>

файл upload.php

<?php

$uploaddir = './files/';

$uploadfile1 = $uploaddir.basename($_FILES['uploadfile1']['name']);

$uploadfile2 = $uploaddir.basename($_FILES['uploadfile2']['name']);

if (copy($_FILES['uploadfile1']['tmp_name'], $uploadfile1))

{

echo "Файл успешно загружен<br/>";

}

else { echo "<h3>Ошибка! Не удалось загрузить файл!</h3>"; exit; }

if (copy($_FILES['uploadfile2']['tmp_name'], $uploadfile2))

{

echo "Файл успешно загружен<br/>";

}

else { echo "<h3>Ошибка! Не удалось загрузить файл!</h3>"; exit; }

echo "<h3>Информация о загруженных файлах: </h3>";

echo "Имя файла: ".$_FILES['uploadfile1']['name']."<br/>";

echo "Размер загруженного файла в байтах: ".$_FILES['uploadfile1']['size']."<br/>";

echo "Имя файла: ".$_FILES['uploadfile2']['name']."<br/>";

echo "Размер загруженного файла в байтах: ".$_FILES['uploadfile2']['size']."<br/>";

?>

Создаёшь папку files куда файлы будут сохраняться и права 777 на неё )

если скажешь,продолжу подгонять под тебя,если не нада,просто уйду из темы

SEXCRIME добавил 21.12.2009 в 23:13

На локалке проверил,всё нормально работает =)

Ilekor
На сайте с 22.04.2009
Offline
138
#7

SEXCRIME, С удовольствием попрошу остаться в теме, свой обработчик я выложил выше.

SEXCRIME
На сайте с 18.11.2009
Offline
8
#8

Сразу говорю,щас будет КУЧА кода :D

SEXCRIME добавил 21.12.2009 в 23:29

Вы кстати читали что я давал? =)

Ilekor
На сайте с 22.04.2009
Offline
138
#9

Да, я насколько там понял, сервер типа сам размножает обработчик!? Но мне не совсем понятно как будет подставляться переменная для того что бы каждое фото вносилось в базу в нужное поле БД!

SEXCRIME
На сайте с 18.11.2009
Offline
8
#10

помоему в том коде,что вы дали ОЧЕНЬ много бреда. Где вы это взяли вообще? )

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий