2014-09-19 31 views
-2

我檢查使用此代碼驗證數字$_GET['id']

$id = isset($_GET['id']) && !empty($_GET['id']) && $_GET['id'] > 0 ? (int) $_GET['id'] : 0; 

if($id){ 

echo "True";} 

else{ 

echo "false"; 

} 

輸出:

ID   RESULT 
    1  => TRUE 
    "  => FALSE 
    <SCRIPT> => FALSE 
    1.5  => TRUE 

當ID = 1.5結果TRUE !!

如何防止這個和安全的ID爲唯一有效的數字?

+2

'filter_var($ var,FILTER_VALIDATE_INT)' – 2014-09-19 06:58:26

+0

你也可以使用'is_int' – Sal00m 2014-09-19 07:01:33

回答

1

使用filter_var功能:

var_dump(filter_var(1, FILTER_VALIDATE_INT));  // int(1) 
var_dump(filter_var('1', FILTER_VALIDATE_INT)); // int(1) 
var_dump(filter_var(1.5, FILTER_VALIDATE_INT)); // bool(false) 
var_dump(filter_var('1.5', FILTER_VALIDATE_INT)); // bool(false) 
var_dump(filter_var('<script></script>', FILTER_VALIDATE_INT)); // bool(false) 

如果你想只有數字GT則0,用options說法:

$options = array('options' => array('min_range' => 1)); 
var_dump(filter_var(-100, FILTER_VALIDATE_INT, $options)); // bool(false) 
var_dump(filter_var(0, FILTER_VALIDATE_INT, $options));  // bool(false) 
+0

確定這個工作。如果這是一個功能不是更好? – user27133 2014-09-19 07:16:52

-1

我更喜歡使用ctype_digit(僅適用於字符串,可以使用$ _GET)。

<?php 
$id = $_GET['id']; 
if (ctype_digit($id)) { 
    echo 'ok'; 
} else { 
    echo 'nok'; 
} 
?> 

,或者你可以試試這個:

$expr = '/^[1-9][0-9]*$/'; 
if (preg_match($expr, $id) && filter_var($id, FILTER_VALIDATE_INT)) { 
echo 'ok'; 
} else { 
echo 'nok'; 
}