Изображения отображаются пустыми при извлечении из базы данных php mysql

У меня есть четыре файла:

  1. main.php моя HTML-форма отправки, которая представляет изображение и текст с изображением

  2. storeinfo.php отправляет все мои данные из формы html в базу данных, в которой он работает, мое изображение и текст из формы успешно отправляются

  3. image.php извлекает изображение из базы данных и имеет функцию заголовка для преобразования aimagetype в любой формат изображения png, jpeg ect.

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

Я не могу найти свою ошибку, я предполагаю, что это как-то связано с функцией заголовка в image.php или когда я пытаюсь отобразить изображение с тегом html img в show.php. Загрузка изображения (которое хранится в виде блоба) в базу данных прошло успешно. Почему изображения не отображаются?

Код в заказе на каждой странице:

  1. main.php HTML-форма

    <form enctype="multipart/form-data" action="storeinfo.php" method="POST">
    
    <table border=0 align=center bgcolor=black width=100%>
    <tr><td colspan=2><h2>&nbsp</h2></td></tr>
    </table><table border=0 align=center bgcolor=grey>
    <tr><td colspan=2><h2>Animal Information</h2></td></tr>
    <tr>
    <td>Name</td><td><input type=text name="aname"></td>
    </tr>
    <tr>
    <td>Description</td><td><input type=text name="adetails"></td>
    </tr>
    <tr>
    <td>Photo</td><td><input type=file name="aphoto"></td>
    </tr>
    <tr>
    <td></td><td><input type=submit name="submit" value="Store Information"></td>
    </tr>
    </table>
    </form>
    
  2. storeinfo.php

    <?php
    $conn = mysql_connect("localhost","root","");
    if(!$conn)
    {
    echo mysql_error();
    }
    $db = mysql_select_db("imagestore",$conn);
    if(!$db)
    {
    echo mysql_error();
    }
    $aname = $_POST['aname'];
    $adetails = $_POST['adetails'];
    $aphoto = addslashes (file_get_contents($_FILES['aphoto']['tmp_name']));
    $image = getimagesize($_FILES['aphoto']['tmp_name']);//to know about image type etc
    
    $imgtype = $image['mime'];
    
    $q ="INSERT INTO animaldata VALUES('','$aname','$adetails','$aphoto','$imgtype')";
    
    $r = mysql_query($q,$conn);
    if($r)
    {
    echo "Information stored successfully";
    }
    else
    {
    echo mysql_error();
    }
    ?>
    
  3. image.php

    <?php
    
    $conn = mysql_connect("localhost","root","");
    if(!$conn)
    {
    echo mysql_error();
    }
    $db = mysql_select_db("imagestore",$conn);
    if(!$db)
    {
    echo mysql_error();
    }
    $id = $_GET['id'];
    $q = "SELECT aphoto,aphototype FROM animaldata where id='$id'";
    $r = mysql_query("$q",$conn);
    if($r)
    {
    
    $row = mysql_fetch_array($r);
    $type = "Content-type: ".$row['aphototype'];
    header($type);
    echo $row['aphoto'];
    }
    else
    {
    echo mysql_error();
    }
    
    ?>
    
  4. show.php

    <?php
    //show information$conn = mysql_connect("localhost","root","");
    if(!$conn)
    {
    echo mysql_error();
    }
    $db = mysql_select_db("imagestore",$conn);
    if(!$db)
    {
    echo mysql_error();
    }
    
    $q = "SELECT * FROM animaldata";
    $r = mysql_query("$q",$conn);
    if($r)
    {
    while($row=mysql_fetch_array($r))
    {
    //header("Content-type: text/html");
    echo "</br>";
    echo $row['aname'];
    echo "</br>";
    echo $row['adetails'];
    echo "</br>";
    
    //$type = "Content-type: ".$row['aphototype'];
    //header($type);
    
    //$lastid = mysql_insert_id();
    // $lastid = $lastid;
    //echo "Your image:<br /><img src=image.php?id=$lastid />";
    
    echo "<img src=image.php?id=".$row['id']." width=300 height=100/>";}
    }
    else
    {
    echo mysql_error();
    }?>
    

0

Решение

Прежде всего, я нашел урок о том, как сделать то, что вы пытаетесь сделать здесь:
http://www.mysqltutorial.org/php-mysql-blob/

Во-вторых, вы должны использовать mysql_escape_string (file_get_contents ($ _ FILES [‘aphoto’] [‘tmp_name’])) вместо добавочных черт.

Основываясь на этих двух правилах, вы сможете выяснить, что не так с вашим кодом, вы также можете попробовать с небольшими картинками.

0

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

Есть много проблем с вашим кодом, но наиболее заметным является то, что вы используете устаревшие функции mysql и ваш код уязвим для Атака с использованием SQL-инъекций.

Я переписал storeinfo.php а также image.php работать с mysqli расширение и использование привязки параметров для смягчения внедрения SQL. Я оставлю переписывать show.php в качестве упражнения для вас.

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

storeinfo.php

$aname = $_POST['aname'];
$adetails = $_POST['adetails'];
$aphoto = file_get_contents($_FILES['aphoto']['tmp_name']);
$image = getimagesize($_FILES['aphoto']['tmp_name']);//to know about image type etc
$imgtype = $image['mime'];

$conn = new mysqli("localhost","root","", "imagestore");
if ($conn->connect_errno) {
echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error;
}

if (!($stmt = $conn->prepare("INSERT INTO animaldata (aname, adetails, aphoto, aphototype) VALUES(?, ?, ?, ?)"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
if (!$stmt->bind_param("ssbs", $aname, $adetails, $aphoto, $imgtype)) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
$stmt->send_long_data(2, $aphoto);

if (!$stmt->execute()) {
echo "Insert failed: (" . $conn->errno . ") " . $conn->error;
} else {
echo "Information stored successfully";
}

image.php

$conn = new mysqli("localhost","root","", "imagestore");
if ($conn->connect_errno) {
echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $conn->connect_error;
}

if (!($stmt = $conn->prepare("SELECT aphoto, aphototype FROM animaldata where id=?"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
if (!$stmt->bind_param("i", $_GET['id'])) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}

if (!$stmt->execute()) {
echo "Select failed: (" . $conn->errno . ") " . $conn->error;
} else {
$stmt->bind_result($aphoto, $aphototype);
$stmt->fetch();

header("Content-type: ".$aphototype);
echo $aphoto;
}
0

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