Просто для записи, это делается с помощью 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.
Очень ценю помощь, оказанную здесь, ребята!
$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"]));
Итак, решение моей проблемы при загрузке изображения было объяснено в Edit 1 (спасибо hanshenrik за то, что он предположил, что вставка wpdb экранировала вход).
Что касается показа изображения, у меня были проблемы с отправкой заголовков, прежде чем он смог сделать это:
заголовок («content-type: image / png»);
поэтому я боролся с этим и решил попробовать использовать URI для изображения, что решило мою проблему. Для меня это скорее обходной путь, нежели реальное исправление, но он плавал в моей лодке. способ, которым я реализовал URI, выглядит следующим образом:
get_row («ВЫБЕРИТЕ мультимедиа из $ wpdb-> item WHERE item_id = $ _GET [id]», ARRAY_A);
эхо »;
?>
При этом мне больше не нужен файл Image_View.php.
Очень ценю помощь, оказанную здесь, ребята!