2013-01-23 76 views
-3

我看了很多關於這個相同問題的其他帖子,但我仍然無法找到我的代碼出了什麼問題。請注意,本週我開始學習PHP和SQL,所以請原諒我犯了一個愚蠢的錯誤。另外,我確定值得注意的是,在標題中發佈的錯誤消息出現之前,還有另一個錯誤(在我的代碼中定義)。這錯誤是:你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行附近使用正確的語法(...)

" already exists."

這告訴我,$_POST["file"]["name"]變量未設置無論出於何種原因。任何幫助表示讚賞。但是,如果您要告訴我我的代碼容易受到SQL注入的攻擊,我知道這一點。上傳腳本只能通過我的(安全)登錄腳本訪問。再次歡迎所有幫助!

<?php 
    /* Process uploaded file */ 

if ($_FILES["file"]["size"] < 2097152) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
     if (file_exists($_POST["class"] . "/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists."; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     $_POST["class"] . "/" . $_FILES["file"]["name"]); 
     $newpath = mysql_real_escape_string("uploads/" . $_POST['class'] . "/" . $_FILES['file']['name']); 
     $filename = mysql_real_escape_string($_FILES['file']['name']); 
     $description = mysql_real_escape_string($_POST["description"]); 
     echo "Stored in: " . $newpath; 
     } 
    } 
    } 
else 
    { 
    echo "File must be less than two megabytes."; 
    } 

    /* Create and store information in MySQL Database */ 

    $con = mysql_connect("localhost","user","password"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("1169030_dsp", $con); 

$sql="INSERT INTO $_POST[class] (Description, Filename, File) 
VALUES 
    ('$description','$filename','$newpath')"; 


if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "Your file was successfully uploaded."; 

mysql_close($con); 
?> 

這裏是我的輸入形式的HTML:

<center> 
    <form action="uploadfile.php" method="post" style="background-color:#009933;color:#FFFFFF;width:320px;text-align:left;"> 
    Description: <input type="text" name="description"><br> 
    File:  <input type="file" name="file"><br> 
     Class:<br> 
    <Select name="Class"> 
    <option value="period1">APES : period1</option> 
    <option value="period2">Chemistry I : period2</option> 
    <option value="period3">Lab Assist/Sci : period 3</option> 
    <option value="period4">Lab Assist/Sci : period 4</option> 
    <option value="period4">APES : period 4</option> 
    <option value="period5">APES : period 5</option> 
    <option value="period6">Lab Assist/Sci : period 6</option> 
    <option value="period7">Chemistry I : period 7</option> 
    </Select><br> 
     <input type="submit" name="Upload"> 
</form> 
    <center> 
+4

如果你剛剛開始使用PHP,那麼你應該完全避免使用'mysql_ *'函數。他們將被刪除,所以你應該調查其中一個[替代MySQL庫](http://php.net/manual/en/mysqlinfo.api.choosing.php),而不是... –

+1

print $ sql in錯誤。它會幫助你調試。 –

+1

爲便於將來參考,請在將代碼發佈到Internet上之前從代碼中刪除數據庫登錄憑據。我必須在這裏做一些巫術才能將它們移除。 – NullUserException

回答

0

你的問題是日在您的表單中沒有設置enctype屬性。它應該是:

<form action="uploadfile.php" method="post" enctype="multipart/form-data" style="background-color:#009933;color:#FFFFFF;width:320px;text-align:left;"> 

enctype="multipart/form-data"需要被填充$_FILES

+0

工作!你修正了我得到的錯誤,但現在我正在拋出8個新錯誤。我會研究它們並嘗試解決它們。如果我需要更多幫助,我會回來的。謝謝! –

0

您的變量$_POST[class]是錯誤的,它應該是$_POST['class']

試試這個

$sql="INSERT INTO $_POST['class'] (Description, Filename, File) 
     VALUES 
     ('".$description."','".$filename."','".$newpath."')"; 
+0

現在當我嘗試,goodmood我得到這個錯誤:'解析錯誤:語法錯誤,意想不到的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING在/srv/disk11/1169030/www/thelandofscience.co.nf/uploadfile.php在線41 ' –

+0

$ _ POST [階級]將承擔類的恆定值,但它可能只是拋出一個錯誤,並接受它作爲$ _ POST [「類」]進不去。這裏更大的問題是,您只是將post變量拋入您的查詢中而不進行消毒。僅供參考,引用數組鍵以避免錯誤通常是很好的形式。 –

相關問題