2013-03-01 77 views
0

如果可能被隨意地運行爲get()一個post(),使$id = $_POST['id']可能得到一個空值的查詢,任何這些的良好實踐方法來測試的可能發佈變量的存在。這是測試發佈變量存在的正確方法嗎?

if (!empty($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}

if (isset($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;}

$id = isset($_POST['id']) ? $_POST['id'] : FALSE;

或者是有一些其他優選的方法?他們都做了兩次$_REQUEST(),這讓我覺得可能有更好的辦法。

謝謝!

+0

使用'array_key_exists($ _ POST, '變量')'。 – meagar 2013-03-01 19:17:43

+0

其中任何一個都很好,最後一個(三元)是最好的。 – 2013-03-01 19:17:51

+0

'isset($ _ POST)'或'isset($ _ GET)'檢查所採用的方法 – 2013-03-01 19:19:01

回答

1

我會去的:

$id = isset($_POST['id']) && strlen($_POST['id']) > 0 ? (int)$_POST['id'] : FALSE; 

首先,它checkes如果VAR設置,然後檢查長度大於0

在我看來,這是最好的可讀性,如你不需要5行代碼,如果你正確地縮進它,是什麼使得它更難閱讀,讓您的文件不再:

if (isset($_POST['id'])){ 
    $id = $_POST['id']; 
}else{ 
    $id = FALSE; 
} 

如果您使用$ _ POST一個簡單的事,作爲一個ID,只需將其轉換爲一個int(int)$ _ POST ['id']。這樣你肯定有一個號碼。

+0

不錯的解決方案。謝謝,約翰。 – 1252748 2013-03-01 19:56:27

0

雖然都可以使用,你的第一個選項是檢查的最佳方式:

if (!empty($_POST['id'])){ $id = $_POST['id'];}else{$id = FALSE;} 

以下因素都考慮在內empty()

  • 「」(空字符串)
  • 0(0作爲整數)
  • 0.0(0作爲浮點數)
  • 「0」(0作爲字符串)
  • NULL
  • FALSE
  • 陣列()(空數組)
  • $變種; (變量聲明,但沒有值)

isset()只檢查它是否爲空。

+0

aha,是的,但'id'可以是'0'。所以我想我會用'isset()'去。謝謝! – 1252748 2013-03-01 19:20:45

+0

你應該在問題中提到這個問題!那麼'isset()'會是理想的。 – SeanWM 2013-03-01 19:25:43

0
function getByKey($arr, $key, $default = false) { 
    return isset($arr[$key]) ? $arr[$key] : $default; 
} 

$id = getByKey($_POST, 'id'); 

另一種方式是像

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, array(
     'options' => array(
      'min_range' => 1, 
      'max_range' => 255, 
      'default' => 1, 
     ) 
    )); 
1

我會用

if (isset($_POST['id']) && strlen($_POST['id'])) $id = (int)$_POST['id']; 

測試

  • 如果值設置(以不觸發通知) ,和
  • 如果它是一個空字符串''

empty()的問題是,它把0和0.0爲空的,這可能是有問題的值有時是0。

問題與單獨isset()是它把''(空字符串)的設置,所以如果有人碰巧提交表單沒有填寫某一特定領域,isset()會讓它通過返回TRUE傳遞。 strlen()用於檢查非零長度的值是否真的存在。

+0

這似乎很全面。 strlen($ _ POST ['id']))''''id =(int)$ _ POST ['id'];''是否意味着分號?謝謝 – 1252748 2013-03-01 19:55:16

+0

@thomas不,沒有。這是一條簡單的'if'語句。 – Antony 2013-03-01 19:56:10

+0

哦對。很抱歉誤讀了。謝謝! – 1252748 2013-03-01 19:57:16

0

如果查詢可能被隨意地運行作爲GET()或後()

如果什麼它是貼有一個查詢字符串(這樣既$_GET$_POST包含id)?

POST /yourscript.php?id=4 
Host: yoursite.com 

id=3 

您必須選擇要使用的id(這完全取決於你)。

作爲替代別人所提出的建議,你可以使用PHP的內置filter functions

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); 
相關問題