HTTP 無狀態特性下,跨頁面表單數據傳遞可通過隱藏字段在頁面間「接力」傳遞,無需數據庫或 Cookie。
每頁表單包含前頁所有數據的隱藏字段,提交時攜帶歷史數據,最終頁一次性處理。使用 $stage 變量控制流程。
<?php
function display_name() {
global $PHP_SELF;
?>
<form method="GET" action="<?php echo $PHP_SELF; ?>">
Name: <input type="text" name="name"><br>
<input type="hidden" name="stage" value="cheese">
<input type="submit" value="Thanks!">
</form>
<?php } ?>
<?php
function display_cheese() {
global $PHP_SELF, $name;
?>
<form method="GET" action="<?php echo $PHP_SELF; ?>">
Favorite Cheese:
<input type="radio" name="cheese" value="brie">Brie
<input type="radio" name="cheese" value="cheddar">Cheddar
<input type="radio" name="cheese" value="mozzarella">Mozzarella<br>
Favorite Times:
<input type="checkbox" name="times[]" value="m">Morning
<input type="checkbox" name="times[]" value="n">Noon
<input type="checkbox" name="times[]" value="d">Dinner
<input type="checkbox" name="times[]" value="l">Late night<br>
<input type="hidden" name="name" value="<?php echo htmlspecialchars($name); ?>">
<input type="hidden" name="stage" value="results">
<input type="submit" value="Thanks!">
</form>
<?php } ?>
關鍵點:用 htmlspecialchars() 轉義輸出,防止 XSS 與 HTML 結構破壞。
<?php
if (empty($stage)) display_name();
elseif ($stage == 'cheese') display_cheese();
else process_form(); // 最後處理
?>
新增頁面只需添加顯示函數並在控制邏輯加一行 elseif,擴展極簡單。