程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> thinkphp自動驗證與自動填充無效的解決辦法

thinkphp自動驗證與自動填充無效的解決辦法

編輯:關於PHP編程

自動驗證與自動填充是在使用thinkphp時經常用到的功能,但偶爾會碰到到自動驗證與自動填充不起作用的情況,本文就thinkphp 自動驗證與自動填充無效可能的原因做一些分析並提出相應的解決辦法。

(1)create() 方法有問題

ThinkPHP 自動驗證與自動填充是在創建數據對象 create() 時實現的,因此自動驗證與自動填充無效很大程度上與 create() 有關。

create 方法語法如下:

create(mixed data, string type)

data 表示接受的數據,type 表示本次的具體操作(寫入還是更新數據)。兩個參數都可省略,data 參數省略的情況下默認為接受 $_POST 數據,而 type 默認情況下由系統自動識別。

但系統自動識別 type 是有缺陷的,當傳入的字段有主鍵字段時,系統就識別為更新操作,否則就是寫入操作。所以當主鍵字段非自動增長而是需要 SQL 寫入時,那麼自動驗證和自動填充都可能無效。

例如添加數據記錄時,如果表單中有主鍵字段或者系統中產生了主鍵字段(如錄入設備編號),那麼 ThinkPHP 就認為本次操作為更新操作,對於例如下面設定的自動驗證和填充都會略過:

protected $_validate = array(

// 新增時驗證標題唯一

array('title','','標題已經存在!',0,'unique',1),

};

// 自動填充

protected $_auto = array(

// 新增時填充時間戳

array('pubtime','time',1,'function'),

);

盡管在操作中,執行了 add() 操作將數據寫入了數據表,但這時會發現自動驗證與自動填充無效。

出現這種情況時,只需將操作類型顯式的傳入 create() 方法即可,即 create($_POST,1),告訴系統本次操作為寫入數據。另外如果傳入的數據不是 $_POST ,也要將數據當作參數傳入,如 create($_GET)。

(2)數據字段未對應

由於粗心,未對應好表單字段與數據表字段。

(3)數據表字段做了更改

在開發過程中,更改了表字段名稱,而緩存未及時更新,導致系統判斷為無效字段而被 unset 掉。所以在更改了表字段名稱之後,及時將 Runtime/Data 下的數據表緩存清除。

(4)Model 命名錯誤

Model 命名錯誤,未嚴格按照規范命名,如頭字母未大寫或粗心導致字母順序不對,多或少字母等。這等錯誤往往會直接導致模型失效,大小寫這邊特別需要注意。

(5)數據表無自增的id

就是數據表中沒有自增的id時,驗證時就會找不到需要驗證的數據,所以會失敗。

以上就是ThinkPHP自動驗證與自動填充無效可能出現的幾種原因,當出現問題時要一條一條的進行排除,相信自己一定可以找到錯誤的,當然還有一些未知的錯誤,如果您發現了另外的一種原因,請在下方留言指正。

您可能感興趣的文章

  • 如何設置phpmyadmin自動登陸和取消自動登錄
  • php利用filter函數驗證郵箱、url和ip地址的方法
  • PHP 驗證身份證號是否正確的函數
  • js,php正則驗證是否為數字與字母的混合(6-15位)
  • 使用ThinkPHP必須掌握的調試方法
  • thinkphp頁面跳轉(successerror)如何設置跳轉等待時間
  • php提取身份證號碼中的生日日期以及驗證是否為未成年人的函數
  • ThinkPHP中execute和query方法的區別

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