|
|
|
| Мне нужно сделать массовую загрузку картинок на сервер и занести их пути в базу данных, но так чтобы не создавать лишние строки, а записать все в одну строку, вот мой вариант. Подскажите, такой вариант допустим при создании сайта, вроде все работает. Просто не хочется создавать лишние строки.
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
$it= mysql_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";
}
?>
|
| |
|
|
|
|
|
|
|
для: algoritm2
(01.10.2013 в 03:49)
| | Это где вы такое откопали? | |
|
|
|
|
|
|
|
для: confirm
(01.10.2013 в 05:36)
| | В одной браузерной онлайн игре где отображались характеристики оружия и чтобы не создавать кучу столбцов, автор запихнул все характеристики в один столбец, а потом просто добавлял в этот столбец строки и выводил их на сайте. Я сделал почти тоже самое только с изображением. | |
|
|
|
|
|
|
|
для: 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), это только для себя, если чего посмотреть надо, но не для пользователя.
Загружая файлы нужно проверять их соответствие ожидаемым, с изображениями это проще. У вас этого вообще не делается.
Ну и занесение в базу соответственно полный швах у вас. | |
|
|
|
|
|
|
|
для: confirm
(01.10.2013 в 06:13)
| | Это просто черновик, на самом деле я бы по-другому сделал. Меня интересует другое вот у меня четыре изображения и для каждого изображения в базе данных нужно создать четыре столбца, например img1, img2, img3, img4? | |
|
|
|
|
|
|
|
для: algoritm2
(01.10.2013 в 06:29)
| | Так делайте по другому, вернее так как и положено это делать. И начинать надо с этого. А то у вас загрузка полный кошмар, а вы беспокоитесь как записать. Вот и запишет в базу кошмар, коли такова загрузка.
Черновик в программировании не означает кучу нелепостей. Переделывайте, чтобы это был действительно диалог загрузки, и чтобы загружались только загруженные, и чтобы учитывались ошибки, и только то, что без ошибок (или пока нет ошибок, это уж ваши условия), запоминалось и записывалось в базу.
При этом грузить в один каталог файлы под именами пользователя, это слишком смелое ожидание того, что файлы будут гарантированно иметь разные имена. | |
|
|
|