$ _GET作为PHP函数中的参数

时间:2011-10-10 02:15:56

标签: php function parameters get

我有同样的问题,但是......我正在根据使用标题的if语句重定向用户到通过函数构造的动态页面。为了使该函数正常工作,它需要在头文件的GET部分传递的参数。

根据提供的答案,这是一种不好的做法。我该怎么做呢?

function page($title,$msg){
    $title = $_GET['title'];
    $msg = $_GET['msg'];
    echo '<h1>'.$title.'</h1>';

    echo '<p>';
    switch($msg){
        case 1:
            echo 'dwasdwadawdwadwa';
        break;
        case 2:
            echo 'wasdadwadwdad';
        break;
        default:
            echo 'wadasdasd';
        break;
    }
    echo '</p>';
}

ps:随意指出你看错的其他事情。

我找到了this,但它并没有真正帮助我。

4 个答案:

答案 0 :(得分:1)

虽然您不一定要将$_GET输入用于需要安全性考虑的事情(在本例中),但是不要从URL中清除值是不好的做法。

您不仅要检查恶意输入(特别是如果您使用输入来查询数据库),而且您应该验证预期的整数值确实是整数,并且所需的字符串不为空。

此外,您的page($title, $msg)函数会接受$title$msg并设置它们,即使它们不是passed by reference

  1. 如果您希望修改输入参数,请通过引用传递它们。

  2. 如果您需要使用输入参数,请勿立即覆盖它们。

  3. 如果您不需要输入参数并仅在本地使用$_GET的值,则声明page()不带任何参数。

答案 1 :(得分:0)

为什么需要使用 GET ?如果使用更安全的POST,您可以访问所有相同的属性

答案 2 :(得分:0)

您链接的问题的答案表明函数不应该依赖于任何外部(例如全局)变量。 $_GET$_POST(以及其他)是'超级全局变量',PHP的语言特性使它们可以在任何范围内使用。这意味着它们可能会在脚本中的任何位置意外修改。

帮助避免这种情况的一种方法是避免在方法中使用超级全局变量,而不是 - 正如另一个问题的答案所暗示的那样 - 是要求从超级全局变量中获取变量的参数。

,例如,而不是:

function add_user() {
  $user = $_GET['user'];
  // ...
}
add_user();

你会使用:

function add_user($user) {
  // ...
}
add_user($_GET['user']);

在你的情况下,你想要的是:

function page($title, $msg){
  echo '<h1>'.$title.'</h1>';
  echo '<p>';
  switch($msg){
    case 1:
      echo 'dwasdwadawdwadwa';
    break;
    case 2:
      echo 'wasdadwadwdad';
    break;
    default:
      echo 'wadasdasd';
    break;
  }
  echo '</p>';
}

然后,当您致电page时,您会将其称为:

page($_GET['title'], $_GET['msg']);

答案 3 :(得分:-1)

我不确定我是否理解你的问题,但这里有一些我使用的代码处理我的ajax调用:

$mc = new MyClass();
echo $mc->{$_GET["operation"]}($_GET);

这意味着“操作”是指MyClass中的方法名称,我不必为每个方法添加新的switch语句。现在我可以向MyClass添加一个函数“addRecord($ args)”,我的ajax调用将如下所示:

ajax_users.php?operation=addRecord&name=testuser&dob=1980-01-01

你的php函数接收数组中的参数,因此在函数addRecord()内你必须访问像$args['name']$args['dob']这样的变量,并且它与你需要多少参数有关系传递给你的方法。

确保在此处使用预准备语句或正确转义以防止sql注入。