如何从另一个数据库中提取单个列?

时间:2013-02-12 14:36:36

标签: php

即使我更改$_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修改为其他内容仍然会通过此条件,该怎么办

3 个答案:

答案 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。

相关问题