簡體   English   中英

過濾器vs $ _POST(或$ _GET)

[英]Filters vs $_POST (or $_GET)

您應該使用哪一個,檢查是否已單擊表單提交按鈕?

<input type="submit" name="action" value="Sign Up">
  1. if (isset($_POST['action'] && $_POST['action'] == "Sign Up") ...或者
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM