2011-12-21 41 views
-3

以下是我的代碼,用於上傳圖像並使用各自的圖像名稱更新數據庫。在MySQL數據庫中PHP文件上傳和更新相同

上傳工作正常,但在語法上有一些問題來更新mysql數據庫。

function storeimage() 
{ 
    $files = array(); 

    $target_path1 = $_FILES['file1']['tmp_name']; 
    $target_path2 = $_FILES['file2']['tmp_name']; 
    $target_path3 = $_FILES['file3']['tmp_name']; 

    $files = array(1=>'file1',2=>'file2',3=>'file3'); 
    //uploadimages($files)  
    //$target_path = "images/"; 

    foreach($files as $data) 
    { 
     $target_path = $_FILES[$data]['name']; 
     if(move_uploaded_file($_FILES[$data]['tmp_name'], "images/".$target_path)) 
     { 
      $publish = $_POST['publish']; 
      $databaseupdate = "INSERT INTO `uploadfiles`.`uploads` 
       (`id`, `name1`, `name2`, `name3`, `publish`) 
       VALUES (NULL, '$files['file1']','$files['file2']','$files['file3']','$publish')"; 
      $mysqlupdate = mysql_query($databaseupdate); 
      echo "The file ". basename($_FILES[$data]['name']). 
       " has been uploaded<BR>"; 
     } 
     else 
     { 
      echo "There was an error uploading the file, please try again!"; 
     } 
     $target_path =""; 
    } 
} 
+0

請不要在全部大寫中寫出標題。 – 2011-12-21 20:48:18

+0

我不認爲內聯替換適用於數組。嘗試使用''「。$ files ['file1']。」''' – Corubba 2011-12-21 20:50:19

+1

什麼是「但在語法上有一些問題來更新mysql數據庫」?你是否得到了錯誤,他們是什麼?或者你只是不喜歡它,並希望其他人重寫? – Robert 2011-12-21 20:50:39

回答

0

這是您遇到問題的PHP語法,而不是SQL。

$sql = "INSERT INTO uploads 
     VALUES (NULL,'$files[file1]','$files[file2]','$files[file3]','$publish')"; 

會工作。

但是,這不僅是你的問題。
看來你插入了未知變量,並且不會爲查詢清理它們。 ,並且您試圖在一個查詢中插入所有三個並運行三次。 看起來您可能希望將查詢移至循環之外。

$names = array();  
foreach($_FILES as $file) 
{  
    if(move_uploaded_file($file['tmp_name'], "images/".$file['name'])) 
    { 
     $names[] = $file['name']; 
    } else { 
     $names[] = ''; 
    } 
} 
if (array_filter($names)) { // at least one file uploaded successfully 
    $publish = mysql_real_escape_string($_POST['publish']); 
    foreach ($names as $i => $name) { 
    $names[$i] = mysql_real_escape_string($name); 
    } 
    $sql = "INSERT INTO uploads VALUES (NULL,'$files[0]','$files[1]','$files[2]','$publish')"; 
    mysql_query($sql) or trigger_error(mysql_error().$sql);  
} 

像這樣

+0

是的,或者你可以這樣做:'{$ files ['file1']}' - 如果你想插入一個數組項的值爲一個字符串 – rroche 2011-12-21 20:55:23

+1

你可以不使用引號索引數組嗎?我建議''VALUES(NULL,'{$ files ['file1']},{$ files ['file2']},...)「'代替。 – 2011-12-21 20:55:26

+0

@火箭它是每個變量4個附加符號。似乎對我來說太過於矯枉過正。哦,是的,你可以,在雙引號字符串中。 – 2011-12-21 20:59:11

0

首先,你爲什麼要使用$files['file1']等,要儘量獲取文件名?你不應該使用$_FILES[$data]['name']?或者$_FILES['file1']['name'], $_FILES['file2']['name']等。

此外,還有一些SQL引用問題。什麼是這樣的:

$databaseupdate = "INSERT INTO `uploadfiles`.`uploads` 
    (`id`, `name1`, `name2`, `name3`, `publish`) 
    VALUES (NULL, '" . $_FILES['file1']['name'] . 
    "','" . $_FILES['file2']['name'] . 
    "','" . $_FILES['file3']['name'] ."','$publish')"; 

其次,你迭代「文件1」,「文件2」和「文件3」,但你似乎是試圖將它們全部插入到表中的一行。如果你有三個文件,並且你想把它們全部插入到數據庫中,你不應該爲每個文件插入一行嗎?在這種情況下,該表只需要一個「名稱」列。

+0

這看起來非常適合評論。改進答案或刪除答案,並在OP上張貼相同的通知/評論作爲評論。 – 2011-12-21 21:16:21

+0

我無法在問題中添加評論。 – kclair 2011-12-21 21:17:29

+1

這看起來非常適合回答我的問題。歡迎來到Stackoverflow。不要讓這個社區的混蛋把你打倒,否則他們會。 – phpmeh 2011-12-21 21:23:45