2013-02-12 63 views
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別的東西還通過這個條件

回答

2

基本PHP operator precedence .. 。&&||前評估,讓你的整個陳述歸結爲:

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

您需要簡化,如果(),添加一些()執行自己的評估順序,然後事情應該開始工作雙更好。

+0

哦,那太愚蠢了我,我忘記了優先的東西,非常感謝你+1 – 2013-02-12 14:42:40

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 
} 

更具體地說你最後||需要自己的括號,如上所示。

+0

非常感謝你我得到它:) +1 – 2013-02-12 14:43:19

1

你需要在你的|| (OR)語句如下:

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。

+0

非常感謝你我得到它:) +1 – 2013-02-12 14:43:39

相關問題