[英]Filters vs $_POST (or $_GET)
您應該使用哪一個,檢查是否已單擊表單提交按鈕?
<input type="submit" name="action" value="Sign Up">
if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...
或者 if (isset(filter_input(INPUT_POST, 'action')) && filter_input(INPUT_POST, 'action') == "Sign Up")
注意:我使用$ _POST ['action] =='注冊',因為我使用'action'數組進行刪除和注銷,因為我的一些表單有兩個提交按鈕,所以我可以區分)。
假設你有<form method="post" ...>
,你應該使用$_POST
。 您可以檢查單個字段,例如:
if ( isset($_POST['action']) )
或任何領域:
if ( 0 < count($_POST) )
或檢查請求方法:
if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
或以上的組合:)
我不建議檢查提交按鈕的值,如果更改,您還需要修改代碼。 更不用說如果網站是多語言,你需要做什么。
實際上沒有回答這個問題。 但是我會給不同的提交按鈕指定不同的name
,因此它們不受按鈕上顯示的值的約束。 這反過來使得更改按鈕上的文本更不容易出錯。
例如name='signup'
或name='action[signup]'
。
並分別檢查isset($_POST['signup'])
或isset($_POST['action']['signup'])
。
我不確定,但我想我曾經遇到過這個問題:按Enter鍵可以發布表格,在這種情況下,沒有發布按鈕的值。 因此,我強烈反對使用三個不同的提交按鈕進行三種不同的操作。 相反,我會使用三種形式,並使用另一種方式來區分它們,比如在其中放置隱藏字段或發布到不同的URL(或在表單action
屬性中添加類似?action=signup
的內容)。
如果它只是想要非常具體的值時所需輸入的確切值,那么只需使用#1即可。
使用過濾器可以節省所需的代碼量。 而不是寫出檢查你所提供的IP地址所需的所有代碼,而不是私有范圍,你可以將代碼減少到這個......
$var = "192.168.2.1"; echo (int) filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE); // 0
有關其他過濾器類型和選項標志,請參見http://www.php.net/manual/en/filter.filters.validate.php 。 此外,您可以將值傳遞給回調函數以自定義過濾數據的方式。
您還可以使用更少的代碼更改/清理輸入。 見http://www.php.net/manual/en/filter.filters.sanitize.php
$var = "te)st@test.com"; echo filter_var($var, FILTER_SANITIZE_EMAIL); // "test@test.com"
雖然使用filter_x函數允許寫出更少的代碼,但我個人不知道它與實際詳細代碼處理相比它的表現如何,我個人也不知道過濾器和消毒劑究竟有多可靠。
只是檢查它是否在那里,你不需要filter_var
。 isset
本身就足以。
第一個是正確的:
if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...
因為在isset
使用函數會觸發解析錯誤。 只有變量可以與isset
和其他語言結構一起使用,例如empty
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.