2014-10-30 2 views
0

У меня есть четыре файла:Изображения отображаются пустыми при получении из PHP базы данных MySQL

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

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

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

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

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

код, чтобы каждой странице:

  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

Какой тип вы используете для хранения контента в БД? Также я не совсем уверен, что вы можете сохранить двоичный контент в db. – Tomasz

+1

Чтобы начать, вы должны указать строку источника изображения: 'src = 'image.php? Id =". $ Row [' id ']. "''. Кроме того, вы должны попытаться сузить проблему, какие ответы вы получаете для изображений на вкладке net ваших инструментов разработчиков, сообщений об ошибках mysql или содержимого изображения? – jeroen

+0

Я использую id, aname varchar 200, текст adetails, BLOB для прицеливания, aphototype varchar 200 – Tom

ответ

0

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

2 всех вас должен использовать mysql_escape_string (file_get_contents ($ _ FILES ['aphoto'] ['tmp_name'])) вместо addshlashes.

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

0

Существует множество проблем с кодом, но наиболее примечательными в том, что вы используете deprecated mysql functions, и ваш код уязвим для SQL injection attack.

Я переписал 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; 
}