-1

这可能是一个非常简单的问题,但我不知道我在这里做错了什么......

为了清楚地向您解释,我在下面设置了一个非常简单的示例:

<ul>
    <li><a href="test.php?link1=true">Link 1</a></li>
    <li><a href="test.php?link2=true">Link 2</a></li>
    <li><a href="test.php?link3=true">Link 3</a></li>
</ul>

<?php 
    if(isset($_GET['link1'])) {
        if(($_GET['link1']) == 'true') {
            echo 'This Is Link 1';
        }
    }

    if(isset($_GET['link2'])) {
        if(($_GET['link2']) == 'true') {
            echo 'This Is Link 2';
        }
    }

    if(isset($_GET['link3'])) {
        if(($_GET['link3']) == 'true') {
            echo 'This Is Link 3';
        }
    }
?>

这是一个 test.php 页面,在这里我为 $_GET 设置了 3 个不同的参数,并相应地显示内容,现在一切正常,唯一不明白的是如何阻止这种 url 说

如果用户单击链接 1,则 url 将是:

http://localhost/test.php?link1=true

这个 url 的输出是This is Link 1

现在,如果我将此网址更改为:

http://localhost/test.php?link3=true&link2=true&link1=true

我得到的输出是这是链接1这是链接2这是链接3

现在这里没问题,但是如果有人输入这个并看到一个在另一个下面的表格,这很烦人,我有什么办法可以阻止这种篡改?

4

3 回答 3

3

使用 elseif 而不是单独的 if 语句。这样,只会执行一个(第一个条件成立)。

<?php 
if(isset($_GET['link1'])) {
    if(($_GET['link1']) == 'true') {
        echo 'This Is Link 1';
    }
} elseif(isset($_GET['link2'])) {
    if(($_GET['link2']) == 'true') {
        echo 'This Is Link 2';
    }
} elseif(isset($_GET['link3'])) {
    if(($_GET['link3']) == 'true') {
        echo 'This Is Link 3';
    }
}
?>
于 2012-09-11T09:35:19.877 回答
2

一种更可靠的方法可能是对每个链接使用相同的参数名称,但改变值。例如

<a href="test.php?link=link1">Link 1</a>
<a href="test.php?link=link2">Link 2</a>
<a href="test.php?link=link3">Link 3</a>

这样,即使有人在查询字符串中指定了多个值,也只会使用其中一个。

于 2012-09-11T09:37:53.097 回答
0

您正在使用连续if语句,因此可以满足所有情况并且可以回显所有输出。

if(isset($_GET['link3'])) {
    if(($_GET['link3']) == 'true') {
        echo 'This Is Link 3';
    }
}
// Nothing stops the next if working here.

您可以改为查看 switch 语句并检查第一个语句 - 或使用相同的语句?link=并在每个链接中将不同的数据传递给它,以便只能if满足一个语句。

于 2012-09-11T09:36:31.780 回答