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

Форум PHP

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

 

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

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

тема: Массовая загрузка файлов на сайт
 
 автор: algoritm2   (01.10.2013 в 03:49)   письмо автору
 
 

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

Index.php


<form name="additem" method="post" enctype="multipart/form-data" action="add_upload.php">
<?php
for($i=0;$i<=4;$i++)
{
  switch(
$i)
  {
    case 
1$fr="Выберите изображение 1:";break;
    case 
2$fr="Выберите изображение 2:";break;
    case 
3$fr="Выберите изображение 3:";break;
    case 
4$fr="Выберите изображение 4:";break;
  }
if(
$fr!="") echo "<label><font class=weaponch><b>$fr</b></font></label><input name=filename[$i] type=file value=\"\"/><br>\n";
}
?>
<div align="center">
   <input name="smb1" type="submit" class="lbut" value="Сохранить"/>
</div>
</form>



add_upload.php


<html>
<head>
<title>Результаты загрузки файла</title>
</head>
<body>
<?php
include "blocks/db.php";
$date date('Y-m-d');
$new_dir "./files/file/".$date;
@
mkdir($new_dir);

foreach (
$_FILES['filename']['name'] as $key => $name)
{
    if (
$_FILES['filename']['name']["$key"]=="") unset($_FILES['filename']['name']["$key"]);
}

foreach (
$_FILES['filename']['name'] as $key => $name_img)
{
    
$big_path $new_dir_b."/".$_FILES['filename']['name']["$key"];
    if (
move_uploaded_file($_FILES['filename']['tmp_name']["$key"],$big_path)) 
    {
        echo 
"<p>Файл".$_FILES['filename']['name']["$key"]." успешно загружен</p>";
    }
    else 
    {
        echo 
"Произошла ошибка при загрузке файла ".$_FILES['filename']['name']["$key"].".
        Некоторая отладочная информация:<br>"
;
        
print_r($_FILES); echo "<br>";
    }
    
//$key – происходит нумерация  
if($big_path!=""){$big_path_cut.="$key@$big_path|";}
//$big_path_cut = substr($big_path,1);
}
$big_path_cut=substr_replace($big_path_cut'',-1);
$query "INSERT INTO items (param) VALUES ('$big_path_cut')";
$result mysql_query($query)
or die (
"Ошибка при выполнении запроса:".mysql_error()."<br>");
?>
</body>
</html>


После внесение данных в бд, строка примет вид

1@./files/file/2013-10-01/land1.JPG|2@./files/file/2013-10-01/land5.JPG|3@./files/file/2013-10-01/land6.JPG|4@./files/file/2013-10-01/land8.JPG

Выборка из базы данных и показ картинок на сайте

select.php


<?php
include 'blocks/db.php';
//Извлекаем уникальный идентификатор id=1
$itmysql_fetch_array(mysql_query("SELECT param FROM items WHERE id=1;")) or die (mysql_error());
$param=explode("|",$it[param]);
foreach (
$param as $value

    
$stat=explode("@",$value);
    
$par[$stat[0]]=$stat[1];
}                         
for(
$i=0;$i<=4;$i++)
{
    if(
$par[$i]!="") echo "<br><img src=\"$par[$i]\" width='560' height='106'>
    <br>\n"
;
}
?>

  Ответить  
 
 автор: confirm   (01.10.2013 в 05:36)   письмо автору
 
   для: algoritm2   (01.10.2013 в 03:49)
 

Это где вы такое откопали?

  Ответить  
 
 автор: algoritm2   (01.10.2013 в 05:54)   письмо автору
 
   для: confirm   (01.10.2013 в 05:36)
 

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

  Ответить  
 
 автор: confirm   (01.10.2013 в 06:13)   письмо автору
 
   для: algoritm2   (01.10.2013 в 05:54)
 

Не копируйте всякую чушь. Зачем:

for($i=0;$i<=4;$i++) { switch($i) { case 1: $fr="Выберите изображение 1:";break;....

если вы заведомо знаете, что ваша форма должна иметь четыре поля? Выбрасывайте эту ерунду, в вашем случае форма это чистый html-код.

А это что такое?

foreach ($_FILES['filename']['name'] as $key => $name)
{
if ($_FILES['filename']['name']["$key"]=="") unset($_FILES['filename']['name']["$key"]);
}

Вы суть этой операции можете пояснить?

А сама загрузка:

foreach ($_FILES['filename']['name'] as $key => $name_img) {
....
if (move_uploaded_file($_FILES['filename']['tmp_name']["$key"],$big_path))

загружен

не загружен

Как бы не так. Проверять загружен или нет файл нужно проверкой ключа error массива FILES, и только если нет ошибки только тогда move_uploaded_file. А вот перемещен или нет файл в каталог, это уже причина не ошибки загрузки файла, а скорее ваша, как-то не соответствие прав на каталог. И вываливать "отладочную информацию" print_r($_FILES), это только для себя, если чего посмотреть надо, но не для пользователя.

Загружая файлы нужно проверять их соответствие ожидаемым, с изображениями это проще. У вас этого вообще не делается.

Ну и занесение в базу соответственно полный швах у вас.

  Ответить  
 
 автор: algoritm2   (01.10.2013 в 06:29)   письмо автору
 
   для: confirm   (01.10.2013 в 06:13)
 

Это просто черновик, на самом деле я бы по-другому сделал. Меня интересует другое вот у меня четыре изображения и для каждого изображения в базе данных нужно создать четыре столбца, например img1, img2, img3, img4?

  Ответить  
 
 автор: confirm   (01.10.2013 в 06:42)   письмо автору
 
   для: algoritm2   (01.10.2013 в 06:29)
 

Так делайте по другому, вернее так как и положено это делать. И начинать надо с этого. А то у вас загрузка полный кошмар, а вы беспокоитесь как записать. Вот и запишет в базу кошмар, коли такова загрузка.
Черновик в программировании не означает кучу нелепостей. Переделывайте, чтобы это был действительно диалог загрузки, и чтобы загружались только загруженные, и чтобы учитывались ошибки, и только то, что без ошибок (или пока нет ошибок, это уж ваши условия), запоминалось и записывалось в базу.
При этом грузить в один каталог файлы под именами пользователя, это слишком смелое ожидание того, что файлы будут гарантированно иметь разные имена.

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

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