2014-02-06 79 views
0

我正在使用第一個文件上傳的示例代碼。輸入數據後顯示錯誤。像文件上傳時的PHP錯誤

連接successfullyUpload:bottom.png 類型:image/PNG 尺寸:5.7373046875 KB 貯存於:C:\ XAMPP \ TMP \ phpD383.tmp 說明:未定義指數:文件在C:\ XAMPP \ htdocs中\ Deen_php \ sample.php 53行 無法輸入數據:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的在線使用近「)」正確的語法手冊1

PHP

<?php 
if(isset($_POST['insert'])) 
{ 
$dbhost = 'localhost:3306'; 
$dbuser = 'root'; 
$dbpass = 'root'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
echo 'Connected successfully'; 


$allowedExts = array("gif", "jpeg", "jpg", "png","txt"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/x-png") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/txt")) 
&& ($_FILES["file"]["size"] < 50000) 
&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Stored in: " . $_FILES["file"]["tmp_name"]; 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 

$num = $_POST['num']; 
$name = $_POST['name']; 
$age = $_POST['age']; 
$file = $_POST['file']; 



$sql = "INSERT INTO sample ". 
     "(num,name,age,file1) ". 
     "VALUES('$num','$name',$age, $file)"; 

mysql_select_db('test_db'); 

$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not enter data: ' . mysql_error()); 
} 

echo "Entered data successfully\n"; 
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "C:/" . $_FILES["fileToUpload"]["name"]); 

mysql_close($conn); 

} 
?> 

HTML

<form action="<?php $_PHP_SELF ?>" method="POST" enctype="multipart/form-data"> 
    Num: <input type="text" name="num" /> 
    Name: <input type="text" name="name" /> 
    Age: <input type="text" name="age" /> 
    File Upload<input name="file" type="file" /><br /> 
    <input type="submit" id="insert" name="insert" value="Submit" /> 
</form> 

回答

2

您不能訪問類型的輸入file通過$ _POST,它通過$ _FILES訪問,就像你的代碼一樣。

如果你想保存的文件名,你可以做

$file = $_FILES["file"]["tmp_name"]; 

此外,如果你正在傳遞一個字符串,然後分貝它們括在引號像你在查詢中已經做了$name$num

注意:請注意,mysql_ *函數已被棄用。所以嘗試使用mysqli或PDO

0

我認爲問題是你的sql語法。改成這樣:

$sql = "INSERT INTO sample (num,name,age,file1) VALUES('$num','$name', '$age', '$file')"; 
+0

謝謝。我已經解決了這個問題。但我有另一個。文件名與數據庫中存儲的不同。我想將文件存儲到我的本地文件夾,因爲它是相同的類型,如txt,jpg等move_uploaded_file($ _ FILES [「file」] [「tmp_name」],「C:/ anonymous」。$ _ FILES [「file」 ][「名稱」]);這是正確的 – Mohaideen

+0

C:/ anonymous /".$_ FILES [「file」] [「name」]); – user3106988

0

變化fileToUploadfile

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "C:/" . $_FILES["fileToUpload"]["name"]); 

move_uploaded_file($_FILES["file"]["tmp_name"], "C:/" . $_FILES["file"]["name"]); 

=============== ============================

也改變sql格式。

$sql = "INSERT INTO sample (num,name,age,file1) VALUES('$num','$name', '$age', '$file')"; 

=========================================== =================

而且更改文件名

$file = $_POST['file']; 

$file = $_FILES["file"]["name"] 

========== ================================================== =====

通過在項目文件夾中創建上傳目錄來更改存儲路徑。

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
+0

謝謝,我已經解決了pblm,但我有另外一個文件名存儲在不同的數據庫。想要將文件存儲到我的本地文件夾,因爲它是相同的類型,如txt,jpg等move_uploaded_file($ _ FILES [「file」] [「tmp_name」],「C:/ anonymous」。$ _ FILES [「file」] [ 「name」]);是否正確 – Mohaideen

+0

我認爲直接在C盤上存儲並不好,在你的項目目錄和故事圖像中創建一個文件夾 move_uploaded_file($ _ FILES [「file」] [「tmp_name」] ,「upload /」。$ _FILES [「file」] [「name」]); 並將$ file = $ file = $ _POST ['file'];更改爲$ _FILES [「file」] [「name」]] –

+0

答案已更新。請重新提交 –

0

你想要什麼?

如果要存儲文件內容,應該使用file_get_contents而不是move_uploaded_file。要獲得臨時名稱,請使用$_FILES["file"]["tmp_name"]。直接從這個文件中讀取。

如果你想永久保存保存文件並保存此文件路徑,使用move_uploaded_file用我們自己的名字(沒必要$_FILES["file"]["name"])和保存路徑(或路徑的有意義的部分),你傳遞給move_uploaded_file。反正也沒有設置 $_POST['file']

你忘記了MySQL查詢中的引號。

另外,你寫了$_FILES["fileToUpload"]["tmp_name"](其他數組鍵)。

對於內容類型(MIME)也使用數組。

文件擴展名你應該可以使用$ext = pathinfo($filename, PATHINFO_EXTENSION);

只有使用正確且不被棄用的方式才能使用MySQL,它是具有準備語句的PDO。您的代碼允許SQL注入。此外,之後向您推薦框架。

+0

文件名成功存儲在數據庫中。但該文件沒有存儲在本地。我想存儲文件本地文件夾。我給了這樣的,我已經在我的項目中創建了文件夾。但它不起作用... move_uploaded_file($ _ FILES [「file」] [「name」],「files /".$_ FILES [」file「] [」name「]); – Mohaideen

+0

@Mohaideen您可以將文件從'tmp_name'鍵存儲的臨時位置上傳到您想要的任何自定義位置和名稱。 '$ _FILES [「file」] [「name」]'就是該文件在客戶機上的名稱,它只是作爲附加信息給出的。另外,請檢查您要保存文件的目錄是否存在,並且可以通過PHP訪問。首先,嘗試將文件保存在腳本旁邊('__DIR__'.DIRECTORY_SEPARATOR。$ _ FILES [「file」] [「name」]')。您還應該打開完整的錯誤報告。 –