如果我有一個 HTML 表單
<form action="index.php" method="POST">
<input type="text" name="user" />
<input type="submit" />
</form>
在 index.php 用 PHP 接收表單值時,
用以下二種方式有什麼差別?
第一種
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( isset( $_POST['user'] ) ) {
這裡操作 $_POST['user']
}
}
第二種
if ( isset( $_POST['user'] ) ) {
這裡操作 $_POST['user']
}
我感覺第一種方式用 $_SERVER['REQUEST_METHOD'] 來判斷好像是多餘的,
但書上這樣教,是有什麼差別嗎?
要檢查 REQUEST_METHOD 是因為通常一個頁面路由會用到2種以上的方法。
譬如 /questions,當你第一次進去的時候會用GET,填完問卷後可能用POST打回同一個路由。
這時候常見到的寫法會是:
if ( $_SERVER['REQUEST_METHOD'] === 'GET' ) {
echo "html"
傳回頁面
}
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( isset( $_POST['user'] ) ) {
這裡操作 $_POST['user']
}
}
ChatGPT
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
這行代碼檢查當前請求的方法是否為 POST。$_SERVER['REQUEST_METHOD'] 變數保存了請求的方法,例如 GET、POST 等。此條件確保只有在 POST 請求時才進一步處理。
安全性問題
使用 GET 方法提交的數據會顯示在 URL 中,可能會暴露敏感信息。例如,登錄表單中提交的用戶名和密碼不應該出現在 URL 中。直接處理表單數據而不檢查請求方法可能會導致這些敏感信息被洩露。數據重複提交
如果用戶刷新提交表單的頁面,瀏覽器會重新發送最後的請求。如果表單數據通過 GET 方法提交,這個請求會再次處理,可能導致數據重複提交。例如,提交評論或訂單時,可能會出現重複評論或訂單的情況。不符合 RESTful 慣例
在 RESTful API 設計中,不同的 HTTP 方法表示不同的操作。如果不檢查請求方法,可能會違反這些慣例,導致代碼混亂且難以維護。代碼的意圖不明確
檢查請求方法可以讓代碼更加清晰,表明只在特定情況下(例如,表單提交時)才處理數據。如果沒有這樣的檢查,代碼的意圖可能不明確,增加了理解和維護的難度。