Отображать изображение из базы данных в виде ячейки в таблице

#php #mysql

#php #mysql

Вопрос:

Итак, я внедрял веб-сайт спонсорского администратора, а затем столкнулся с некоторыми проблемами.Я знаю, что сохранение изображения в базе данных может быть такой головной болью, но это необходимо (наличие файловой системы для хранения изображений на сервере кампуса запрещено).

Я создаю 3 таблицы:

  • информационная таблица, хранящая текстовую информацию,
  • таблица изображений, хранящая изображения в виде больших двоичных объектов и
  • таблица id_table в качестве справочной таблицы, хранящей записи идентификатора изображения и info id.
 $result=mysql_query("SELECT info_id,info_name,info_year,info_level,info_email,info_describe FROM info");
while($row = mysql_fetch_array($result))
{
    echo "<td>" . $row['info_name'] . "</td>";
    echo "<td>" . $row['info_year'] . "</td>";
    echo "<td>" . $row['info_level' ] . "</td>";
    echo "<td>" . $row['info_email'] . "</td>";
    echo "<td>" . $row['info_describe'] . "</td>";
    $result_image_id = mysql_query("SELECT id_image FROM id_table WHERE id_info = '{$row['info_id']}'");
    $row_image = mysql_fetch_array($result_image_id);
    $result_image = mysql_query("SELECT image_stuff FROM image WHERE image_id = '{$row_image['id_image']}'");
    $row_2 = mysql_fetch_array($result_image);
    $content=$row_2['image_stuff'];
    echo "<td>" ;
    header('Content-type: image/jpeg');
    echo $content;
    echo "</td>";
    echo "</tr>";
}
  

Затем в браузере я был перенаправлен на пустую страницу. Если я удалю эту функцию заголовка, у меня действительно будет таблица на странице, но в столбце изображения ничего нет.

Есть предложения?

Кроме того, я попытался использовать <img> тег в моем цикле while:

 echo "<img src='$content' />";
  

Хорошая новость в том, что это вроде бы сработало, но файл изображения практически не отображался.

На моей странице была таблица с графическим столбцом, заполненным файлами изображений, но это выглядело так, как будто сервер не нашел изображение.

Я предполагаю, что с моим скриптом вставки не существует никаких проблем, потому что, когда я применял этот тег img, логотип «не удается отобразить» появлялся только в ячейке, строка которой соответствует той, которую я загрузил файл изображения в базу данных…

Ответ №1:

Вы не можете использовать подобные заголовки…

попробуйте что-то подобное

 $result=mysql_query("SELECT info_id,info_name,info_year,info_level,info_email,info_describe FROM info");
while($row = mysql_fetch_array($result))
{
echo "<td>" . $row['info_name'] . "</td>";
echo "<td>" . $row['info_year'] . "</td>";
echo "<td>" . $row['info_level' ] . "</td>";
echo "<td>" . $row['info_email'] . "</td>";
echo "<td>" . $row['info_describe'] . "</td>";
$result_image_id = mysql_query("SELECT id_image FROM id_table WHERE id_info = '{$row['info_id']}'");
$row_image = mysql_fetch_array($result_image_id);
$result_image = mysql_query("SELECT image_stuff FROM image WHERE image_id = '{$row_image['id_image']}'");
$row_2 = mysql_fetch_array($result_image);
$content=$row_2['image_stuff'];
echo "<td>" ;
echo '<img src="data:image/png;base64,' . base64_encode($content) . '" />';
echo "</td>";
echo "</tr>";
}
  

Измените png для любого типа изображения, которое вы сохранили. Я не особо изучал код, но это должно сработать.

Комментарии:

1. если бы я не кодировал $ content, я бы получил что-то вроде localhost / project_name / Array в качестве URL произвольного изображения. В столбце изображения появился логотип «не может быть отображен». Возможно ли, что в моем скрипте вставки изображения что-то не так?

2. base64_encode() это ограничение пропускной способности, когда вы берете двоичное изображение и преобразуете его в символы ASCII! Почему бы не сохранить изображение на диск или, еще лучше, не сохранять двоичное изображение в базе данных? Сохраните путь к двоичному изображению в вашей файловой системе, доступной через Интернет.

3. @YzmirRamirez «(наличие файловой системы для хранения изображений на сервере кампуса запрещено)» Цитируется из OP.

4. $sql_2=»ВСТАВИТЬ В изображение (image_id,image_name,image_stuff) ЗНАЧЕНИЯ (NULL, ‘$_FILES[file][name]’, ‘$_FILES[file]’);»; if (!mysql_query($sql_2,$con)) { die(‘Ошибка: ‘ . mysql_error()); }

5. Я опустил другие части, например, оценку того, является ли тип файла допустимым и прочее.

Ответ №2:

echo «» . $row [‘post_image’] . «»

Комментарии:

1. Пожалуйста, объясните, как это может помочь автору вопроса?