php post 过滤,ThinkPHP技巧-POST过滤
下面文章介紹了如下幾個問題的解決方法僅供參考:
問題:
1. 表單 post 重復提交?
2.限制 post 模擬提交?
3.數據 add() 自增id出現奇數偶數?
1.如何解決表單 post 重復提交?
a.頁面提交后轉到另一個頁面而不是本頁面,舉個栗子,比如你的頁面地址為http://yourdomain.com/User/Index/login
則該頁面的表單action地址可以為另外的處理地址,如
這樣報錯返回,或者用戶點擊回退按鈕,還是會回到上一個地址
b.提交表單后提交按鈕變灰/隱藏提交按鈕
通過JS來動態監聽用戶的點擊動作,動態將按鈕屬性置成disabeld,即為灰色不可用。代碼如下:
JS:$().ready(function(){
$("#login_btn").on('click',function(){
$(this).attr('disabled',true);
});
});
c. 使用隱藏隨機TOKEN值的方法進行重復提交判斷
首先,在項目的functions.php中添加如下方法//創建TOKEN
functioncreateToken(){
$code = chr(
mt_rand(0xB0,0xF7)) .
chr(mt_rand(0xA1,0xFE)) .
chr(mt_rand(0xB0,0xF7)) .
chr(mt_rand(0xA1,0xFE)) .
chr(mt_rand(0xB0,0xF7)) .
chr(mt_rand(0xA1,0xFE)
);
session('TOKEN', authcode($code));
}
//判斷TOKEN
function checkToken($token){
if($token == session('TOKEN')) {
session('TOKEN',NULL);
returnTRUE;
}else{
returnFALSE;
}
}
/* 加密TOKEN */
functionauthcode($str){
$key ="YOURKEY";
$str = substr(md5($str),8,10);
returnmd5($key . $str);
}
在表單頁面form中填入以下HTML代碼
HTML:
在頁面展示前調用creatToken()方法生成token,在相應控制器POST請求中 使用 checkToken() 進行判斷是否重復提交if(IS_POST){
$post_token = I('post.TOKEN');
if(!checkToken($post_token)){
$this->error('請不要重復提交頁面',U('User/Index/login'));
}
}
基本上,就能解決ThinkPHP開發中表單重復提交問題,當然,有同學說可以使用ThinkPHP的令牌環機制,這樣其實就更簡單了,TP會默認在表單中生成一個隱藏域,到時候判斷這個隱藏域是否存在以及和session中的值是否想的即可,原理和方法3是一樣的。
2.如何限制表單post模擬提交?//如果是ajax 的post提交在控制器下方法內加入代碼:
if(IS_AJAX&&IS_POST){
// 同時需要判定post是否是頁面定義的post參數,非頁面定義的參數,提示請求參數溢出
......
}
//若果只是post提交在控制器下方法加入代碼:
if(IS_POST){
// 同時需要判定post是否是頁面定義的post參數,非頁面定義的參數,提示請求參數溢出
......
}
3.thinkphp調用add()方法時候自增id出現奇數偶數如何處理?#首先,查看mysql當前數據庫自增長的步長?
SHOW VARIABLES LIKE 'auto_inc%';
#然后,查看結果 auto_increment_increment 的值是否等于 1 ,如果是1代表以1遞增,如果是2代表以2遞增......
#最后設定每次增長步長
SET @auto_increment_increment=1;
#若想在表中的主鍵id以奇數出現,則設置為 SET @auto_increment_increment=奇數; 例如=3
#若想在表中的主鍵id以奇數出現,則設置為 SET @auto_increment_increment=偶數; 例如=2
#若想在表中的主鍵id以順序增長1出現,則設置為 SET @auto_increment_increment=1;
總結
以上是生活随笔為你收集整理的php post 过滤,ThinkPHP技巧-POST过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 访问php没反应,linu
- 下一篇: php start,php start