2011-06-23 67 views
0

好吧,PHP服務器和SQL圖片上傳

我已經建立了一個插入圖像頁面(uploader.php)上一前一後的與關於設置一個PHP圖片上傳後,但我有幾個問題......

的代碼是:

<?php 

$target = "images/test/"; 
$target = $target . basename($_FILES['photo']['name']); 

$title=$_POST['title']; 
$desc=$_POST['desc']; 
$pic=($_FILES['photo']['name']); 

mysql_connect("dbhost", "dbuser", "dbpass") or die(mysql_error()) ; 
mysql_select_db("dbname") or die(mysql_error()) ; 
mysql_query("INSERT INTO `test` VALUES ('$title', '$desc', '$pic')") ; 

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) 
{ 

echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
} 
else { 
echo "Sorry, there was a problem uploading your file."; 
} 
?> 

<form enctype="multipart/form-data" action="uploader.php" method="POST"> 
Title: <input type="text" name="title"><br> 
Description: <input type="text" name = "desc"><br> 
Photo: <input type="file" name="photo"><br> 
<input type="submit" value="Add"> 
</form> 

所以第一個問題是,信息不被輸入到數據庫 - 表中有4個領域 - ID(INT),標題( varchar),desc(varchar)和photo(varchar)。是否因爲id字段沒有被指定?這只是表格的自動遞增主鍵。

第二個問題是,正在加載的圖像中包含空格 - 例如,在上傳"test image.jpg"時 - 我想加入str_replace()以創建"testimage.jpg"。你知道我將它插入代碼的位置嗎?再次

感謝您的幫助,

JD

回答

1

如果不明確地列出你的INSERT語句列,你必須包括所有的人都在VALUES(),所以是你需要包括id

更好雖然會列出列:

mysql_query("INSERT INTO `test` (title, `desc`, photo) VALUES ('$title', '$desc', '$pic')") ; 

注意desc在上面反引號。這是一個MySQL保留關鍵字,除非引用,否則在那裏是語法錯誤。

此外,請逃避您的值反對SQL注入!

$title = mysql_real_escape_string($_POST['title']); 
$desc = mysql_real_escape_string($_POST['desc']); 
$pic = (mysql_real_escape_string($_FILES['photo']['name'])); 

// And your space replacement 
$pic = str_replace(" ","", $pic); 

// Now that it's cleaned up, you can insert. 
mysql_query("INSERT INTO `test` (title, `desc`, photo) VALUES ('$title', '$desc', '$pic')") ; 
+0

HMM的 - 我更新4行的建議和包括在str_replace函數,但..... 圖像被上傳(但不除去spaces-在服務器上仍然測試image.jpg的),並在數據庫中插入一行 - 但除了ID之外 - 所有字段都是空白的....!?我的代碼與上述內容完全相同,只是這些更改除外 – JD2011

+0

您確定您的'$ _POST'值不是空的嗎?做一個'var_dump($ _ POST)'以確保這些值在那裏開始,並且在將它發送到'mysql_query()'之前回顯出你的SQL語句字符串' –

+0

好吧,現在它已經工作 - 不知道我是什麼正在做 - 剛剛開始使用上面的代碼新鮮和圖像正確地放置在服務器上,細節正確地輸入到數據庫表中。 但是,由於某種原因,表中插入了兩行代碼 - 一個空白代碼和一個細節代碼 - 您是否清楚爲什麼會發生這種情況 - 如果有幫助,您可以通過上述線程發送完整的代碼。謝謝! – JD2011