即使我更改$_GET
变量,为什么会出现这种情况?
我有这段代码
elseif(isset($_GET['results']) && $_GET['results'] == 'reorder' &&
isset($_GET['sort_column']) && $_GET['sort_column'] != '' && isset($_GET['sort_order'])
&& $_GET['sort_order'] != '' && $_GET['sort_order'] == 'asc'
|| $_GET['sort_order'] == 'desc') { /*rest goes here*/ } else {redirect}
链接会像这样返回
http://localhost/system/results.php?script_id=2&results=reorder&sort_column=supplier_address&sort_order=desc
但是,当我将此sort_column=supplier_address
更改为例如sorcodsalumn=supplier_address
时,它不会重定向,而是继续,任何想法为什么?但是,如果我只删除几个字母而不用其他东西替换它会重定向......
如果使用此isset($_GET['sort_column']
并将sort_column
修改为其他内容仍然会通过此条件,该怎么办
答案 0 :(得分:2)
基本PHP operator precedence ... &&
在||
之前进行评估,因此您的整个陈述归结为:
(x && y && z && ....) || ($_GET['sort_order'] == 'desc')
您需要简化if(),添加一些()
来强制执行您自己的评估顺序,然后事情应该开始好转。
答案 1 :(得分:1)
您的AND和OR需要正确括号。
else if (isset($_GET['results']) &&
$_GET['results'] == 'reorder' &&
isset($_GET['sort_column']) &&
$_GET['sort_column'] != '' &&
isset($_GET['sort_order']) &&
$_GET['sort_order'] != '' &&
($_GET['sort_order'] == 'asc' || $_GET['sort_order'] == 'desc'))
{
/*rest goes here*/
} else {
redirect
}
更具体地说,你的最后一个||需要自己的括号,如上所示。
答案 2 :(得分:1)
您需要在||周围放置一个括号(或)这样的陈述:
elseif(isset($_GET['results']) && $_GET['results'] == 'reorder' &&
isset($_GET['sort_column']) && $_GET['sort_column'] != '' && isset($_GET['sort_order'])
&& $_GET['sort_order'] != '' && ($_GET['sort_order'] == 'asc'
|| $_GET['sort_order'] == 'desc')) { /*rest goes here*/ } else {redirect}
否则,只要sort_order设置为'desc',您的语句就会返回true。