將表單的 action 指向目前執行的腳本,可在同一檔案內同時處理「顯示表單」與「處理送出資料」兩個階段。關鍵在於判斷請求方法(GET/POST)或檢查隱藏欄位。
<?php
// 處理 POST 請求
if (isset($_POST['action']) && $_POST['action'] === 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>';
echo '</pre>';
} else {
?>
<form action="" method="POST">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer:<br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php } ?>
$_SERVER['PHP_SELF'] 取得目前腳本路徑,作為表單提交目標。action=submitted 作為旗標,區分「首次載入(GET)」與「表單送出(POST)」。personal[name]、beer[] 可直接在 $_POST 中形成多維陣列,方便處理。$HTTP_POST_VARS 代替 $_POST。filter_input() 或 filter_var() 進行輸入驗證與過濾。header("Location: " . $_SERVER['PHP_SELF']) 導向自身,避免重新整理重複送出。表單自提交是 PHP 開發常見模式,善用 $_SERVER['PHP_SELF'] 與隱藏旗標即可輕鬆實現,配合現代安全措施可構建健壯的表單處理流程。