2012-08-08 7 views
0

$_SESSION 변수와 $_GET 변수를 비교하려고합니다.세션 변수와 변수 비교 PHP

$_SESSION['auth'] === $_GET['user'] 

1과 동일 모두 결과는 다음 진행하면 :

모두 숫자입니다.

어떤 이유로이 기능이 제대로 작동하지 않습니다. 사용하는 경우 : if $_SESSION['auth'] = 2, and $_GET['user'] = 1, 그것은 계속 진행됩니다.

편집 :이와

if(isset($_SESSION['auth'])===isset($_GET['user'])){ 
// proceeding code 
} 

에 상관없이 $ _GET 변수가 결과 어떤 일이 여전히 진행된다. 비록 내가 (int)와 함께 아래의 해답을 시도했다하더라도, 그것은 여전히 ​​나에게 같은 결과를 준다.

내 $ _SESSION 변수가 1이기 때문에 테스트 할 문자열에 $ _GET 변수를 설정하려고했으나 시도하지 않습니다. 그것은 단지 숫자를 가진 코드를 통해서만 진행됩니다.

덕분에 GET/POST/요청 슈퍼 전역에서 나오는

+0

** if ** 아마도 ?? –

+1

코드 게시 방법은 어떻습니까? – Musa

+0

코드가 올바르지 않습니다. equal-to (strict 또는 not) 비교를 사용하는 경우 결과가 false가 될 수 있으므로 코드 블록을 중단해야합니다. 더 나은 도움을 받으려면 추가 코드를 게시하십시오. – RobB

답변

2

시도 그 함수가 반환하는 것은 무엇이든간에.

따라서 isset()은 매개 변수가 설정된 경우 true을 반환하고 그렇지 않으면 false을 반환합니다.

그게 아니라 값을 비교하고 있습니다.

비교하기 전에 바르가 설정되어 있는지 확인하는 것이 좋습니다. 먼저 그렇게 한 다음 비교를 시작하십시오. 이와 같이 :

if(isset($_SESSION['auth']) && isset($_GET['user'])){ 

    if($_SESSION['auth'] === (int)$_GET['user']) 
    // proceeding code 
    } 

} 
+0

설명해 주셔서 감사합니다! – hellomello

1

아무것도는 단지 숫자로 구성되어 있더라도 문자열로 입력됩니다. SESSION에 실제 정수를 저장 한 경우 문자열을 int와 비교하기 때문에 엄격한 비교 (===)가 실패합니다.

대신

$_SESSION['auth'] === (int)$_GET['user'] 

을 시도하거나 단순히 유형을 비교하지 않습니다 ==에 비교, 휴식을 취하십시오.

+3

그는 계속 진행할 수있는 방법이 없으므로이 질문에 매우 혼란 스럽습니다. – animuson

1

추가 코드를 보지 않고 잘못된 비교 연산자를 사용하고있는 것으로 보입니다. 당신의 조건식을 통과해야하는 유일한 방법은 다음과 같은 상황에 있습니다

<?php 
$a = 2; 

if($a = 1 && $a = 5){ 
    echo 'yes'; 
}else{ 
    echo 'no'; 
} 
?> 

===의 사용 가치와 유형 모두에 대해, 동일한 비교를위한 것입니다. 추가 참조는 comparison operators에있는 문서를 참조하십시오.

업데이트 : 모두 False을 경우 isset($_SESSION['auth'])의 결과가 True하고 isset($_GET['user'])True 다음이 통과 할과 같은 경우 때문에

코드를 본 후, 당신의 조건식이 통과되는 이유입니다. 조건부 표현식은 isset(VARIABLE)의 결과 만 확인하며 일치하는 변수가 아닌 경우 검사합니다. 당신이 if "평등"상태로 내부 기능이있는 경우

1

당신은 모두 $_SESSION['auth']$_GET['user']을 설정 또는 해제하는 경우, 실제로 비교하지 확인되어, 당신이 비교됩니다

if(isset($_SESSION['auth']) && isset($_GET['user'])){ 
    if($_SESSION['auth'] == $_GET['user']) 
    // proceeding code 
    } 
} 
+0

두 번째'if' 문은 필요 없습니다. if (isset ($ _ SESSION [ 'auth']) && isset ($ _ GET [ 'user']) && $ _SESSION [ 'auth'] == $ _GET 기본 if 문에 표현식을 추가 할 수 있습니다. [ 'user']) {'. – RobB