Получение изображения из базы данных с использованием PHP - PullRequest
2 голосов
/ 27 мая 2011

в первый раз с использованием переполнения стека.

Я следовал следующему учебному пособию по YouTube из 2 частей по загрузке / хранению изображения в базе данных MYSQL.Я следовал инструкциям, но мое изображение не появляется для меня.Я использую connect.php для подключения к базе данных, это работает нормально.Кажется, проблема в get.php, потому что когда я тестирую эхо-изображения с него, я всегда не получаю изображения.использовал phpmyadmin для создания базы данных и использую xampp.

вот ссылка на учебные пособия по YouTube

http://www.youtube.com/watch?v=CxY3FR9doHI

http://www.youtube.com/watch?v=vFZfJZ_WNC4&feature=fvwrel

Включеноэто файлы

<html>
<head>
    <title>Upload an image</title>
</head>
<body>

<form action="index.php" method="POST" enctype="multipart/form-data">
    File:   
<input type="file" name="image"> <input type="submit" value="Upload">
</form>

<?php

include 'connect.php';



//file properties
$file = $_FILES['image']['tmp_name'];

if(!isset($file))
    echo "Please select an image.";
else{

    $image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
    $image_name=addslashes($_FILES['image']['name']);
    $image_size = getimagesize($_FILES['image']['tmp_name']);

    if ($image_size==FALSE)
        echo "That's not an image.";
    else{
            if(!$insert = mysql_query("INSERT INTO store       VALUES('','$image_name','$image')"))
        echo"Problem uploading image";
    else{
        $lastid = mysql_insert_id();

        echo "image uploaded.<p />your image:<p /><img src=get.php?id=$lastid>";
        }
    }
}

?>
</body>
</html>

Вот get.php

<?php
include 'connect.php';

$id=stripslashes($_REQUEST('id'));
$image = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image=$image('image');

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


?>

И наконец подключаем

<?php
// connect to database

$db_host="localhost";
$db_username="root";
$db_pass="";
$db_name="test";

@mysql_connect("$db_host","$db_username","$db_pass") or die("Could not connect to      mysql");
mysql_select_db("$db_name")or die("Cant find database");

?>

Ответы [ 6 ]

4 голосов
/ 27 мая 2011

Ваш get.php не echo $image.
Также $image=$image('image'); должно быть $image=$image['image'];, а $_REQUEST('id') должно быть $_REQUEST['id'].

P.S. Не используйте addslashes для предотвращения SQL-инъекций. Используйте mysql_real_escape_string.

1 голос
/ 27 мая 2011

Вам не хватает строки после вывода заголовка

header("content-type: image/jpeg");
echo $image;
1 голос
/ 27 мая 2011

Вы никогда не отображаете данные изображения в get.php, поэтому вы отправляете пустое 0-байтовое изображение.

0 голосов
/ 27 мая 2011

Вам лучше bas64_encoding для декодирования таким образом, что ни один ответ не создаст проблему.

base64_encode(file_get_contents($_FILES['image']['tmp_name']));

Это неправильно, поскольку массив [] not () include 'connect.php';

$id=stripslashes($_REQUEST('id'));
$image = mysql_query("SELECT * FROM store WHERE id=$id");
$image = mysql_fetch_assoc($image);
$image=$image['image'];

header("content-type: image/jpeg");
echo base64_decode($image);
0 голосов
/ 27 мая 2011

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

<?php
ob_start();
require_once("db.php.lib");

DBLogin();
$sql = "select pic_user_id, pic_full_data as bindata, pic_full_mime as mime, pic_full_size as size from pics where pic_name = '".urldecode($_GET["pic_name"])."'";

$result = DBExec($sql);
if ($result)
{
  $row = DBGetNextRow($result);
  if ($row)
  {
    header("Content-type: ".$row["mime"]);
    header("Content-length: ".$row["size"]);
    ob_clean();
    echo $row["bindata"];
    ob_end_flush();
  }
}
?>

Похоже, что вы пропускаете фактический вывод данных изображения, а длина может потребоваться некоторым браузерам..

0 голосов
/ 27 мая 2011

Очень быстрый взгляд, в get.php измените:

$image=$image('image');

на

$image=$image['image'];

mysql_fetch_assoc () преобразует результатыв массив.

...