2009-06-09 69 views
3

我知道您可以同時使用$_GET$_POST,但是這是必需的「功能」嗎?我寫了一個框架,在這裏你可以訪問輸入:

$value = $this->input->get('name',''); 
$value = $this->input->post('name',''); 
$value = $this->input->cookies('name',''); 

我只是想在這裏,有必要在同一時間有GET和POST?我不能這樣做:

$value = $this->input('name','default value if not set'); 

要根據哪個HTTP請求獲取GET/POST數據? Cookies將只能通過->cookies()訪問,但是我應該使用->get()->post()而不是像->input()那樣做嗎?

感謝您的輸入!

+0

讓我重新解釋這個問題。 我不問$ _REQUEST什麼。我打算做一個方法 - > input(),它根據HTTP請求類型(POST或GET)返回相應的$ _GET或$ _POST值。那麼,這是一個壞主意嗎?如果用戶提交POST和GET,我只使用POST。 – Tower 2009-06-09 15:38:02

回答

3

是的!
我想你必須允許同時訪問$_GET$_POST。我不認爲你可以將它們合併在一起。 (你可以有,像PHP和生病concieved $_REQUEST的選項。)你可以得到一個要求如:

POST /validator?type=strict HTTP/1.1 

type=html/text 
body=<h1>Hello World</h1> 

注意變量名type使用了兩次,但在不同的範圍! (一旦在URI定義應該處理的POST資源,然後在貼實體本身)在PHP中,這看起來像:

$_GET => ('type' => 'strict') 
$_POST => ('type' => 'html/text', 'body' => '<H1>Hellow World</h1>') 

PHP:S的只是解析URI,並把這些參數有辦法到$_GET有點混淆。一個URI與大多數(所有?)的HTTP方法一起使用,比如POST,GET,PUT,DELETE等(不僅僅是GET,就像PHP一樣,你會相信)。也許你可能是革命性的並且使用一些你自己的術語:

$a = $this->uri('name');//param passed in the URI (same as PHP:s $_GET) 
$b = $this->entity('body');//var passed in an entity (same as PHP:s $_POST) 
$c = $this->method(); //The HTTP method in question ('GET', 'POST' etc.) 

而且甚至一些實用功能:

if($this->isGET()){ 
    ... 
}elseif($this->isPOST()){ 
    ... 
) 

我知道,野生和瘋狂的:)
祝你好運,玩得開心!
乾杯!

0

一般認爲使用$_GET$_POST而不是$_REQUEST更好,因爲它沒有花費太多成本,它關閉了網站的一些小操作。我會在您的框架中至少提供具體的源檢索。

4

是的,但您可能希望確保在使用此代碼時,如果要因請求而更改任何內容,請檢查請求方法是否爲POST,而不是將GET和POST視爲同一事物。

這是因爲一般GET請求不應該有任何副作用,他們應該做的就是'得到'東西。

編輯 這似乎不太相關的,因爲你已經澄清你的問題,但我會離開這裏反正

1

櫃面用戶從特定變種要輸入你可以只使用輸入法,但與標誌:

$this->input('abc', ''); 
$this->input('abc', '', self::I_POST); 
$this->input('abc', '', self::I_GET); 
$this->input('abc', '', self::I_COOKIE); 
5

這是可以想象的是,在一個REST架構我想添加一個產品像這樣:

POST /products?location=Ottawa HTTP/1.0 

name=Book 

產品將自動與查詢參數中的位置關聯。

簡而言之:允許兩者都有語義上有效的原因,但它們總是可以轉換成一個或另一個。話雖如此,你是否想要強制用戶使用這種用法?

0

我建議讓他們分開,因爲他們是用於不同的目的。 GET通常用於顯示目的,而POST用於管理目的,添加/編輯項目,確認選項等。

可能還有一個輕微的安全問題:有人可能喜歡使用GET參數的頁面並強制執行類似刪除數據的事情 - 例如example.com/index.php?deleteid=123(實際上,這可以通過POST從外部HTML表單完成,但不太常見,任何人都可以在論壇,博客,任何地方張貼鏈接。)

0

我建議保留POST和GET變量,因爲你無法預測他們將如何使用。

在填充對象之前,最重要的是確保在$ _ [POST | GET]中針對安全漏洞進行驗證,如XSS,Sql注入。

0

我會說它高度取決於情況。如果你只是想接受一些會改變你如何顯示一個HTML頁面的參數(一個典型的GET變量),那麼接受這兩個參數可能是可以的。

如果您要使用表單,更改數據和限制訪問;您應該查看CSRF的域以及此安全問題可能會如何影響您。

一般來說,如果您可以明確地瞭解這兩者之一,那麼這樣做是明智的。