2010-05-03 3 views
1

여기 내 코드에는 $ _GET [ 'page'] == 자습서, PHP, mysql 등을 사용할 때 "active"라는 CSS 클래스가 있습니다.'또는'연산자를 사용하여 메뉴에서 작동하지 않습니다.

'page'변수가이 값 중 하나와 같지 않더라도이 경우 자습서 버튼은 어떤 이유로 든 활성화되어 있습니다.

왜 이런 일이 발생하는지 알고 싶습니다. 'or'(||) 피연산자를 잘못 사용하고 있습니까?

<?php if($_GET['page'] == 'tutorials' || 'php' || 'mysql' || 'html' || 'css' || 'js') { ?> 
     <li class="active"> <?php } else { ?> <li> <?php } ?> 

     <a href="index.php?page=tutorials">Tutorials</a> 
     <ul> 
    <li><a href="index.php?page=php">PHP</a></li> 
    <li><a href="index.php?page=mysql">MySQL</a></li> 
    <li><a href="index.php?page=html">HTML</a></li> 
    <li><a href="index.php?page=css">CSS</a></li> 
    <li><a href="index.php?page=js">JS</a></li> 
     </ul> 
     </li> 
+0

마찬가지로 :) –

+0

을 받아 들여야

$pages = array('tutorials', 'php', 'mysql' /* etc */); if (in_array($_GET['page'], $pages)) { // handle } 

답변

8

||을 잘못 사용 중입니다.

이렇게 전체 조건을 개별적으로 테스트해야 사용할 수 있습니다. 그래서 당신은 할 수 :

<?php if($_GET['page'] == 'tutorials' || $_GET['page'] == 'php' || $_GET['page'] == 'mysql' || $_GET['page'] == 'html' || $_GET['page'] == 'css' || $_GET['page'] == 'js') { ?> 

여기에 대체 구문입니다 :

<?php 
    if(in_array($_GET['page'], array('tutorials', 'php', 'mysql', 'html', 'css', 'js'))) { 
?> 

PHP Control Structures, arrays에 대한 자세한 내용을 읽고, in_array()

+0

덕분에,이 일 :(! 덕분에 다른 유용한 링크 내가 3 분 이상을 기다려야 할 –

1

당신은 할 수 없습니다 || 그런 끈. 그것은 PHP에 의해 true OR true OR true OR ... 인 것으로 분석됩니다. if()는 다음과 같이 다시 써야합니다.

if ($_GET['page'] == 'tutorials') || ($_GET['page'] == 'php') || etc....) 
1

| 틀리게.

기본적으로 $ _GET [ 'page'] == 'tutorials'인지 확인하기 위해 테스트하고 있습니다. 그 다음에 'php', 'mysql'등이 true로 평가됩니다. 다음과 같이 표시됩니다.

$_GET['page'] || true || true || true || true 

간체로 사용하십시오. 모든 물건을 배열에 넣고 배열이 있는지 확인하십시오.

artlung의 대답은 당신의 문제를 해결하는 경우, 당신은 (그의 대답에 체크 표시를 클릭) 그의 대답
+1

'in_array' 호출에서'needle' 매개 변수가 누락되었습니다. –

관련 문제