我有同样的问题,但是......我正在根据使用标题的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,但它并没有真正帮助我。
答案 0 :(得分:1)
虽然您不一定要将$_GET输入用于需要安全性考虑的事情(在本例中),但是不要从URL中清除值是不好的做法。
您不仅要检查恶意输入(特别是如果您使用输入来查询数据库),而且您应该验证预期的整数值确实是整数,并且所需的字符串不为空。
此外,您的page($title, $msg)
函数会接受$title
和$msg
并设置它们,即使它们不是passed by reference。
如果您希望修改输入参数,请通过引用传递它们。
如果您需要使用输入参数,请勿立即覆盖它们。
如果您不需要输入参数并仅在本地使用$_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注入。