下面的解决方案是我已经煮熟以检查$ _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');
}
}
Run Code Online (Sandbox Code Playgroud)
if (!isset($_GET['id'])) {
$errors[] = 'Empty user id';
} else if (!ctype_digit($_GET['id'])) {
$errors[] = 'Invalid id';
} else {
$num_user_id = (int)$_GET['id'];
}
Run Code Online (Sandbox Code Playgroud)
这涵盖了所有可能性:未设置而非数字.
也就是说,如果你需要区分你的错误消息未设置和不是数字.否则filter_input你应该看一下.
可以说你应该对特定的无效性更加放松; 无效的ID是无效的ID,它无关紧要,为什么它无效.id可能无效的原因多于为什么有效.单独关注所有这些原因并不值得付出努力.
我假设您从具有此ID的数据库中获取用户记录; 你的错误控制应该更多遵循这个逻辑:
$_GET['id']没有设置:
在这方面,filter_input是完美的:
if (!$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)) {
header("HTTP/1.0 400 Bad Request");
exit;
}
if (!$user = get_user_record($id)) {
header('HTTP/1.0 404 Not Found');
exit;
}
echo $user;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3241 次 |
| 最近记录: |