2011-09-28 79 views
0

我有一個上傳腳本,這導致我一些問題,我不能爲我的生活弄清楚爲什麼。以下是PHP代碼:PHP上傳錯誤

mysql_connect('localhost', 'root', ''); 
mysql_select_db('uploads'); 

if (isset($_FILES["file"]["type"]) && isset($_FILES["file"]["size"])) { 
if (($_FILES["file"]["type"] == "image/png")) { 
    if ($_FILES["file"]["size"] < 500120) { 
     if ($_FILES["file"]["error"] > 0) { 
      echo $_FILES["file"]["error"]; 
     } else {       
      if (file_exists("uploads/" . $_FILES["file"]["name"])) { 
       echo $_FILES["file"]["name"] . " already exists. "; 
      } else { 
       move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]); 
       $name = $_FILES["file"]["name"]; 
       mysql_query("INSERT INTO uploads (name) VALUES ('$name')");     
       if (isset($_POST['title']) && isset($_POST['desc'])) { 
        $title = $_POST['title']; 
        $desc = $_POST['desc']; 
        mysql_query("INSERT INTO uploads (title, desc) VALUES ('$title', '$desc')"); 
        echo $title; 
        echo $desc; 
       }     
      } 
     } 
    } else { 
     echo "File is too big"; 
    } 
} else { 
    echo "Wrong file type"; 
} 
} 

我知道,我的文件路徑和形成的輸入是正確的,如果我呼應$title$desc變量,他們用正確的值返回。我的問題是:由於某種原因,它不會將$title$desc值輸入到數據庫中。第一個mysql查詢工作正常,但不是第二個。任何想法爲什麼?

+0

當然你想聯想標題,desc與名稱? – 2011-09-28 19:07:24

+0

如果在第二個查詢後添加'echo mysql_error()',輸出是什麼? –

+0

是的,現在有點搞砸了,但$ name是實際的文件名,$ title是用戶定義的圖像名稱,$ desc是用戶定義的描述。 – codedude

回答

2

這很可能是因爲descMySQL reserved keyword,它必須包含在查詢語句中的反引號中。始終檢查mysql_error()以查找失敗查詢的原因。

$success = mysql_query("INSERT INTO uploads (title, `desc`) VALUES ('$title', '$desc')"); 
if (!$success) echo mysql_error(); 

還請逃脫$title$desc插入之前,因爲它們直接從$_POST到來。

$title = mysql_real_escape_string($_POST['title']); 
$desc = mysql_real_escape_string($_POST['desc']); 

做同樣在較早的查詢$name

$name = mysql_real_escape_string($_FILES["file"]["name"]); 
+0

這會影響$ title變量嗎? – codedude

+0

@codedude不會影響'title',因爲那不是MySQL保留字。看到我剛剛鏈接到答案的列表。 –

0

你正在創建2條記錄的上傳表中,1個文件。可能名稱列設置爲非空,並且這會導致第二個查詢不起作用。 它必須是:

$name = mysql_escape_string($_FILES["file"]["name"]); 
$title = isset($_POST['title'])?mysql_escape_string($_POST['title']) : ''; 

$desc = isset($_POST['desc'])?mysql_escape_string($_POST['title']) : ''; 

mysql_query("INSERT INTO uploads (`name`, `title`, `desc`) VALUES ('$name', $title, $desc)");