处理发布请求

时间:2011-12-30 20:58:30

标签: php

我写了这篇文章,并想得到每个人的意见。当我期待FORM提交的变量时,我会使用它。即:

<form method="post" action="index.php">
Username: <input type="text" name="username">
</form>


$username = get_request('username');

function get_request($name) {
    if(isset($_REQUEST[$name])) {
        //return mysql_real_escape_string(htmlentities($_REQUEST[$name]));
        return mysql_real_escape_string($_REQUEST[$name]);
    } else {
        return "";
    }
}

3 个答案:

答案 0 :(得分:1)

很好,但如果$ _REQUEST失败,您是否应该返回错误而不是空字符串?不然好!

答案 1 :(得分:1)

虽然mysql_real_escape_string()做得很好,但您可能希望对返回的内容更加严格。例如。如果你只需要字母数字字符,它会更安全(也可能更快):

return preg_replace('/[^a-z0-9]/', '', $_REQUEST[$name]);

如果您运行的是PHP 5.2 +,甚至可以使用filter_var

同样如上所述,如果您只处理POST数据,则可以轻松使用$ _POST而不是$ _REQUEST。

除此之外,保持良好的工作! :)

答案 2 :(得分:1)

它看起来没问题,但它不会帮助您防止某些SQL注入。您应该在函数中添加另一个参数,根据类型清理输入,例如确保返回的是整数或浮点数。

例如,如果您有一个带有查询SELECT * FROM tbl LIMIT 10, $page的分页机制。如果$page = like 1; DROP TABLE tbl --并通过您的函数get_request()发送,那么它对您没有任何帮助。

另一件事是,如果它不存在,你应该只返回null而不是空字符串("")。

例如,如果您有变量$x = "",则isset($x)将返回true,而$x = null将返回false。

正如其他人指出的那样,您应该区分GETPOST