HTML — Получение поврежденного изображения с помощью BLOB с переполнением стека

Просто для записи, это делается с помощью WordPress (я не выбрал его и не сохранял изображения в БД).

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

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

HTML:

<input type="file" name="img" id="media">

PHP:

$item['media'] = addslashes (file_get_contents($_FILES['img']['tmp_name']));
$result = $wpdb->insert($table_name, $item);

И вот как я пытаюсь получить его:

HTML:

<img src="Image_View.php?image_id=<?php echo $item["item_id"]; ?>"/>

Image_View.PHP:

<?php
global $wpdb;
$result =  $wpdb->get_row("SELECT media FROM $wpdb->item WHERE item_id = 3", ARRAY_A);
header("content-type: image/png");
echo $result["media"];
?>

КСТАТИ! это мой первый вопрос в Stackoverflow! так привет всем!


Изменить 1:

Как упоминал Ханшенрик, $ wpdb-> insert избегает ввода, поэтому я загрузил и image затем записал его на диск, установил правильное расширение и BOOM, теперь я знаю, что я на самом деле загружаю изображение надлежащим образом, но оно выглядит как будто у меня все еще возникают проблемы при попытке показать это, когда я использую инструмент разработчика Chrome, я получаю это:

ПОЛУЧИТЬ http://127.0.0.1/pymes/wp-admin/Image_View.php 500 — внутренняя ошибка сервера)

Итак, что-то не так с Image_View.php? запрос на самом деле хорош и извлекает данные, так как я скопировал и вставил этот код в другое место, и он повторил весь набор символов внутри файла bin.


Изменить 2:

Снова! извините за опоздание на это, я работал

Итак, решение моей проблемы при загрузке изображения было объяснено в Edit 1 (спасибо hanshenrik за то, что он предположил, что вставка wpdb экранировала вход).

Что касается показа изображения, у меня были проблемы с отправкой заголовков, прежде чем он смог сделать это:

header("content-type: image/png");

поэтому я боролся с этим и решил попробовать использовать URI для изображения, что решило мою проблему. Для меня это скорее обходной путь, нежели реальное исправление, но он плавал в моей лодке. способ, которым я реализовал URI, выглядит следующим образом:

<?php
global $wpdb;
$result =  $wpdb->get_row("SELECT media FROM $wpdb->item WHERE item_id = $_GET[id]", ARRAY_A);

echo '<img src="data:image/png;base64,'.base64_encode($result['media']).'" height="100" width="100"/>';
?>

При этом мне больше не нужен файл Image_View.php.

Очень ценю помощь, оказанную здесь, ребята!

1

Решение

$item['media'] = addslashes (file_get_contents($_FILES['img']['tmp_name']));
$result = $wpdb->insert($table_name, $item);

addslashes? ты сумасшедший? используйте правильную escape-функцию SQL, если $ wpdb-> insert не сбежит для вас.

в любом случае, с вашим текущим кодом это может сработать ..

 echo stripslashes($result["media"]);

или возможно

echo htmlspecialchars(stripslashes($result["media"]));
0

Другие решения

Итак, решение моей проблемы при загрузке изображения было объяснено в Edit 1 (спасибо hanshenrik за то, что он предположил, что вставка wpdb экранировала вход).

Что касается показа изображения, у меня были проблемы с отправкой заголовков, прежде чем он смог сделать это:

заголовок («content-type: image / png»);
поэтому я боролся с этим и решил попробовать использовать URI для изображения, что решило мою проблему. Для меня это скорее обходной путь, нежели реальное исправление, но он плавал в моей лодке. способ, которым я реализовал URI, выглядит следующим образом:

get_row («ВЫБЕРИТЕ мультимедиа из $ wpdb-> item WHERE item_id = $ _GET [id]», ARRAY_A);

эхо »;
?>
При этом мне больше не нужен файл Image_View.php.

Очень ценю помощь, оказанную здесь, ребята!

0

По вопросам рекламы [email protected]