就拿這個例子來說,這個 http://localhost/yb1/Home/curd/create 怎麼判斷是提交,還是在地址欄輸入的?
其實是這麼個意思:
我提交一次之後,就會到 http://localhost/yb1/Home/curd/create ,
http://localhost/yb1/Home/curd/create 中執行動作就執行了一次,
如果直接按F5重新整理,肯定會出錯,我就是想 按F5 的時候,知道是從 post 來的, 還是我直接從 這個頁面重新整理的..
回複內容:
就拿這個例子來說,這個 http://localhost/yb1/Home/curd/create 怎麼判斷是提交,還是在地址欄輸入的?
其實是這麼個意思:
我提交一次之後,就會到 http://localhost/yb1/Home/curd/create ,
http://localhost/yb1/Home/curd/create 中執行動作就執行了一次,
如果直接按F5重新整理,肯定會出錯,我就是想 按F5 的時候,知道是從 post 來的, 還是我直接從 這個頁面重新整理的..
通過referer來判斷;來源地址
覺得你可能是需要防止重複提交表單,可以加token實現。
在create這個頁面用$_SERVER['REQUEST_METHOD']來判斷,值為get說明是頁面重新整理來的,post說明是form提交的
可以在 POST 處理完成後,後端發起一個重新導向,重新導向到一個新的 URL 上,這樣使用者就沒有重新整理提交的機會了。
-- 完善一下
大概的虛擬碼可能是:
if ($_SERVER['REQUEST_METHOD'] != 'POST') { // 處理非 POST 的邏輯,如報錯頁面或渲染表單頁面等等 return;}// 處理使用者提交的 POST 請求// 如建立使用者、添加文章等等// 處理完畢,重新導向請求,可以是由 POST 請求新建立的頁面,如使用者中心、文章詳情等// 甚至可以是 POST 請求發起的來源頁面,此時可以考慮處理下使用者輸入回填,或者給個成功或失敗的提示資訊header('Location: /path/to/location');
你點擊表單提交的時候記錄一個標記 提交完成刪除標記可以判斷 還有就是post和get這種類型也是可以判斷的 地址欄提交是屬於get
可以讀一遍地址欄資料來監測,但是這個方法指標不治本,還是可以通過其他途徑偽造post或者get的method。
加入隱藏欄位可能可以
你應該是用tp吧,tp可以
if(IS_POST){ echo 1;}else { echo 0;}
如果你的表單提交方式為POST,那麼你再次按F5重新整理的時候,也是POST請求方式。
建議題主瞭解一下等冪請求。