【问题标题】:query string page&members查询字符串页面&成员
【发布时间】:2012-03-29 16:17:52
【问题描述】:

我正在做一些测试,只是为了学习(通常我以 ajax 方式进行此操作)。当 url 类似于 http://xxx/?se=page&members=11

时,我正在尝试更改页面
<?php
    if (isset($_GET['se'])){
        switch ($_GET['se']){
            case "page&members":
                include "members.php";
                break;

             default:
                 include "in.php";
            }
    }
?>

问题是即使使用此 url http://xxx/?se=page&amp;members=11,代码也会重定向到 in.php

【问题讨论】:

  • $_GET['se']=="page", 不是 se=page&amp;members=11

标签: php query-string


【解决方案1】:

假设 11 是 id,那么您应该将行为更改为:

链接:http://xxx/?page=members&amp;id=11

if ( isset( $_GET['page'] ) )
{
    $file = "{$_GET['page']}.php";

    if ( file_exists( $file ) )
        include( $file );
    else
        include( 'in.php' );

}

【讨论】:

  • 所有参数也可以在包含的文件中找到。因此,将查询字符串转发到包含的文件是不必要的,甚至不会起作用。我也不建议包含用户可以处理的每个文件,因为这会导致 XSS 漏洞。
  • @YMMD 好点,修复了我的代码。他可以自己避免 XSS,这段代码为 OP 当前的问题提供了一个解决方案。
【解决方案2】:

这样做

<?php
if (isset($_GET['se']) && isset($_GET['members'])){
    include (($_GET['se']=="page") ? "members.php" : "in.php");
}
?>

【讨论】:

    【解决方案3】:

    在您展示的示例中:$_GET['se'] == 'page' 和 $_GET['members'] == '11'

    你会想要改变你的案例陈述:

     switch ($_GET['se']){
            case "11":
            include "members.php";
    ...
    

    【讨论】:

    • 别忘了加上break语句! :-)
    【解决方案4】:

    您有 2 个变量,其中 se 保存值“页面”,成员保存值“11”,因此您的案例将始终默认为 se 永远不会保存值“{page&members}”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多