Отправка файлов из формы.....

Spectrum

Guest
Отправка файлов из формы.....

Подскажите - такая ситуация - есть форма и поля для 5 файлов фото (jpeg) - можно ли отправить сразу все 5файлов в базу с информацией о пользователе ??? Буду рад если подскажете хотябы алгоритм - идея такая заполняем форму , тут же прикрепляем необходимое количество фото и за 1раз всё отправляем в базу.
Спасибо.
 

lucas

Guest
Spectrum

Можно, но есть много "но".

0. Хранение файлов в БД в 99,9% случаев -- очень плохая затея.
А в данном конкретном случае это вообще не требуется.

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

2. Загрузка может провалиться, если будет превышен upload_max_filesize.

3. Если пользователь ввел что-либо неверно, может потребоваться вернуть его на страницу с формой для дозаполнения/редактирования.
Есть два варианта:
3а. Матерясь и проклиная тебя юзер снова лазить по своему диску в поисках файлов.
3б. Ты временно сохраняешь файлы на сервере, но придется заморочиться с их своевременным удалением и т. д.

Поэтому, оптимально (ИМХО) нужно делать так:
1. Юзер заполняет форму с информацией о себе.
2. Все верно -- см. п. 3, нет -- см. п. 1.
3. Инфа о юзере положена в БД, его приглашают загрузить фотки.
4. Фотки ложатся в отдельную папочку на диске.

Про загрузку файлов почитай здесь -- http://phpfaq.ru/upload.
 

Spectrum

Guest
lucas спасибо за объёмный и исчерпывающий ответ.
Одного не пойму :) схемы - 1)отправил я в базу данные - это понятно - а вот как увязать дальнейшие действия - добавление файлов /создание папки , добавление файлов/ с данными отправленными в базу.
Если я правильно понял в базе хранятся только ссылки на файлы - вопрос в том как связать отправляемые файлы с данными в таблице....Допустим пользователь добавил иформацию она записана в базе/таблице скажем под id20 что дальше делать то???Буду очень благодарен за алгоритм дальнейших действий.Спасибо.
 

lucas

Guest
Spectrum

в базе хранятся только ссылки на файлы
Как будет показано ниже, в этом нет абсолютно никакой необходимости.
____________________________________________________

Заранее решаем, что фотки будут лежать, например, в папке ./images/users/.

Схему добавления немного изменим:

1. Приглашаем пользователя ввести данные о себе.

2. Все правильно -- см. п. 3, нет -- см. п. 1.

3. Стартуем сессию (http://phpfaq.ru/session)
и ложим в нее данные пользователя.

4. Приглашаем его загрузить файлы (http://phpfaq.ru/upload).

5. Все правильно -- см. п. 6, нет -- см. п. 4.

6. Ложим данные пользователя из сессии в БД.

7. Извлекаем ([m]mysql_insert_id[/m]) id только что добавленной записи -- 20, например.

8. Создаем ([m]mkdir[/m]) папку ./images/users/20/.

9. Копируем ([m]move_uploaded_file[/m]) файлы в эту папку.

/moderators

Коли тема уже мало относится к БД, хорошо бы перенести ее в "Все о прогр. на PHP".
Спасибо.
 

Spectrum

Guest
Если файлы загружаются во временную папку домустим htdocs/uploaвы такой вопрос - если файлы загружают одновременно 2 пользователя как нам потом с ними разобраться так что бы они не попутались при копировании в созданную папку ./images/users/20/?
2)Мне не совсем понятен механизм внесения в базу именно имён файлов , путь понятен ./images/users/20/ - только что сгенерированный , а вот взять файл из временной папки скопировать в нашу - а как определить какой файл был первым, какой вторым и т.д - ну что бы внести в базу в соответствующие колонки - не могу понять. Буду очень признателен за рекомендацию.Спасибо.
 

Crazy

Developer
Автор оригинала: lucas
Как будет показано ниже, в этом нет абсолютно никакой необходимости.

... много поскипано ...
7. Извлекаем ([m]mysql_insert_id[/m]) id только что добавленной записи -- 20, например.

8. Создаем ([m]mkdir[/m]) папку ./images/users/20/.
Таким образом, ссылка на файл хранится в колонке "id". :) Чудес не бывает.
 

lucas

Guest
как нам потом с ними разобраться
При загрузке файлов ты получишь массив $_FILES, в котором будет находиться информация о файлах, посланных тебе.

+ Прочитай п. 3 еще раз -- стартуется сессия, после чего мы уже пожем утверждать, что различаем пользователей.

а как определить какой файл был первым, какой вторым
По стандарту HTML полям формы можно давать разные такие имена, ага?
 
Сверху