我有一个多个$ _GET值的长网址,它看起来像这样: ?index.php文件类别=音乐和ID = 3211&放大器;删除= YES 在php文件中,我有一个像这样的if条件:
if(isseet($_GET['Category']) && isset($_GET['Id']) && !isset($_GET['Delete'])){
echo 'Valid page';
}elseif(if(isseet($_GET['Category']) && isset($_GET['Id']) && isset($_GET['Delete'])){
echo 'delete !';
}
如你所见,这是一个非常复杂的条件,当我有大约20个类似的条件。我想知道我们是否有一些简单的方法来做到这一点,例如SWITCH 谢谢
答案 0 :(得分:1)
// if switch is true, check if all are set; if it's
// false check for none to be set. Defaults to true
function array_all_set($keys, $vector, $switch=true)
{
foreach($keys as $key)
if($switch == !isset($vector[$key]))
return false;
return true;
}
现在就这样使用它:
if(array_all_set(array("Category", "Id"), $_GET)
&& array_all_set(array("Delete"), $_GET, false)) {/* stuff */}
我知道只有3个值并没有太大的改进,但对于你所说的20个值,它只是为该数组添加值。
答案 1 :(得分:0)
首先,使用这样的代码:
if(isseet($_GET['Category']) )
//do something...
那是错的!你需要消毒你的输入。但是,我假设你已经知道了。回到你的问题,你应该使用一个相当复杂的结构来处理你的请求变量,例如字典,然后用它来验证你的请求。一个想法是这样的:
class RequestDictionary
{
private $dictionary;
public function RequestDictionary()
{
foreach ( $_GET as $key => $value )
{
$this->dictionary[$key] => clean_var($value);
}
}
public function hasKeys($keys = array())
{
foreach ( $keys as $key )
if ( !isset( $this->dictionary[$key] ) )
return false;
return true;
}
}
然后,在您的PHP页面中,您应该在页面中创建一个方法来验证请求的Url,如下所示:
function Validate()
{
$requestDict = new RequestDictionary();
return $requestDict->hasKeys(array('category', 'id', 'whatever'));
}
您的代码应该非常简化。请记住,无论何时编码多次相同的片段,都不会抽象出某些内容。对于超长的答案感到抱歉,但我不得不放置大部分课程,以便你可以很好地看到它,
希望我能帮忙! 大卫