thinkphp的create方法只是準備不新增嗎

2022-02-01 13:24:04 字數 4258 閱讀 3780

1樓:秋天di霜

$user = d('users') ;if($user->create()) else 這樣寫試試

thinkphp 自動校驗只對create方法有效嗎

2樓:龍氏風采

thinkphp 自動驗證與自動填充無效可能的原因

自動驗證與自動填充是在使用thinkphp時經常用到的功能,但偶爾會遇到自動驗證與自動填充無效的情況,本文就thinkphp 自動驗證與自動填充無效可能的原因做一些分析。

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)。

欄位未對應

由於粗心,未對應好表單欄位與資料表欄位。

資料表欄位做了更改

在開發過程中,更改了表欄位名稱,而快取未及時更新,導致系統判斷為無效欄位而被 unset 掉。所以在更改了表欄位名稱之後,及時將 runtime/data 下的資料表快取清除。

model 命名錯誤

model 命名錯誤,未嚴格按照規範命名,如頭字母未大寫或粗心導致字母順序不對,多或少字母等。這等錯誤往往會直接導致模型失效。

m 方法中使用自動驗證與自動完成

一般情況下,使用 m 方法例項化模型時,是無法例項化自定義模型類的,也就無法使用自動驗證與自動完成功能,因此建議使用 d 方法來例項化模型類。如果必須要在 m 方法中實現自動驗證或自動完成,參看《thinkphp 使用m方法(不建立模型類)時實現自動驗證與自動填充》。

thinkphp:create()方法有什麼用呢?

3樓:彤碧玉

建立資料物件,最大的作用是自動獲取表單資料並完成一系列的操作和過濾(通過自動驗證、自動完成、令牌驗證等等)。

建立好的資料物件可以用於寫入資料庫等操作

自動驗證例項:

在model類裡面定義$_validate屬性,是由多個驗證因子組成的二維陣列。

protected $_validate = array(

array('verify','require','驗證碼必須!'), //預設情況下用正則進行驗證

array('name','','帳號名稱已經存在!',0,'unique',1), // 在新增的時候驗證name欄位是否唯一

array('value',array(1,2,3),'值的範圍不正確!',2,'in'), // 當值不為空的時候判斷是否在一個範圍內

array('repassword','password','確認密碼不正確',0,'confirm'), // 驗證確認密碼是否和密碼一致

array('password','checkpwd','密碼格式不正確',0,'function'), // 自定義函式驗證密碼格式

);create方法建立資料物件的時候會自動進行資料驗證操作,**示例:

$user = d("user"); // 例項化user物件

if (!$user->create())else

4樓:only熙媛

create() 是建立資料表 add()是向表中新增資料

thinkphp 我用create方法add()新增資料時返回false 給if判斷返回false的時候竟然能新增到資料庫

5樓:殘草已凋落

$user = d('users') ;

if($user->create())  else

這樣寫試試

6樓:

create()的話敢放在前面麼?位置不對吧。

7樓:偉少love靜靜

你看看你的模板裡面欄位和資料庫裡面的欄位是一樣的嗎

8樓:

dump出來看sql語句就可以了

為什麼thinkphp的create方法無法接收從表單提交過來的資料

9樓:雪v歌

這個你可以用firbug看一下提交後發生什麼狀況,還有你處理表單用

$this->ajaxreturn 或者 json_encode沒有另外你把表單的submit改成button試下

10樓:從來不會不想

create()列印不出來。。。你想列印出什麼來,好久沒用tp了,但是我還是記得create是新增語句吧。。。你都沒有傳值進去,能列印出什麼東西進來呢。。。

或者現在的tp可以自動新增post資料到新增語句,那也列印不出來東西啊,新增語句返回值我記得應該是id吧,頂多也就是返回一個數字而已啊

11樓:

資料庫的表中是否dept表中是否有title、content這兩個欄位

12樓:冬天來親親

$data=$dept1->create();

echo $data ['title'];

echo $data ['content'];這麼寫

13樓:匿名使用者

method=「get」

14樓:童生大本營

if(!$dept->create($_post,1))//當然這裡的$_post 可以改成i()函式來獲取,過濾

thinkphp add方法 使用以後插入空資料 20

15樓:匿名使用者

如果你的資料庫各個欄位的值都沒設定非空,這樣的sql是可以執行的。

16樓:匿名使用者

資料庫表欄位會區分大小寫,將表欄位改為小寫,再刪除快取後,即可正常插入。

thinkphp 中 用create 方法後 怎麼列印不到表單資料?

17樓:來元彤

$user_new = new usermodel();

$data = $user_new->create();

1.先看看model下面是否存在usermodel類2.我估計問題是你的tpl下面的index.

html模版錯誤表單的name值要和資料庫的對應。另外是否呼叫了操作3. function index()

function add()

改成function index() 你重寫了add()方法給你個例子

// 首頁

public function index()// 處理表單資料

public function insert() else}else}

在使用thinkphp的add方法新增資料時,卻無法插入資料,嘗試過刪除runtime資料夾,但是都不行,

18樓:匿名使用者

有沒有物件化,資料物件有沒有建立,欄位值是否對應(表單和資料表)

求教一句入門oracle語句create table時候出現

你可以逐個欄位測試來排除問題所在。試試這樣 create table customer 41304652 customer id char 18 constraint cust pk 41304652 primary key,cust name varchar2 20 cust city varch...

thinkphp框架的session快取目錄在那裡?急需

這個路徑是可以在配置檔案裡設定的 thinkphp session儲存或讀取不了!5 直接用s 方法就可以快取了啊 刪除快取其實就是把runtime的資料夾給清空了 tp session 取值方法抄是不需要 session start 的 value session name 不懂的可以直接檢視手冊...

thinkphp的session字首怎樣使用啊

你只要在初始化session時將引數prefix傳入初始化就行了例如 session array name session id prefix think expire 3600 你就講字首設定成think了。如 session think name 123 在thinkphp公共類裡面怎麼設定se...