2010年10月6日 星期三

php 防止重複提交

當我們寫網頁程式時
很多時會因為用戶按了重新整理(F5)引致重複送出表單
如重複留言等問題

當然使用AJAX可以解決這個問題
但現在我介紹一個比較簡單的方式解決
在表單和SESSION中加插一個隨機隱藏數值來定義是否重複送出
請從下方繼續閱讀觀看全文


inc.function.php
<?php

//隨機產生數字
function formResubmitGen(){
 global $_SESSION;
 $_SESSION["formHash"] = rand(10000, getrandmax());
}

//輸出Hidden表單
function formResubmitPrint(){
 global $_SESSION;
 if($_SESSION["formHash"]=="") formResubmitGen();
 echo '<input name="formHash" type="hidden" value="'.$_SESSION["formHash"].'" />';
}

//輸出檢查
function formResubmitCheck(){
 global $_SESSION, $_POST;
 if($_SESSION["formHash"]==$_POST["formHash"]){
  $_SESSION["formHash"] = "";
  return true;
 }
 return false;
}
?>



guestbook.php

<?php
//必須開啟SESSION
@session_start();
//引用上面的函式
include("inc.function.php");
//檢查表單輸入及是否重複
if($_POST["name"] && $_POST["comment"] && formResubmitCheck()){
 $db->insert($_POST,tblComment);
}
?>

Name
Comment



參考文獻:http://b.lineage.idv.hk/300/teach-php-reflesh-form-resubmit

沒有留言:

張貼留言