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演算子の優先順位...は の&&前に評価される||ため、ステートメント全体は次のようになります。

(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

|| を括弧で囲む必要があります。(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 を返します。

于 2013-02-12T14:42:41.900 に答える