문제

나는 이것을 가진 레거시 코드를 얻었습니다.

<?PHP
    if(isset($_GET['pagina'])=="homepage") {
?>
HtmlCode1
<?php 
} else { 
?>
HtmlCode2
<?php 
} 
?>

나는 왜 그런지 정확히 모르겠지만 이것은 효과가있는 것 같습니다. htmlcode1은 내가? pagina = 홈페이지를 가질 때로드되고 pagina var가 존재하지 않거나 다른 것이있을 때 htmlcode2가로드됩니다 (실제로 다른 것을 보지 못했습니다. 웹 사이트는 PHP4를 사용하고 있습니다 (정확한 버전은 모릅니다). 그러나 실제로, 이것은 어떻게 작동 할 수 있습니까? 나는 매뉴얼을보고 Isset이 bool을 반환한다고 말합니다.

누구나?

도움이 되었습니까?

해결책

문제는 "=="가 유형에 민감한 비교가 아니라는 것입니다. 모든 (비어 있지 않은) 문자열은 부울과 "동일"하지만 그렇지 않습니다. 동일한 ( "==="연산자를 사용해야합니다).

빠른 예,이 행동을보고있는 이유 :
http://codepad.org/anh1ahu8

문서의 자세한 내용은 다음을 참조하십시오.
http://php.net/manual/en/language.operators.comparison.php
http://ca3.php.net/manual/en/types.comparisons.php ( "=="테이블과의 "느슨한 비교)

다른 팁

isset() 참 또는 거짓을 반환합니다. 부울 비교에서 "homepage" 평가할 것입니다 true. 그래서 본질적으로 당신은 여기에 왔습니다.

if ( isset($_GET['pagina']) == true )

Pagina가 무엇이든 동일하면 Htmlcode1이 표시됩니다. 설정이 없으면 htmlcode2가 표시됩니다.

나는 그것을 확인하기 위해 그것을 시도했고 ?pagina=somethingelse 하다 ~ 아니다 HtmlCode2를 표시하십시오.

True/False와 "홈페이지"를 비교하는 것이 실제로 의미가 없기 때문에 버그라고 생각합니다. 코드는 실제로 다음을 기대할 것입니다.

if (isset($_GET['pagina']) && ($_GET['pagina'] == "homepage")) {
}

이것이 어떻게 작동하는지 (이전에 언급 된 "홈페이지"== true와는 별도로) :

  • ISSET이 어딘가에 재정의 되었습니까?
  • 자체 수정 된 PHP 버전입니까?
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top