程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 經驗之談PHP表單重復提交問題解決方案

經驗之談PHP表單重復提交問題解決方案

編輯:關於PHP編程

PHP經過長時間的發展,很多用戶都很了解PHP了,這裡我發表一下個人理解,和大家討論討論。我們在做網站時,常常為一些灌水文章而煩惱。有時,由於網絡狀況等原因用戶不知道提交是否成功,也會再次提交同一份表單,這就造成了PHP表單的重復提交不起。

有一個簡單的方法可以避免同一表單的重復提交。首先,先定義一個session變量用來保存一個PHP表單的提交序列號。這裡我定義為“$userLastAction”。然後在表單裡加入一個hidden 變量,把值設為

  1. $userLastAction+1:  
  2. <input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>  

最後,在處理提交之前判斷PHP表單是否已被提交過。

  1. if($lastAction>$userLastAction){  
  2. $userLastAction++; // 序列號加1  
  3. // 處理表單數據  
  4. }  
  5. ?> 

這個技巧的主要原理是不允許用戶回退後再次提交,也就是說回退後修改再提交也是不允許的,但是還是不能避免Ctrl-C/Ctrl-V的灌水辦法。下載文件的下載次數回填:我們在下載軟件時,經常會看到此軟件的下載統計次數,而這些統計數給網站管理員分析軟件的受歡迎程度帶來了方便。其實現原理是:在後端數據庫中存放軟件的唯一標識和下載數,在用戶下載軟件時,首先更新對應軟件的下載次數即下載次數加1,然後再到下載文件上正式開始下載。請看下面的實現代碼:

先建一數據表download (後端用MySql)

  1. download表中含有下列兩個字段:  
  2. id下載的文件的唯一標識  
  3. downnum 下載次數,默認值為0 

實現

假設已經從數據庫取出:描述文件名 五筆字型 ;下載文件名:wbzx.zip ;標識號id值為2處理後生成的超級鏈接代碼為:

  1. <a href="download.php?filename=wbzx.zip&id=2">五筆字型</a> 

下面的代碼download.php處理下載次數累計及根據傳遞的文件名定位下載文件。

  1. //連接Mysql數據庫代碼略  
  2. $res=mysql_query("update download set downnum=(downnum+1) where id='$id'" ,$db);  
  3. header("location:$filename");  
  4. ?> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved