$ _GET在PHP参数的函数
我有同样的问题,但...我重定向根据的,如果使用标头是通过函数构建动态页面语句的用户。为了使该功能正常工作,它需要在标题的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,但它并没有真正帮助我。
答案给你链接的问题表明,功能不应该依赖任何外部(例如全局)变量,你可以访问所有相同的属性。 $_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']);
不知道如果我明白你的问题,但这里是一些代码,我用处理我的AJAX调用有:
$mc = new MyClass();
echo $mc->{$_GET["operation"]}($_GET);
这意味着“操作”是指内部MyClass的方法名称和我没有加每种方法都有一个新的switch语句。现在就可以增加一个功能“的addRecord($参数)”,以MyClass的,和我的Ajax调用是这样的:
ajax_users.php?operation=addRecord&name=testuser&dob=1980-01-01
你的PHP函数接收阵列中的参数,所以内部功能addRecord()
你必须访问像$args['name']
和$args['dob']
这样的变量,并且它有多少参数需要传递给您的方法。
确保你使用准备好的语句这里或适当的逃逸,以防止SQL注入。
虽然你不一定用的东西的$_GET输入需要安全性的考虑(在这种情况下),这是一个不好的做法不是从URL进行消毒值。
您不仅应该检查恶意输入(尤其是如果您使用输入来查询数据库),但您应该验证预期的整数值确实是整数,并且所需的字符串不是空的。
此外,您page($title, $msg)
函数接受$title
和$msg
并设定他们,即使他们不是passed by reference。
如果您希望修改输入参数,请通过引用传递它们。
如果您需要使用的输入参数,不要马上覆盖它们。
如果你不需要输入参数,只有使用价值从
$_GET
本地到你的函数,声明page()
不带任何参数。
为什么你需要使用GET?如果你使用POST这也是更安全
POST比POST更安全吗? POST的唯一好处是它允许你发送更多的数据(文件上传,非常长的textareas);但是您不需要比Firebug,TamperData或其他任何webdev工具来操作POST数据。 – iHaveacomputer
它不会混乱网址/显示用户数据。 示例login.php?username = iHaveacomputer&password = generic。要获取他们输入的信息,您只需键入网站的网址,然后按向下箭头键即可。而不是鼓励使用GET来消息鼓励POST,因为这就是它的用途。没有人想要一个400长的网址。 – Bankzilla
URL混乱是一个合理的论点。安全恐吓不是。也请等待[更多]点(http://*.com/privileges/comment),直到您可以发表简短的问题作为评论。 – mario
其中回答?你有同样的问题,哪个问题? – ceejayoz
首先,不是从函数中'echo',而是将内容存储到函数返回的变量中,即'return $ func_html'。 –
为什么你的函数需要立即覆盖的参数? –