2013-07-20 166 views
2

我一直在關注YouTube上的「在MySQL數據庫中上傳/存儲圖片」這個教程,但這個問題已經兩天了,我一直在試圖調試這個問題的最後兩天,但無法弄清楚它是什麼。問題上傳圖片

下面的代碼:

<?php 
// connect to database 
mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("databaseimage") or die(mysql_error()); 

// 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>"; 
    } 

} 
} 
?> 

每當我試着上傳.png文件或.jpeg文件,代碼打「其他」的情況下內的「如果」的情況下,不傳遞相呼應出「問題上傳圖片」。 我完全按照教程所做的那樣,在教程中的人員能夠通過該「if」情況並實際擊中最後部分並回應「圖片上傳」。

任何人都知道問題可能是什麼?

回答

1

如果你扔問題上傳圖像比它可能進入if條件作爲查詢失敗的錯誤,你應該使用mysql_error()閱讀友好的消息,這是什麼使您的查詢失敗。

echo "Problem uploading image.".mysql_error($connection); 
//Replace connection with the connection var 

注:代碼是完全髒了,還它使用過時mysql_()。所以 開始學習mysqli_()或PDO,也是你的代碼很容易出現SQL注入,更好的消毒數據,並在數據庫中插入任何用戶提供的數據

而且你不檢查文件擴展名和之前逃脫的琴絃文件大小,這是由用戶上傳,所以你也必須這樣做,出於安全原因,並保存上傳到您的服務器上的巨大文件...

+0

這表明我的錯誤是,「錯誤的整數值:''列'第一行的'id'「。所以我在'$ image_name'之前的空白''中放置了一個任意數字,它使它成功,但我認爲我不需要輸入數字,因爲通過數據庫,我將ID設置爲PRIMARY,自動遞增。我應該在這個空白處填寫「來解決這個問題? (我不想讓那個任意數字在那裏,因爲它不覺得正確) – user2512888

+0

@ user2512888如果你的id是AI,那麼你使用的插入沒有列名,而不是簡單地使用這個查詢'「INSERT INTO store(image_name_column_name ,another_column_name)VALUES('$ image_name','$ image')「''//將列名替換爲真正的名字' –

+0

我明白了,Alien先生,您先生是魔術師,讓我成爲您的學徒。但是,你是如何學習所有這些知識的呢? (你是否只是閱讀所有的文件?)教導我部隊的方式。 – user2512888