Мультизагрузка.Занести путь к файлу в базу.

lapwing

Новичок
Здравствуйте, уважаемые форумчане. Прошу подсказать как правильно организовать загрузку файлов. Простейший пример - доска объявлений с возможностью закачки фото. У меня собственно три вопроса
1. Как лучше? Организовать добавление объявления и фото в одном скрипте или сделать так, чтобы сначала добавлялась запись, а затем по желанию пользователя можно было добавить фото. Я где то читал, что второй вариант предпочтительнее, так ли это и почему?
2. Данные объявления и фотографии сохранять лучше в одной таблице или для фоток сделать отдельную таблицу?
3.И собственно самый главный вопрос: как сохранить пути к фоткам в БД, если фоток много?
Объясню чего я не понимаю:
Есть форма, через которую закачивается файл. Есть обработчик:
PHP:
<?php
//---различные установки

$i = 0;
$files_count = sizeof($_FILES[$fileElementName]["name"]);
for ($i = 0; $i < $files_count-1; $i++) {	
	if(!empty($_FILES[$fileElementName]['error'][$i]))
	{
       //проверка на ошибки
	}
	}elseif(empty($_FILES[$fileElementName]['tmp_name'][$i]) || $_FILES[$fileElementName]['tmp_name'][$i] == 'none')
	{
		$error = 'No file was uploaded..';
	}
    		else{
				$file     = $_FILES[$fileElementName]['tmp_name'][$i];
				$filename = $_FILES[$fileElementName]['name'][$i];
				$size     = getimagesize($_FILES[$fileElementName]['tmp_name'][$i]); //получаем массив значений размеров картинкии  её расширения
				$mime     = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); //узнаём mime-тип изображений
				if ($mime=='jpeg') $format = 'jpg'; else $format = $mime; //если mime jpeg, то он будет записан как файл .jpg
				$new_filename = 'image'.time().'.'.$format; //генерируем новое имя файла
				move_uploaded_file($file, $url_name_gal.'/'.$new_filename); //перемещаем файл

[B]// где то здесь как я понимаю должен быть код, который заносит в БД путь к файлу
//запрос составляется следующим образом
// INSERT INTO имя таблицы (имя поля) VALUES ($url_name_gal.'/'.$new_filename)
//если файл один - всё понятно - в поле, допустим с именем pathfoto заносится путь к фото 'папка/имя файла
//а если как в данном случае файлов несколько, они обрабатываются в цикле, то как правильно составить запрос к БД?
[/B]

//дальше собственно идет ресайз фотографии и вывод сообщений об ошибках или успехе
}
?>
Помогите пожалуйста разобраться в этом вопросе.
 

bobo

Новичок
В код не вникал, расскажу как делал я.

$userid - id юзера
$adid - id объявления

В структуре каталогов сайта делал папку "ad" (объявления). При создании объявления пользователем, в момент загрузки файлов, в папке "ad" создавались папки "$userid/$adid/", куда и ложились фото. И соответственно в БД писАлся путь к этим фото - "$userid/$adid/filename.jpg"

+ ко всему этому, естественно, проверка на существование папки\файла при загрузке фото.
 

lapwing

Новичок
Вроде бы понял. Тогда получается, что фотки лучше хранить в отдельной таблице foto с примерно такой структурой - id, fotobig, fotosmall;
Если пользователь удаляет объявление, то удаляется вся папка $adid с её содержимым. А как тогда удалять пути к этим удаленным фоткам из таблицы foto? Добавить туда поле например notesid, которое будет равно id объявления? И если удаляется запись под номером id, то из таблицы foto удаляются все записи, где notesid=id? Так получается?
 

bobo

Новичок
Тогда получается, что фотки лучше хранить в отдельной таблице foto с примерно такой структурой - id, fotobig, fotosmall;
Еще поле adid нужно (id объявления, иначе как ты собираешься привязку фоток к конкретному объявлению делать ?) :)

А как тогда удалять пути к этим удаленным фоткам из таблицы foto? Добавить туда поле например notesid, которое будет равно id объявления? И если удаляется запись под номером id, то из таблицы foto удаляются все записи, где notesid=id? Так получается?
Используй так называемые "внешние ключи" ("foreign key").
 
Сверху