Ric*_*ral 8 php variables validation get
目前,我有以下代码:
if(isset($_GET['mid']) && !empty($_GET['mid'])) {
$mid = $_GET['mid'];
if(is_numeric($mid) && $mid > 0) {
if(isset($_GET['op']) && !empty($_GET['op'])) {
$op = $_GET['op'];
if($op == 'info') {
}
if($op == 'cast') {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为if语句中的if语句太"复杂"了......
你能用不同的方式处理吗?你会如何让它变得更简单?
[编辑]一般承认的答案:
好吧,我已经学到了一些我不知道的小细节和新的PHP函数.我不认为有正确的方法来做我所要求的.我显然是以错误的方式使用一些PHP函数,我会修复它.
在我看来,像这样的输入应该使用PHP过滤器函数进行验证/清理,因此我将Arkh的答案标记为已接受.
但是,对于特定的大学项目(PHP代码完全不相关),我将使用他的答案与Tatu的帮助函数构思混合使用.但是对于一个不同的项目,我会将他的答案与Ignacio的课堂理念混合使用,因为它看起来更好,更有条理.
Ark*_*rkh 12
我会将filter_input与FILTER_SANITIZE_NUMBER_FLOAT过滤器一起用于mid.像这样的东西:
$mid = filter_input(INPUT_GET, 'mid', FILTER_SANITIZE_NUMBER_FLOAT);
$op = filter_input(INPUT_GET, 'op');
if($mid > 0){
switch($op){
case 'info':
// Some code
break;
case 'cast':
// Some more code
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我将编写一个函数,它将获取索引的名称,并返回值$_GET或抛出异常.
那,或将其封装在类似于以下的类中:
#$_GET = array('name' => 'Ignacio', 'foo' => '42');
class Get
{
public static function string($name)
{
if (isset($_GET[$name]))
{
return $_GET[$name];
}
else
{
throw new Exception(sprintf('Unknown GET parameter "%s"', $name));
}
}
public static function int($name)
{
$val = Get::string($name);
$ret = filter_var($val, FILTER_VALIDATE_INT);
if ($ret != $val)
{
throw new Exception(sprintf('Invalid int GET parameter "%s"', $name));
}
return $ret;
}
}
echo Get::string('name') . "\n";
echo Get::int('foo') . "\n";
#echo Get::int('name') . "\n";
#echo Get::int('age') . "\n";
Run Code Online (Sandbox Code Playgroud)