Как отобразить одно изображение из базы данных, используя php? - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь отобразить одно изображение из базы данных в индексе. php. База данных успешно подключена. но, к сожалению, изображение не было показано. Не знаю, в чем моя ошибка в коде. Могу я помочь, пожалуйста. Имя базы данных "newss" Имя таблицы "main_img" включает 4 столбца (id (int), title (varchar), source (varchar), image (blob)), мой код удар:

//getImage.php
<?php
require_once('connection.php');
if(isset($_GET['id']))
{
    $id = mysqli_real_escape_string($_GET['id']);
    $query = mysqli_query("SELECT * FROM `main_img` WHERE `id`='$id'");
    while($row = mysqli_fetch_assoc($query))
    {
        $imageData = $row["image"];
    }
    header ("content-type: image/jpeg");
}
else
{
  echo "Error! in retrive the image ";
}
?>

//index.php 
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hello in the page of displaying the image </h1>
    <img src="getImage.php?id=2">
</body>
</html>

Ответы [ 2 ]

1 голос
/ 01 августа 2020

@ mpm уже ответил на ваш вопрос, но ваш код уязвим для SQL Injection . Это очень серьезная уязвимость вашего веб-сайта, поскольку злоумышленники могут использовать ее для чтения всей вашей базы данных.

Более подробная информация здесь: https://owasp.org/www-community/attacks/SQL_Injection

Важное Дело в том, что пользователь может управлять переменной $ id, которую вы используете в $query = mysqli_query("SELECT * FROM `main_img` WHERE `id`='$id'");. Таким образом, злоумышленник может изменить запрос в этой точке. Например, он мог бы использовать полезную нагрузку ' UNION SELECT * FROM users для добавления всей пользовательской информации (пароли, адреса электронной почты и т. Д. c.) К выходным данным вашего веб-сайта.

Есть несколько способов предотвратить это, но самый простой заключается в использовании подготовленных операторов. Это выглядит примерно так:

$stmt = $dbConnection->prepare("SELECT * FROM `main_img` WHERE `id`=?");
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();
while($row = mysqli_fetch_assoc($query)) {
    // ...
}

Таким образом вы убедитесь, что MySQL не интерпретирует любой ввод пользователя как код SQL, а только как значения.

Опять же, еще подробная информация здесь: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html

0 голосов
/ 01 августа 2020

Вы никогда не выводили никаких графических данных. Вам нужно будет использовать readfile($imageData); для вывода изображения

Вот пример вывода изображений: Вывод изображения в PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...