下面的解决方案就是我所做的,以检查$ _GET中的变量是否为整数。这似乎有点令人费解,我相信必须有一个更简单的解决方案。错误数组用于显示用户消息。
// Create array to hold errors
$errors = array();
// Get ID from URL
$user_id = isset($_GET['id']) ? $_GET['id'] : '';
// Check for empty ID
if (empty($user_id)) {
array_push($errors, 'Empty user ID');
} else {
// Check if ID is numeric
if (!is_numeric($user_id)) {
array_push($errors, 'Invalid user ID');
} else {
// Get numerical value of string (int or float)
$num_user_id = $user_id + 0;
// Check that number is an int
if (!is_integer($num_user_id))
array_push($errors, 'Invalid user ID');
}
}
答案 0 :(得分:6)
while(IDontHaveAllTheDataThatIExpect && !timeout)
这涵盖了所有可能性:未设置而非数字。
如果您需要区分未设置和非数字之间的错误消息。否则filter_input
是你应该看的东西。
可以说你应该对特定的无效性更加放松;无效的ID是无效的ID,它无关紧要,为什么它无效。 id可能无效的原因多于为什么有效。单独关注所有这些原因并不值得付出努力。
我假设您从具有此ID的数据库中获取用户记录;你的错误控制应该更多遵循这个逻辑:
if (!isset($_GET['id'])) {
$errors[] = 'Empty user id';
} else if (!ctype_digit($_GET['id'])) {
$errors[] = 'Invalid id';
} else {
$num_user_id = (int)$_GET['id'];
}
:
在此范围内,$_GET['id']
是完美的:
filter_input
答案 1 :(得分:0)
您可以使用dplyr
转换传入的GET。然后,当此数字为(int)
时,它已经是有效数字。
greater than 0
答案 2 :(得分:-1)
使用这个简单的功能:
[SessionTimeOut]
public ActionResult Index()
{
return Index();
}
来源:http://php.net/manual/en/function.is-int.php
将此概念付诸实践:
<?php
function isInteger($input){
return(ctype_digit(strval($input)));
}
$user_id = isInteger($_GET['id']);
if($user_id) {
// its numeric
} else {
// it is not numeric
}
?>