當程式員的人應該都去過論壇,都在應該註冊過論壇的使用者吧.論壇上使用者註冊的步驟分為幾部:
第一步 協議頁面, 只有同意這個協議才可以進入下一步註冊
第二步 表單輸入頁面, 輸入使用者的註冊資訊
第三步 註冊結果頁面,提示註冊成功
在實際工作中,假如我們要開發實現這種註冊頁面,要注重很多的問題:
1使用者跳過"第一步",沒有閱讀協議頁面,直接通過第二步的url直接存取表單輸入頁面.
2使用者在完成"第三步"的時候,不停的重新整理頁面,這個使用者輸入的資訊就在每重新整理一次的時候被重新儲存一次
3使用者在完成"第三步"的時候,點擊後退,修改某個資訊後,再次提交.
類似這種得表單在web開發的過程中會經常碰到, 對於第3點, 幾乎目前所有的論壇中都有這個問題存在,;第2點在一些留言板中經常碰到, 但是怎麼作才可以避免上述的問題呢?
今天老闆讓我幫別人做個檔案上傳的東西, 答應任何人來上傳符合要求檔案, 頁面模板已經設計好了, 就是和使用者註冊的步驟是一樣的, 分三步驟. 以前做過類似的東西, 但是防重新整理機制設計的不是很好. 反正今天沒事做, 就稍微研究一下, 看看如何?代碼可以避免上述的問題.
-----------------------------------------------
-----------------------------------------------
下面是個人設計的實現代碼,可以避免上述的問題. 通過瀏覽器訪問register.php,在輸入"使用者名稱"和"地址"的時候, 兩個都不可為空,為空白的時候,會提示錯誤資訊; 當兩個輸入框都不為空白的時候, 可以提交成功,提交成功以後,你再進行重新整理和後退,看看是不是達到了效果了.
檔案一: config.inc.php
<?php
//開始session
session_start();
//設定不進行本機快取
header('Expires: '.date('D,d M Y H:i:s',mktime(0,0,0,1,1,2000)).' GMT');
header('Last-Modified:'.gmdate('D,d M Y H:i:s').' GMT');
header('Cache-control: private, no-cache,must-revalidate');
header('Pragma: no-cache');
?>
檔案二: register.php
<?php
require_once "config.inc.php";
if(isset($_SESSION[step2]) && isset($_POST[step2])) {
//註冊的最後一步
$errorStr = formStep3();
if($errorStr!=null){
require_once('step2.html');
}else{
require_once('step3.html');
unset($_SESSION[step2], $_SESSION[step1]);
}
} else if(isset($_SESSION[step1]) && isset($_GET[step1])) {
//註冊的第二步
require_once('step2.html');
$_SESSION[step2] = 1;
} else {