2011-12-30 52 views
0

我写了这个,并希望得到每个人的意见。当我期待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 ""; 
    } 
} 
+0

如果您希望将数据作为POST变量传递,则可以使用$ _POST数组。 – Yaniro 2011-12-30 21:00:08

+0

看起来不错。 – 2011-12-30 21:00:54

+0

我建议使用'$ _POST'或'$ _GET'而不是'$ _REQUEST'。 – 2011-12-30 21:07:20

回答

1

尽管mysql_real_escape_string()做得很好,但您可能希望对返回的内容进行更严格的规定。例如。如果你只需要字母数字字符,这将是安全的(且可能更快)做的事:

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

甚至使用filter_var如果正在运行PHP 5.2 +。

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

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

1

不错,但你不应该想如果$ _REQUEST失败,而不是返回一个空字符串的错误?否则好!

1

它看起来不错,除了它不会帮助你对某些SQL注入。你应该为你的函数添加另一个参数,根据类型来清理输入,例如确保你的返回是一个整数或浮点数。

例如,如果您有一个分页机制,查询SELECT * FROM tbl LIMIT 10, $page。如果$page = like 1; DROP TABLE tbl --它通过你的功能get_request()发送,它不会帮你任何一点。

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

如果例如有一个变量$x = "",然后isset($x)将返回true,而它会返回false与$x = null

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