2012-03-10 95 views
1

我可以成功上传图片在我的数据库,但是当我想在我的应用程序,以显示他们有一个与图像的问题。这里是我的代码部分:PHP不能显示图像

编辑:添加add_image.php

的index.php

<?php 
    session_start(); 
    include("config.php"); 

    $query = mysql_query("SELECT * FROM images"); 
    $numrows = mysql_num_rows($query); 

    if($numrows != 0) { 

    while($row = mysql_fetch_assoc($query)) { 
    $title = $row['TITLE']; 
    $id = $row['ID']; 
    $image = $row['IMAGE']; 
    echo $title; 
    echo "<img src=image.php?id=$id>"; 
    echo("<hr/><br/><br/>"); 
    } 

    } else { 
    die("ERROR"); 
    } 

?> 

image.php

<?php 
    include("config.php"); 

    $id = (int)$_REQUEST['id']; 

    $image = "SELECT * FROM images WHERE ID = $id"; 
    $image = mysql_query($image) or die('Error, query failed'); 
    $image = mysql_fetch_assoc($image); 
    $image = $image['image']; 
    header("Content-type: image/jpeg"); 
    echo $image; 
?> 

add_image.php

<?php 
    session_start(); 

    $title = $_POST[title]; 

    if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) { 
    $fileName = $_FILES['userfile']['name']; 
    $tmpName = $_FILES['userfile']['tmp_name']; 
    $fileSize = $_FILES['userfile']['size']; 
    $fileType = $_FILES['userfile']['type']; 

    $fp = fopen($tmpName, 'r'); 
    $content = fread($fp, filesize($tmpName)); 
    $content = addslashes($content); 
    fclose($fp); 

    if(!get_magic_quotes_gpc()) { 
     $fileName = addslashes($fileName); 
    } 

    include("config.php"); 

    $query = "INSERT INTO images (TITLE,IMAGE) VALUES ('$title','$content')"; 

    mysql_query($query) or die('Error, query failed'); 

    echo "<br>File $fileName uploaded<br>"; 
    } 
?> 
+6

sql注入检测 – 2012-03-10 21:42:23

+4

在你的查询中有''''''。 – animuson 2012-03-10 21:43:22

+3

为什么你将图像存储在数据库中? – pomeh 2012-03-10 21:43:27

回答

2

有几个问题这可能是这个原因。

  1. 您插入脚本,该colums被命名为全部大写字母(IMAGE,例如),而你的选择试图让image(小写) - 在数据库至极一个实际使用?这应该协调一致。

  2. 你正在使用addslashes转义字符串之前与数据库交互(我假设预先注入SQL注入),你应该实际使用mysql_real_escape_string。这不是一个问题了,但addslashesmight not shelter from sql-injections

  3. 时写下这个答案,你没有获取在image.php查询结果,至极应该是主要的问题,但在此期间,你把它改成$image = mysql_query($image),所以它可能是正确的 - 请简单地交你的真实代码经常在这里改变,否则不可能告诉它有什么问题。

  4. 对你add_image.php,变量$fileName永远不会真正在初始化后使用,而使用$title,但从未初始化。如果这是你真正的生产代码,您image -column永远是空的,所以tehre什么来显示。

  5. 假设$fileName$title应该是相同的,它只是一个错字,你不应该逃避,只有它magic_quotes的未启用。相反,如果是magic_quotes的enagled找回“真正”的字符串,然后总是使用mysql_real_escape_string(见2)你应该运行stripslashes。如果可能的话,你应该完全禁用magic_quotes,因为它只是提供了一些东西。

+0

(2)没有意义。你试图说什么? – 2012-03-10 22:25:51

+0

我不是英语母语的人,所以有时很难表达自己 - 但我试过改写这一点,使其更容易理解 – oezi 2012-03-10 22:32:19

+0

它不是语言,它是这个问题。它意味着“addslashes可能会添加斜线图像内容,他们是不必要的”? – 2012-03-10 22:42:33