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
Форумы портала PHP.SU :: Версия для печати :: PHP, MySql Как и где хранить изображения
Форумы портала PHP.SU » » Вопросы новичков » PHP, MySql Как и где хранить изображения

Страниц (2): [1] 2 »
 

1. vanya_sl - 23 Ноября, 2013 - 17:36:50 - перейти к сообщению
Здравствуйте.
Нужно решить такую ​​задачу:
Создал таблицу в БД с такими полями:
- category_id
- category_name
- category_img
- category_description

Мне нужно что бы в админке пользователь все вводил, а на сайте на какой-то странице это все выводилось.
С текстовыми полями проблем при записи и выводе нет.
НО Как быть с изображением? Ведь хранить их в поле БД не совсем корректно...
Спасибо.
2. dXdYdZ - 23 Ноября, 2013 - 17:40:48 - перейти к сообщению
Здравствуйте. Изображения можно хранить в отдельной папке с уникальными именами файлов, а в БД хранить только пути (или даже только имена файлов) к ним.
3. teddy - 23 Ноября, 2013 - 17:41:55 - перейти к сообщению
храните в папке а название файла в БД, и по запросу уже вытягивайте нужное название файла и потом по этому названию дергайте из папки картинку
4. vanya_sl - 23 Ноября, 2013 - 17:42:32 - перейти к сообщению
dXdYdZ пишет:
Здравствуйте. Изображения можно хранить в отдельной папке с уникальными именами файлов, а в БД хранить только пути (или даже только имена файлов) к ним.

Ну я так и думал. А как правильно будет это сделать? Записать в папку а затем выводить?
5. Deonis - 23 Ноября, 2013 - 17:44:47 - перейти к сообщению
vanya_sl пишет:
хранить их в поле БД
А разве кто-то запрещает их хранить на сервере? Сохраняйте изображение, переименовывая с привязкой по ID категории, а поле category_img в этом случае - становится вообще лишним.
6. vanya_sl - 23 Ноября, 2013 - 17:47:38 - перейти к сообщению
Deonis пишет:
vanya_sl пишет:
хранить их в поле БД
А разве кто-то запрещает их хранить на сервере? Сохраняйте изображение, переименовывая с привязкой по ID категории, а поле category_img в этом случае - становится вообще лишним.


А можно код? (как записать в паку и вывод)
7. teddy - 23 Ноября, 2013 - 18:04:57 - перейти к сообщению
vanya_sl
Когда файл загружаете, при move_uploaded_file записывайте имя успешно загруженного файла в БД вашей и возможно укажите категорию(как у вас там по логике так и делайте). Повторюсь, имя файла, а не сам файл... а сами файлы храните в обычной папке

и когда будете принимать параметр(id либо категорию в зависимости от логики приложения)
дергайте название файла из БД который имеет отношение к этой категории/параметру.

а потом просто выводите
PHP:
скопировать код в буфер обмена
  1. echo '<img src="/images/$row[\'imagename\']">';

таким образом для каждого запроса можно подставить свою картинку...
8. Deonis - 23 Ноября, 2013 - 18:06:05 - перейти к сообщению
Если записываете новую статью, то после запроса используете функцию mysql_insert_id или аналогичными, если используете PDO/MySQLi. Далее загружаете файл:
PHP:
скопировать код в буфер обмена
  1. // загрузка
  2. $cat_id = mysql_insert_id(); // !!! сразу после запроса
  3. $path = $_SERVER['DOCUMENT_ROOT'].'/cat_img/cat_'.$cat_id.'.jpg';
  4. if($_FILES['cat_img']['error'] == 0){
  5.     if(move_uploaded_file($_FILES['cat_img']['tmp_name'],$path)){
  6.         echo 'Файл успешно загружен!';
  7.     }
  8. }
  9. // Вывод:
  10. $path = '/cat_img/cat_'.$cat_id.'.jpg'; // $cat_id - получаете после выборки статьи из БД
  11. if(file_exists($_SERVER['DOCUMENT_ROOT'].$path)) {
  12.     echo '<img src="'.$path.'" alt="">';
  13. }
  14.  
Пример абстрактный, поэтому не забывайте, что его надо подкорректировать по себя/ К примеру, оставлять родные расширения файлов и т.д.
9. _Dark_ - 23 Ноября, 2013 - 18:09:12 - перейти к сообщению
Но можно хранить и в MySQL, как BLOB.
10. vanya_sl - 23 Ноября, 2013 - 18:12:04 - перейти к сообщению
_Dark_ пишет:
Но можно хранить и в MySQL, как BLOB.


Можно. А как выводить? Как обыкновенное поле?

Так выводит только название:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.         $strSQL = "SELECT * FROM category LIMIT 15 ";
  4.         $rs = mysql_query($strSQL);
  5.         while($row = mysql_fetch_array($rs)) {
  6.  
  7.            echo  $row['category_id'] ;
  8.           echo  $row['category_name'] ;
  9.           echo  $row['category_img'] ;
  10.           echo  $row['category_description'] . "<br />";
  11.  
  12.           }
  13.         ?>
  14.  
11. caballero - 23 Ноября, 2013 - 18:14:47 - перейти к сообщению
Цитата:
НО Как быть с изображением? Ведь хранить их в поле БД не совсем корректно..

а для чего по твоему существет тип BLOB?

хранить в Бд как раз удобнее чем синхронизировать с содержимым файловой системмы
(Добавление)
Цитата:
Так выводит только название:

ну так что задал то и выводит

выведи тег img а в него воткни путь к файлу
12. teddy - 23 Ноября, 2013 - 18:19:32 - перейти к сообщению
caballero
не ради поспорить а интересно просто, если картинок предположим 500 000 то блоб снова рульнее чем папка? он ж прожорливый вроде как, а такой объем информации хранить в БД как то не айс я думаю(ради картинок)... проще сделать CHAR(32) и генерить уникальный md5 для названия файла, а потом уже из папки тянуть картинку по названию

я например только папкой пользуюсь и норм вроде как...
13. Deonis - 23 Ноября, 2013 - 18:19:44 - перейти к сообщению
caballero пишет:
хранить в Бд как раз удобнее
Оно так, но если у ТС шаред-хостинг, то может и тормозить, т.к. файлы из БД будут подгружаться в память, которой на таком хосте и не так уж много выдают.
14. vanya_sl - 23 Ноября, 2013 - 18:21:28 - перейти к сообщению
caballero пишет:

выведи тег img а в него воткни путь к файлу


Можно кодом показать как?
15. _Dark_ - 23 Ноября, 2013 - 18:28:15 - перейти к сообщению
Например:
CODE (html):
скопировать код в буфер обмена
  1. <img src="image_render.php?image_id=4" />


image_render.php:

// делаем запрос в БД на основе идентификатора запроса (image_id)
header("Content-Type: image/png"); // это изображение
echo $imageBlog; // отправляем то, что получено из БД.

Источник.

 

Powered by ExBB FM 1.0 RC1