2016-02-13 97 views
1

我已經檢查過這段代碼幾次。

這裏的形式發送POST數據:

<form action="/loginwizard" method="post"> 
<input type="hidden" name="action" value="login"> 
Email: 
<br> 
<input type="text" name="email" id="email" size=100> 
<br> 
Password: 
<br> 
<input type="password" name="pword" id="pword" size=100> 
<br> 
<input type="submit" value="Login"> 
</form> 

我的PHP腳本使用:

print_r($_REQUEST); 

而這樣做的結果是:

Array() 

這是使用:

PHP:版本5.6.8,

系統:Windows NT XXX-PC 6.1構建7601(Windows 7家庭高級版Service Pack 1)i586的

阿帕奇:阿帕奇/ 2.4.12(Win32的)的OpenSSL/1.0 0.1升PHP/5.6.8

,如果它算個什麼,always_populate_raw_post_data設置爲0

+0

請從開始頁面顯示您的帖子,直到'print_r($ _ REQUEST)'。您的表單正常工作。 – fusion3k

+0

@ fusion3k - 表單是否正常工作?這是一個可疑的行動 - 除非OP有自定義URL,這可能實際上並不奏效。 –

+0

@cale_b當然,我指的是語法man。 – fusion3k

回答

0

根據您的comment/loginwizard是您的文件夾名稱。 Apache(默認安裝XAMPP)可以識別對文件夾的調用,例如在瀏覽器上調用http://localhost/loginwizard,作爲對DirectoryIndex腳本的調用。在你的情況下,index.php文件。所以,它等於http://localhost/loginwizar/index.php

在PHP中,這是不同的情況。在請求時,您應該真正查看腳本文件(以及正確的路徑)。例如,在你的情況下,提交表單。

0

我與@ Chyan22這裏同意

/loginwizard可以是 1)的文件夾名(以純PHP) 2)控制器的名稱(在MVC模型) 未明確地在問題中提到。

在這兩種情況下,表單動作都應該指向實際的目標。

因此,如果是的情況下 1)請包括文件名的完整路徑 2)如果不存在控制器命名,loginwizard創建它。然後加載相應的視圖。

1

關於這個的最奇怪的事情是如果我改變action =「/ loginwizard」到action =「/ loginwizard/index.php」這個表單很好用。我懷疑這是由於Xampp安裝中的某些原因造成的?

這是因爲DirectorySlash指令,默認設置爲On

它導致Apache發出一個外部重定向到帶有斜槓的URL - 並且該重定向後面是瀏覽器使用GET請求,因此您的POST數據將丟失。

打開該指令關閉可能帶來安全隱患,請參見手冊中的警告 - 但它不應該是必要的,只是擺在首位斜線點你的表單動作爲目錄:

<form action="/loginwizard/" method="post"> 
         ^

然後,請求將傳遞到該目錄的索引文件/腳本(通過DirectoryIndex指令),在這種情況下爲index.php,但沒有外部重定向,以便您的POST數據存在 - 在$_REQUEST$_POST 。如果您只希望此腳本通過POST請求接收到數據,那麼我建議使用後者,以便更具體。否則,GET和COOKIE數據可能會受到干擾,具體取決於PHP的request_order/variables_order配置設置值。