在網上搜尋了一下有很多站長都這樣說的
1、提交按鈕置disabled
當使用者提交後,立即把按鈕置為不可用狀態。這種用js來實現。
提交前代碼如下:
代碼如下 |
複製代碼 |
$("#submit").attr('disabled','true'); $("#submit").val("正在提交,請稍等"); |
執行後,把按鈕置為原來狀態
代碼如下:
代碼如下 |
複製代碼 |
$('#submit ').removeAttr('disabled'); $("#submit ").val("確定提交"); |
這樣只是針對一些簡單的前台提交了,如果我們自己做個表單站長提交給我們php邏輯層檔案就過濾這那個js了。
到期時間法
使用者提交按鈕後產生一個token(每次業務提交token 為唯一值)存入session,並設定到期時間。當使用者再此提交時,檢測token是否一致且是否到期,若一致且沒有到期,則認為提交了二次
例子
代碼如下 |
複製代碼 |
<?php /* * PHP簡單利用token防止表單重複提交 * 此處理方法純粹是為了給初學者參考 */ session_start(); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false; set_token(); return $return; } //如果token為空白則產生一個token if(!isset($_SESSION['token']) || $_SESSION['token']=='') { set_token(); } if(isset($_POST['test'])){ if(!valid_token()){ echo "token error"; }else{ echo '成功提交,Value:'.$_POST['test']; } } ?> <form method="post" action=""> <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>"> <input type="text" name="test" value="Default"> <input type="submit" value="提交" /> </form> |
方法二
代碼如下 |
複製代碼 |
<?php //開啟session session_start(); //如果有提交標識 if(isset($_GET['action']) && $_GET['action'] === 'save'){ //如果有session且跟傳過來的值一樣才算提交 if(isset($_SESSION['__open_auth']) && isset($_POST['auth']) && $_SESSION['__open_auth'] == $_POST['auth']){ print_r($_POST); $_SESSION['__open_auth'] = null;//清空 } else { //走起 header("location: post.php"); } exit(); } //授權 $auth = $_SESSION['__open_auth'] = time(); ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>post</title> </head> <body> <form action="post.php?action=save" method="post"> <ul> <li> <input type="hidden" name="auth" value="<?php echo $auth;?>"> <input type="text" name="userName"> </li> <li> <input type="password" name="userpass"> </li> <li> <input type="submit" value="走起"> </li> <li> <?php echo time(); ?> </li> </ul> </form> </body> </html> |
mysql php資料庫重複記錄防止
代碼如下 |
複製代碼 |
<?php $link=mysql_connect(‘localhost’,’root’,’1234’); //得到MySQL資料庫連接 $username=$_GET["name"]; //得到從用戶端表單傳過來的資料 $q="select * from usertable where user_name='$username'"; mysql_query("SET NAMES gb2312"); //避免出現中文亂碼 $rs = mysql_query($q, $link); //查詢資料庫 $num_rows = mysql_num_rows($rs); //得到查詢結果的總行數 if($num_rows==0) // 烈火? liehuo.net 歡迎複製,拒絕惡意採集 liehuo.net { $exec="insert into student (user_name) values ($username)"; mysql_query("SET NAMES gb2312"); mysql_query($exec, $link); //若沒有此使用者則將資料插入到資料庫(註冊使用者) echo "使用者註冊成功!"; } else { echo "該使用者名稱已存在,請重新選擇使用者名稱!"; } ?> |
session到期法有非常重要的一點是一個session設定與提交成功與不成功時的一個session驗證了,這個有點像登入一樣的如果登入成功了我們要清除session這個原理也差不多。