2013-03-16 126 views
-1

嗨,我目前正在爲我的學位項目開發一個快速原型。我有一個以前的表單,用戶可以從動態下拉列表中選擇一些選項,當這些選項保存到表格中時,下一頁是供用戶上傳文件的。這個文件然後被存儲到一個單獨的表中,其中一個外鍵引用另一個表。問題在於文件上傳頁面,我沒有包含代表外鍵的變量,因爲我想看看能否讓它首先工作。如果有人可以幫助它,將不勝感激。將上傳的文件存儲到MySql時遇到問題

我收到的錯誤或者是不被上傳文件中插入查詢的字段中輸入有效的列名或

如果我嘗試更改SQL我得到插入或更新不能的名字在參照完整性被破壞時在子表上完成。

我是厚厚的嗎?我現在堅持了幾個小時。

繼承人的PHP

if (isset($_POST['action']) and $_POST['action'] == 'upload') 
{ 

$uploadfile = $_FILES['upload']['tmp_name']; 
$uploadname = $_FILES['upload']['name']; 

if(is_uploaded_file($uploadname)) { 


$uploadtype = $_FILES['upload']['type']; 
$uploaddata = file_get_contents($uploadfile); 



// Prepare user-submitted values for safe database insert 

$uploadname = mysql_real_escape_string($uploadname); 
$uploadtype = mysql_real_escape_string($uploadtype); 
$uploaddata = mysql_real_escape_string($uploaddata); 

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES (".$uploadname.",".$uploadtype.",".$uploaddata.")"; 
$exesql=mysql_query($sql) OR die(mysql_error()); 
} 
else { 
echo 'Error: File could not be uploaded.'; 
} 
} 
include("file.html.php"); 

這裏是file.html.php

<form action="" method="post" enctype="multipart/form-data"> 
     <div> 
      <label for="upload">Upload File: 
      <input type="file" id="upload" name="upload"/></label> 
     </div> 
     <div> 
      <input type="hidden" name="action" value="upload"/> 
      <input type="submit" value="Upload"/> 
     </div> 
    </form> 

這裏是product_logs表

Field  Type   Null Key  Default   Extra 
logID  int(5)   NO PRI   NULL   auto_increment 
dateCreated date   NO    NULL  
malResultID int(6)   NO MUL   NULL  
mimeType varchar(50) NO    NULL  
fileData mediumblob  NO    NULL  
fileName varchar(255) NO    NULL 
+0

謝謝大家,我設法解決這個問題。 – 2013-03-16 15:29:30

回答

0

你應該改變你的SQL喜歡 -

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 

而且正如我們已經看到你的表名是product_logs

可以共享product_logs表的結構?以便我們更好地澄清你的問題。

謝謝

+0

字段\t類型\t空\t密鑰\t默認\t額外 LOGID \t INT(5)\t NO \t PRI \t NULL \t AUTO_INCREMENT dateCreated會\t日期\t NO \t \t NULL \t malResultID \t INT(6)\t NO \t MUL \t NULL \t mimeType \t varchar(50)\t NO \t \t NULL \t FILEDATA \t MEDIUMBLOB \t NO \t \t NULL \t 文件名\t VARCHAR(255)\t NO \t \t NULL – 2013-03-16 15:00:35

+0

所以,你必須在你的SQL語句也進入dateCreated會,malResultID因爲這些領域也是不爲空。另一個問題 - 是否將malResultID從其他表中引用爲外鍵? – 2013-03-16 15:06:19

+0

對不起,我重新編輯了我的原始帖子,結構是一個新手,所以如果我把它們設置爲null,這將允許我只是嘗試上傳,看看它的工作原理?非常感謝您的回覆 – 2013-03-16 15:11:28

0

你這裏忘了單引號的結構

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 

並停止使用mysql_*其棄用,請mysqlipdo

0

你忘了查詢圍繞你的價值觀報價:

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 
       ^--   ^^    ^^    ^

請注意,在一個數據庫中存儲文件很少是個好主意,並導致重大問題。

如果您允許大量上傳,請注意,您正在浪費大量內存,將上傳的文件的兩個副本保存在內存中。一個稍微不好的方法將是

$sql = "INSERT .... " . mysql_real_escape_string(file_get_contents(...)); 

至少保存一份文件的空間價值的副本。