2013-02-12 1 views
0

$_GET 변수를 변경하더라도이 조건이 통과되는 이유는 무엇입니까?다른 데이터베이스에서 단일 열을 어떻게 추출합니까?

이 코드이

http://localhost/system/results.php?script_id=2&results=reorder&sort_column=supplier_address&sort_order=desc 

같은

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} 

링크 수익률을했습니다하지만 그것은 리디렉션하지 않는 예를 sorcodsalumn=supplier_address 말할이 sort_column=supplier_address을 변경할 때, 대신, 앞으로 어떤 생각을 간다 왜? 단순히 몇 글자를 제거 해달라고하지만 ...이 리디렉션 않는 다른 뭔가로 대체 여전히이 상태

답변

2

기본 PHP operator precedence에게 전달하는 방법이 isset($_GET['sort_column']을 이용하고 있고 뭔가 다른 sort_column을 수정하고있는 경우 올

.. . &&|| 전에 평가, 그래서 전체 문장은 아래로 비등 : 당신은() 경우, 자신의 평가 순서를 적용 할 몇 가지 ()을 추가 한 다음 일이 양방향 작업을 시작해야 함을 단순화 할 필요가

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

더 낫다.

+0

오 그게 너무 바보 같았 어 우선 순위 물건을 잊어 버렸어 매우 고마워 +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 
} 

특히 마지막 || 위에 표시된대로 대괄호가 필요합니다.

+0

대단히 감사합니다 :) +1 –

1

| 주위에 브래킷을 넣어야합니다. (OR) 문은 다음과 같습니다.

그렇지 않으면 명령문은 sort_order가 'desc'로 설정 될 때마다 true를 반환합니다.

+0

고맙습니다. +1 –

관련 문제