2014-10-07 37 views
0

親愛的朋友們,我無法弄清楚我的代碼有什麼問題,請好好看一下。 當我發佈頁面時,它不會上傳文件,甚至$ _FILES [「file」] [「name」]爲空。php MySQLi文件上傳

由於我使用包含一次的技術,添加類別文件被稱爲模塊,因此表單action ='index.php?addcategory'只是再次調用同一個文件。

// FILE UPLOAD 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$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"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) { 
    if ($_FILES["file"]["error"] > 0) { 
    echo "Return Code: " . $_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 "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 
    if (file_exists("upload/" . $_FILES["file"]["name"])) { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } else { 
    move_uploaded_file($_FILES["file"]["tmp_name"], 
    "upload/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "img/" . $_FILES["file"]["name"]; 
} 
    } 
} else { 
    echo "Invalid file"; 
} 

// FILE UPLOAD 

$displayname = mysqli_real_escape_string($con, $_GET['displayname']); 
$categoryname = mysqli_real_escape_string($con, $_GET['categoryname']); 
$meta = mysqli_real_escape_string($con, $_GET['meta']); 
//$file = mysqli_real_escape_string($con, $_GET['file']); 
$file = $_FILES["file"]["name"]; 

if ($displayname == null || $categoryname == null || $file == null) 
{ 
$msg = '<div class="msg error"><span>ERROR:</span> Please fill in all required fields!</div>'; 

} else { 
$insert_row = $con->query("INSERT INTO category (displayname, categoryname, meta, icon) 
VALUES($displayname, $categoryname, $meta, $file)"); 

$sql="INSERT INTO category (displayname, categoryname, meta, icon) 
VALUES ('$displayname', '$categoryname', '$meta', '$file')"; 



if (!mysqli_query($con,$sql)) { 
    $msg ='<div class="msg error"><span>ERROR:</span> Category Added Failed</div>'; 

} else { 


$msg ='<div class="msg success">Category Added Success</div>'; 

}}} 
echo $msg; 
?> 



<form action='index.php?addcategory' enctype="multipart/form-data" method=」post」> 
<input name="addcategory" type="hidden" value="addcategory"> 
<div class="formbox"><label>Category Display Name</label> 
<input name="displayname" type="text"></div> 
<div class="formbox"><label>Short Name</label> 
<input name="categoryname" type="text"></div> 
<div class="formbox formbox_full"><label>Meta Description</label> 
<textarea name="meta"></textarea></div> 
<div class="formbox"><label>Category Name</label> 
<input name="file" id="file" type="file"></div> 
<div class="formbox formbox_full"><input type="submit" value="Add Category" /></div> 
</form> 
+0

你在'method =「post」'中有聰明/誇張的引號,這就是原因。用'method ='post'替換' – 2014-10-07 02:36:57

+0

if method =「post」然後它根本不發佈,URL也沒有顯示變量 – user1231648 2014-10-07 02:40:52

+0

你有2個INSERT查詢,我很困惑。刪除第一個。另外,你爲什麼使用GET? – 2014-10-07 02:44:52

回答

2

您的智能/捲曲報價爲method=」post」,這是問題的一部分。

method="post"

你還需要使用你的周圍值的變量報價

VALUES ('$displayname', '$categoryname', '$meta', '$file') 

也有2個查詢INSERT更換。刪除第一個:

$insert_row = $con->query("INSERT INTO category ... 

我不知道你爲什麼那麼用第二個。

使用POST表單方法時,您也使用$_GET;使用$_POST,你必須$_GET,然後修改窗體的行動action=''因爲你執行的一切在同一頁內,並命名您的提交按鈕name="submit" -
<input type="submit" name="submit" value="Add Category" />而包裝一個條件語句中整個PHP/SQL,如:

if(isset($_POST['submit'])){ 

    // PHP/SQL 

} 

您還有3x }}}第3個似乎是額外的,刪除它。

在這兒

}}} <= 
echo $msg; 

將其更改爲

}} 
echo $msg; 

,如果你沒有你的第一行代碼高於一切。


編輯:(上傳文件夾)

我還注意到,文件夾的名稱不同,uploadimg

if (file_exists("upload/" . $_FILES["file"]["name"])) { 
    echo $_FILES["file"]["name"] . " already exists. "; 
} else { 
move_uploaded_file($_FILES["file"]["tmp_name"], 
"upload/" . $_FILES["file"]["name"]); 
echo "Stored in: " . "img/" . $_FILES["file"]["name"]; 

如果目標文件夾是upload,然後更改imgupload

如果預期文件夾是img,則將所有upload更改爲img

確保您正在從服務器的根目錄運行表單和PHP/SQL。如果沒有,那麼你可能需要重新調整upload/../upload/../../upload/例如
../img/ < =如果是文件夾的上傳名稱,並根據你需要多少分層次下井,同時確保該文件夾具有適當的寫入權限設置。

+0

'$ displayname = mysqli_real_escape_string($ con,$ _GET ['displayname']); $ categoryname = mysqli_real_escape_string($ con,$ _GET ['categoryname']);'是他正確使用POST的形式。 – 2014-10-07 02:42:26

+0

其現在的工作,顯示上傳:sample1.jpg 類型:image/JPEG 尺寸:16.6337890625 KB 臨時文件:C:\ WINDOWS \ TEMP \ phpC3BC.tmp 在存儲:IMG/sample1.jpg ---- ---- 但是如何上傳這個文件? – user1231648 2014-10-07 02:58:38

+0

@ user1231648你有'存儲在:img/sample1.jpg'還有'if(file_exists(「upload /」'和'move_uploaded_file($ _ FILES [「file」] [「tmp_name」], 「upload /」)。 $ _FILES [ 「文件」] [ 「名稱」]); 回聲「存儲於:」。 「img /」。 $ _FILES [「file」] [「name」];'將'upload'更改爲'img',除非預期的文件夾實際上是'upload'? – 2014-10-07 03:00:40

0

這是當我看到你的代碼是什麼來到我的腦海:

  1. 請增收標籤形式

  2. 請用var_dump($ _ POST);查看您的數據是否正在成功發送。

  3. 如果點數2返回「Null」,請檢查並重新編寫表單的屬性。複製&由於編碼不同,複製粘貼表單屬性有時會導致非工作表單。

希望那些幫助。

+0

如何使用var_dump($ _ POST)檢查 – user1231648 2014-10-07 02:47:58

+0

@ user1231648你能夠在fred建議之後上傳任何內容? – 2014-10-07 02:49:56

+0

只需鍵入「var_dump($ _ POST);」。它會在該頁面返回你的$ _POST變量的「原始」版本。 – yogipriyo 2014-10-07 04:31:30