3

我创建了两个链接,我希望在其中更改页面内容。问题是 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”。

4

10 回答 10

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 首先指出

此外,isset()将返回一个布尔值(truefalse; 基于变量是否设置)。您将布尔值与字符串进行比较,字符串将始终被转换为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;
        }
    }
    
于 2013-07-26T09:25:34.417 回答
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;
    }
}
于 2013-07-26T09:25:27.557 回答
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>
于 2013-07-26T09:26:01.190 回答
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'];  
    }
?>
于 2013-07-26T09:27:57.800 回答
2

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

if(isset($_GET['filter']) && $_GET['filter'] == 'Action') {
于 2013-07-26T09:25:08.807 回答
1

如果条件不正确,请执行以下操作:

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

与 else if 类似:

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

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

于 2013-07-26T09:25:20.170 回答
1

isset返回true并且因为'Action'is not null,所以它的计算结果为 true。

if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Action')) {
    // ...
} else if ((isset($_GET['filter'])) && ($_GET['filter'] == 'Comedy')) {
    // ...
}

顺便说一句,这样的代码迟早会成为维护的噩梦。

例如,您可以改为

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

// ...

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

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

于 2013-07-26T09:25:35.170 回答
1

错误使用 isset,检查文档,返回布尔值。

if (isset($_GET['filter']))
{
    switch ($_GET['filter'])
    {
        case 'Action':
            //TODO
            break;
        case 'Comedy':
            // TODO
            break;
        default:
            // TODO
            break;
    }
}
于 2013-07-26T09:27:42.523 回答
1

您不必使用 isset() 然后进行比较。

$filter = $_GET['filter'];

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

}
于 2013-07-26T09:27:48.900 回答
0
//isset will always return true or false
if(isset($_GET['filter'])){

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

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

        echo 'Comedy';

    }

}
于 2013-07-26T10:19:39.927 回答