使用if和else语句错误

时间:2013-07-26 09:22:58

标签: php url get

我创建了两个链接,我希望页面内容能够更改。问题是URL更改但不是页面内容。

<h3>Filter Results</h3>
<p><a href="index.php?filter='Action'>Action</a></p>
<p><a href="index.php?filter='Comedy'">Comedy</a></p>
if (isset($_GET['filter']) == 'Action') {
    echo 'Action';  
}
else if (isset($_GET['filter']) =='Comedy') {    
    echo 'Comedy';
}

它始终输出第一个链接信息“Action”。

10 个答案:

答案 0 :(得分:7)

您的链接有问题:

<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
<!--                         ^    ^ No single quotes (' ') -->

Yogesh Suthar pointed it out first

此外, isset() 会返回一个布尔值(truefalse;根据变量是否已设置 )。您将布尔值与字符串 a string will always be converted into TRUE 进行比较(除非字符串为“false”或类似),因此基本上,如果设置了变量,则第一个条件将始终匹配。

你想要

if (isset($_GET["filter"]) && $_GET["filter"] === "Action")

请注意===的使用,这将确保变量完全符合您的想法,而不是某种其他类型的变量。

几点(无耻地被盗取自其他答案)

  • 如果有多个可能的过滤器,请检查变量是否存在一次,并使用switch/case块来确定它们中的哪一个:

    if(isset($_GET['filter'])) {
        switch($_GET['filter']) {
            case 'Action':
                echo 'Action';
                break;
            case 'Comedy':
                echo 'Comedy';
                break;
        }
    }
    

答案 1 :(得分:5)

函数isset仅检查变量是否存在!它不会返回它的价值!试试这个:

<h3>Filter Results</h3>
<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
if(isset($_GET['filter']) && $_GET['filter'] == 'Action'){
    echo 'Action';  
}

else if(isset($_GET['filter']) && $_GET['filter'] == 'Comedy') {
    echo 'Comedy';
}

此外,使用switch可能会在未来更轻松:

<h3>Filter Results</h3>
<p><a href="index.php?filter=Action">Action</a></p>
<p><a href="index.php?filter=Comedy">Comedy</a></p>
if(isset($_GET['filter'])) {
    switch($_GET['filter']) {
        case 'Action':
            echo 'Action';
            break;
        case 'Comedy':
            echo 'Comedy';
            break;
    }
}

答案 2 :(得分:3)

正如@MadaraUchiha所说的关于isset

if(isset($_GET['filter']) == 'Action')

应该是

if(isset($_GET['filter']) && $_GET['filter'] == 'Action')

另外

<a href="index.php?filter='Action'>Action</a>
        ^                 ^      ^ // here you started " but not ended and remove the single quotes around Action

应该是

<a href="index.php?filter=Action">Action</a>

答案 3 :(得分:3)

确保插入一个开始和结束的php标记:<?php?>为了简化它,您可以通过$_GET

回显您的值
<h3>Filter Results</h3>
<p><a href="index.php?filter='Action'>Action</a></p>
<p><a href="index.php?filter='Comedy'>Comedy</a></p>
<?php
    if(isset($_GET['filter'])){
        echo $_GET['filter'];  
    }
?>

答案 4 :(得分:2)

函数isset将返回true或false(它检查变量是否设置)。更改您的代码:

if(isset($_GET['filter']) && $_GET['filter'] == 'Action') {

答案 5 :(得分:1)

你的if条件不正确:

if(isset($_GET['filter']) && $_GET['filter'] == 'Action'){
  echo 'Action';  
}

与else相似如果:

else if(isset($_GET['filter']) && $_GET['filter'] =='Comedy') {

当您将isset($_GET['filter'])与值进行比较时虽然isset返回true为false,因此您需要比较$_GET['filter']的值。

答案 6 :(得分:1)

isset返回true,由于'Action'不是null,因此评估为真。

if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Action')) {
    // ...
} else if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Comedy')) {
    // ...
}
BTW这样的代码迟早会成为维持的噩梦。

您可以改为,例如

function preventDirectoryTraversal($requestParam) {
    return preg_replace("/\//", "", $requestParam);
}

// ...

if (isset($_GET['filter'])) {
    $filterName = preventDirectoryTraversal($_GET['filter']);
    include(FILTERS_DIR . "/" .  $filterName . ".php");
}

或类似的东西。当然这可以进一步改进,但我希望你明白这一点。

答案 7 :(得分:1)

错误使用isset,check documentation,返回一个布尔值。

if (isset($_GET['filter']))
{
    switch ($_GET['filter'])
    {
        case 'Action':
            //TODO
            break;
        case 'Comedy':
            // TODO
            break;
        default:
            // TODO
            break;
    }
}

答案 8 :(得分:1)

你不必使用isset()然后比较。

$filter = $_GET['filter'];

if(isset($filter)){
   if($filter == 'Action'){
     echo 'Action';
   }else if($filter == 'Comedy'){
     echo 'Comedy';
   }

}

答案 9 :(得分:0)

//isset will always return true or false
if(isset($_GET['filter'])){

    if($_GET['filter']=='Action')
    {
        echo 'Action';

    }elseif($_GET['filter']=='Comedy'){

        echo 'Comedy';

    }

}