2012-03-10 91 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