2011-12-30 98 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