0

即使我更改$_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为其他东西,怎么会仍然通过这个条件

4

3 回答 3

2

基本 PHP运算符优先级...&&计算 before ||,因此您的整个语句归结为:

(x && y && z && ....) || ($_GET['sort_order'] == 'desc')

您需要简化 if(),添加一些()以强制执行您自己的评估顺序,然后事情应该会开始好一些。

于 2013-02-12T14:40:57.670 回答
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
 }

更具体地说,你的最后一个 || 需要自己的括号,如上所示。

于 2013-02-12T14:41:56.140 回答
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。

于 2013-02-12T14:42:41.900 回答