Эта тема на forum.dklab.ru


Миша83: Вывод изображений в таблицу из БД
Доброго времени суток!

Пытаюсь написать простейшую галерею. Изображения храню в MySQL. Загрузить изображения в БД получается. Вывести одно изображение тоже удалось (убедился, что изображение сохраняется верно). Никак не могу вывести изображения в таблицу. Прошу помочь.

Вот код сохранения изображения:

<?php
if (@$_REQUEST['bn_ok']===" Загрузить ")
{//кнопка нажата


if(fopen($_REQUEST['filename'],"r"))
{
// $img_hndl = imageCreateFromJpeg($_REQUEST['filename']);
// Header("Content-type: image/jpeg");
// imageJpeg($img_hndl);

//Открываем соединение с БД
@mysql_connect('localhost', 'root', '')
or die("Error connectiong to database: ".mysql_error());
@mysql_select_db('gallery')
or die("Error connectiong to database: ".mysql_error());

$tmp_pic = mysql_escape_string(file_get_contents($_REQUEST['filename']));
// Header("Content-type: image/jpeg");
// Echo($test_pic);

//вставляем в таблицу pictures запись
mysql_query("INSERT INTO pictures SET comment='{$_REQUEST['comment']}', image ='$tmp_pic'")
or die("Error connectiong to database: ".mysql_error());

}
else die("Ошибка открытия файла");


}//кнопка нажата
?>
<FORM action="addimg.php" enctype"multipart/form-data" method=post>
<TABLE WIDTH=50% VALIGN=CENTER ALIGN=CENTER>

<TR> <TD WIDTH=10%> Изображение:</TD><TD WIDTH=90%> <input type=file name=filename size=100%></TD> </TR>
<TR> <TD WIDTH=10%> Комментарий:</TD><TD WIDTH=90%> <input type=text name=comment size=100%> </TD> </TR>
<TR> <TD COLSPAN=2 ALIGN=CENTER> <input type=SUBMIT name=bn_ok value=" Загрузить "> </TD> <TR>
</FORM>



А вот как я пытаюсь изображение вернуть на экран:


<?php
//Открываем соединение с БД
@mysql_connect('localhost', 'root', '')
or die("Error connectiong to database: ".mysql_error());
@mysql_select_db('gallery')
or die("Error connectiong to database: ".mysql_error());
$result = mysql_query('SELECT * FROM pictures');
// echo mysql_num_rows($result);
// Header("Content-type: image/jpeg");
for ($data=array();$row=mysql_fetch_assoc($result);$data[]=$row)
{
Echo(" <TABLE BORDER=1> <TR> <TD> {$row['id']} </TD> <TD> ImageJpeg({$row['image']}) </TD> </TR> <TABLE>");
}


?>

<HTML>
<HEAD>
<TITLE>Галлерея</TITLE>
</HEAD>
<BODY>

<!-- Главная таблица -->
<TABLE WIDTH = 100% BORDER=1 >

<TR > <!-- Строка изображений и миниатюр -->
<TD WIDTH = 15% ALIGN=CENTER VALING=middle> Миниатюры </TD>
<TD WIDTH = 85% ALIGN=CENTER VALING=middle> <!-- <input type=image src=> --></TD>
</TR>


<TR> <!-- Строка меню -->

<TD ALIGN=CENTER VALING=middle COLSPAN=2> <A HREF=addimg.php> Добавить </A> </TD>

</TR>

</TABLE>

</BODY>
</HTML>



Код привел полный, чтобы понятно было все :)
Maus:
Миша83
http://forum.dklab.ru/about/todo/PravilaEtogoForuma-ProchitayteObyazatelno.html - оформляйте код!
Исправил, а то читать тяжело
Maus:
так, вродe бы ясно. Вы плоохо себе представляете, как работает рендеринг HTML-документа . Если забыть про кэширование, то процесс выглядит так:
браузер парсит полученный документ. Если он в нем находит описание внешних объектов (файлы с внешними таблицами стилей, файлы со скриптами, фреймы, изображения, флеш и прочие произвольные объекты), то по каждому этому объекту он делает отдельный HTTP-запрос. Среди заголовков ответа должен присутсвовать заголовок, декларирующий тип содержимого (для HTML - это text/html , для JPG-изображений - image/jpeg ).
Итак: хранить картинки в БД в большинстве случаев нецелесообразно. Достаточно лишь хранить файловые пути к ним. Если Вам всё же приходится это делать - Вы пишете скрипт, который выгружает из БД одну картинку (соотвествующую пришедшему из запроса идентификатору) и отдаёт её вместе с нужными заголовками.
В HTML это будет выглядеть примерно так:
<img src="showimg.php?id=12" alt="" />
Юрий Насретдинов:
...обратите внимание, что картинки лучше _всегда_ хранить в файловой системе, а не в базе, тут много причин: во-первых, это просто удобнее, во-вторых, быстрее (не надо запускать отдельный скрипт и не надо напрягать базу данных), в третьих, неизвестно, как кэшируются картинки, отдаваемые скриптом.
Anonymous:
Большле спасибо. Все получилось. Проблема была действительно в неполном понимании процесса обработки документа браузером.
Maus:
Тема закрыта.

Эта тема на forum.dklab.ru