Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как правильнее будет загружать фото на сервер?
else{echo"<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>";exit;}
$name_f=$_FILES['image']['name'];
mysql_query("INSERT INTO `category`( `category_img`) VALUES( '$name_f') ");
echo"Готово!";
}
?>
А если 5 изображений? Как лучше всего их записывать на сервер в папку и название в таблицу в БД?
Что бы админ смог самостоятельно добавлять количество фото, а не только одно.
dXdYdZ
Отправлено: 24 Ноября, 2013 - 18:18:14
Посетитель
Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013
Помог: 11 раз(а)
Здравствуйте.
Во-первых, кроме использования basename, желательно удалять расширение файла, или хотя бы удалять такие расширения, как php,html,phtml,htm и т. д. Или закрыть доступ извне к папке с файлами. Иначе могут, например, загрузить php-файл к Вам на сервер и затем его запустить оттуда.
Во-вторых, Если Вы предварительно обрабатываете имя файла (например, basename), то желательно обработанное имя подставлять и в БД. Иначе можно представить случай, когда эти имена в БД и в каталоге будут разными.
В третьих, в таблице вместе с именем картинки в таблице желательно хранить и её идентификатор. Это может очень понадобиться Вам в будущем. Тип - INT AUTO_INCREMENT PRIMARY KEY NOT NULL.
Далее, имя в папке должно быть уникальным. Поэтому к имени файла в папке (и, соответственно, в таблице) надо добавлять какой-нибудь уникальный идентификатор. Чтобы не получилось, что файлы с одинаковыми именами перезапишут друг друга.
Deonis
Отправлено: 24 Ноября, 2013 - 18:21:51
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
Я вам уже предлагал вариант, где не нужно использовать базу, а изображения привязываются к ID статьи, поста или чего у вас там. Но вы выбрали другой вариант. Тогда есть несколько способов. Вот пара из них:
1. Хранить все пути к файлам в сериализованном виде serialize().
2. Создать отдельную таблицу, где будут всего два поля: id-статьи и путь к изображению.
Теперь, если вы выбиираете первый способ, то будете делать кучу телодвижений для того, чтоб заменить какое-то изображение: вытащить запись из БД, десериализировать, удалить из массива определенное фото, добавить туда новое, снова сериализировать и апдейтить запись в БД. Второй способ более гуманный, т.к. вы делаете один запрос на удление из доп. таблицы в зависимости от удаляемого изображения и еще один запрос, если добавляете новое фото.
Вот поэтому, я никода не храню пути к файлам в БД. В крайнем случае, храню сами изображения, но при условии, что у клиента как минимум VDS/VPS.
Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
dXdYdZ пишет:
Здравствуйте.
Во-первых...
Ок.
Но.. Давайте уж по сути... Как быть? (Добавление) Deonis
2. Создать отдельную таблицу, где будут всего два поля: id-статьи и путь к изображению.
Так я так и сделал.
Вопрос состоит в том, как запихнуть туда (в табл.) несколько фото...
Deonis
Отправлено: 24 Ноября, 2013 - 18:30:27
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
vanya_sl пишет:
Вопрос состоит в том, как запихнуть туда (в табл.) несколько фото...
Если вы, как говорите, так уже сделали, то какие могут быть проблемы? Одна запись - id-статьи + имя/путь к файлу. Следующая запись - следующее фото и т.д. Если у вас на одну статью десять фото, то и записей в таблице будет десять.
vanya_sl
Отправлено: 24 Ноября, 2013 - 18:33:47
Частый гость
Покинул форум
Сообщений всего: 131
Дата рег-ции: Июль 2013
Я ж туда могу пихнуть только 1 фото. И собственно в табл. записать 1 название.
А если фото очень много? Тогда как сделать?
Все фото должны сразу при создании статьи загружаться.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.