Невозможно отобразить изображение, хранящееся в базе данных MySQL после подключения к базе данных через php - PullRequest
2 голосов
/ 12 марта 2012

Я новичок и только начал работать с изображениями в базе данных PHP и MySQL. Вот проблема:

Изображение успешно сохраняется в таблице базы данных в поле BLOB. Я могу написать это в файле (new.jpg) и отобразить изображение. Теперь вот twsiter - файл imagedisplay.php, который я создал для отображения изображения на веб-странице, может прочитать файл new.jpg из каталога папки. Но как только я подключаюсь к базе данных, чтобы получить данные изображения непосредственно из базы данных (чтобы мне не пришлось включать в код файл new.jpg), он начинает показывать ошибку «Изображение содержит ошибки ..... "

Код, используемый для загрузки изображения:

<?php
require_once 'login.php';  //contains the classes for connecting to databases
$dbh=new DB_Mysql;         //executing queries  
$func=new DB_Mysql_code_functions;

session_start();
if(isset($_SESSION['username']))
{
    echo<<<_END
    <form method="post" action="admin_social_activities.php" enctype="multipart/form-data">
    <table width="990">
    <tbody>
    <tr><td>Select an image file to be uploaded:</td></tr>
    <tr><td><input type="submit" value="UPLOAD" /></td></tr>
    </tbody>
    </table>
    </form>
_END;

    if(isset($_FILES['imagefile']['tmp_name']))
    {   
        $imagefile=$_FILES['imagefile']['tmp_name'];
        $image_size=$_FILES['imagefile']['size'];
        $image_name=addslashes($_FILES['imagefile']['name']);
        $image_data = addslashes(file_get_contents($imagefile));

        $image_array=getimagesize($imagefile);
        $image_type=$image_array['mime'];
        $image_height=$image_array[1];
        $image_width=$image_array[0];

        $maxfilesize=2000000;

        if($maxfilesize<$image_size)
        {
            echo "Please upload a smaller image. The size of the image is too   large.";
        }
        else
        {

            $query="INSERT INTO allery(image_name,image_type,image,image_size)  VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')";
            $stmt=$dbh->execute($query);
            $lastimageid=mysql_insert_id();
            $query="select * from gallery where mage_id=".$lastimageid;
            $stmt=$dbh->execute($query);
            $row=$stmt->fetch_row();
            if(file_exists("new.jpg"))
            unlink("new.jpg");
            $handle=fopen("new.jpg",'wb');
            fwrite($handle,$row[3]);
            fclose($handle);

            echo "<p>You uploaded this image</p><img src='imagedisplay.php'     height=".($image_height/2)." width=".($image_width/2).">";
        }
    }
}

, а текущий код файла imagedisplay.php приведен ниже, и на нем отображается изображение в порядке:

<?php
header("Content-type: image/jpeg");
$image=imagecreatefromjpeg("new.jpg");
imagejpeg($image);
imagedestroy($image);
?>

Прекращает отображение изображения, как только я включаю запрос подключения в imagedisplay.php

<?php
require_once 'login.php';
$dbh= new DB_Mysql();
$func=new DB_Mysql_code_functions;

header("Content-type: image/jpeg");
$image=imagecreatefromjpeg("new.jpg");
imagejpeg($image);
imagedestroy($image);
?>

Я застрял на этом уже несколько дней ... пожалуйста, помогите ..


ОК ... поэтому я изменил свой подход ... Теперь я передаю image_id в строку запроса и затем включаю тег изображения imagedisplay.php: Обратите внимание, что я не могу написать головную часть кода здесь из-за некоторых проблем с форматированием. Заголовок - это стандартный раздел HTML, предварительно отформатированный в Dreamweaver.

<body>
<div class="page shadow-round">


<div id="header">
<div id="logo">
<script type="text/javascript" src="../js/header.js"></script>
</div>
</div>
<div id="menu">
<script type="text/javascript" src="../js/navmenu.js"></script>
<script type="text/javascript">
</script>
</div>


<div class="content overflow" style="height:900px;">

<?php
require_once 'login.php';  //contains the classes for connecting to databases
$dbh=new DB_Mysql;         //executing queries  
$func=new DB_Mysql_code_functions;

session_start();
if(isset($_SESSION['username']))
{
    echo<<<_END
    <form method="post" action="admin_social_activities.php" enctype="multipart/form-data">
    <table width="990">
    <tbody>
    <tr><td>Select an image file to be uploaded:</td></tr>
    <tr><td><input type="submit" value="UPLOAD" /></td></tr>
    </tbody>
    </table>
    </form>
_END;

    if(isset($_FILES['imagefile']['tmp_name']))
    {   
        $imagefile=$_FILES['imagefile']['tmp_name'];
        $image_size=$_FILES['imagefile']['size'];
        $image_name=addslashes($_FILES['imagefile']['name']);
        $image_data = addslashes(file_get_contents($imagefile));

        $image_array=getimagesize($imagefile);
        $image_type=$image_array['mime'];
        $image_height=$image_array[1];
        $image_width=$image_array[0];

        $maxfilesize=2000000;

        if($maxfilesize<$image_size)
        {
            echo "Please upload a smaller image. The size of the image is too   large.";
        }
        else
        {

            $query="INSERT INTO gallery(image_name,image_type,image,image_size)  VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')";
            $stmt=$dbh->execute($query);
            $lastimageid=mysql_insert_id();
        echo "<p>You uploaded this image</p>";
        echo "<img src='imagedisplay.php?imageid=".$lastimageid."' />";
        }
    }
}
else

echo "<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Your are <span class=\"red\"><b>not Authorized</b></span> to view this page. If you are the Admin, please login with your credentials again. <a href='login_page.php'>Click here to continue</a>";


?>
</div>
</body>
</html>

Теперь проблема в том, что элемент управления никогда не переходит в imagedisplay.php, т.е. он вообще не ссылается на imagedisplay.php.

код для imagedisplay.php ниже:

<?php
require_once 'login.php';
$dbh= new DB_Mysql();
$func=new DB_Mysql_code_functions;
$id=$_GET['imageid'];
$query="SELECT * FROM gallery where image_id=".$id;

$stmt=$dbh->execute($query);
$row=$stmt->fetch_row();
$imagedata=$row[3];
header("Content-type:image/jpeg");
echo $imagedata;
?>

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

1 Ответ

1 голос
/ 12 марта 2012

В ваших запросах есть ошибки ("allery", "mage_id").

$query="INSERT INTO allery(image_name,image_type,image,image_size)  VALUES ('".$image_name."','".$image_type."','".$image_data."','".$image_size."')";
...
$query="select * from gallery where mage_id=".$lastimageid;

Если у вас есть ошибки в вашем коде в imagedisplay.php, они будут выводиться и попадать в данные изображения, повреждая их. Посмотрите, что выводит imagedisplay.php, если вы удалите imagejpeg () и не отправите заголовки изображений. Это даст вам необходимую информацию.

...