通過Form添加數據到數據庫里


創建數據

大多數情況下,CURD的Create操作通常會通過表單來提交數據,首先,我們在Home模塊的View/Form 目錄下面創建一個add.html 模板文件,內容為:

<FORM method="post" action="__URL__/insert"> 標題:<INPUT type="text" name="title"><br/> 內容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/> <INPUT type="submit" value="提交"> </FORM>

然后,我們還需要在Home模塊的Controller目錄下面創建一個FormController.class.php文件,暫時只需要定義FormController類,不需要添加任何操作方法,代碼如下:

<?php
namespace Home\Controller; use Think\Controller; class FormController extends Controller{ }

接下來,訪問
http://localhost/app/index.php/home/Form/add

就可以看到表單頁面了,我們並沒有在控制器里面定義add操作方法,但是很顯然,訪問是正常的。因為ThinkPHP在沒有找到對應操作方法的情況下,會檢查是否存在對應的模板文件,由於我們有對應的add模板文件,所以控制器就直接渲染該模板文件輸出了。所以說對於沒有任何實際邏輯的操作方法,我們只需要直接定義對應的模板文件就行了。

我們可以看到,在表單中定義了提交地址是到Form控制器的insert操作,為了處理表單提交數據,我們需要在FormController類中添加insert操作方法,如下:

<?php namespace Home\Controller; use Think\Controller; class FormController extends Controller{ public function insert(){ $Form = D('Form'); if($Form->create()) { $result = $Form->add(); if($result) { $this->success('數據添加成功!'); }else{ $this->error('數據添加錯誤!'); } }else{ $this->error($Form->getError()); } } }

如果你的主鍵是自增類型的話,add方法的返回值就是該主鍵的值。不是自增主鍵的話,返回值表示插入數據的個數。如果返回false則表示寫入出錯。

模型

為了方便測試,我們首先在數據庫中創建一個think_form表:

CREATE TABLE IF NOT EXISTS `think_form` ( `id` smallint(4) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` varchar(255) NOT NULL, `create_time` int(11) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

我們在insert操作方法中用了D函數,和M函數不同,D函數需要有對應的模型類,下面我們就來創建模型類。

模型類的定義規范是:

模型名+Model.class.php (模型名的定義采用駝峰法並且首字母大寫)

我們在Home模塊的Model目錄下面創建FormModel.class.php文件,添加代碼如下:

<?php namespace Home\Model; use Think\Model; class FormModel extends Model { // 定義自動驗證 protected $_validate = array( array('title','require','標題必須'), ); // 定義自動完成 protected $_auto = array( array('create_time','time',1,'function'), ); }

主要是用於表單的自動驗證和自動完成,具體用法我們會用另外的篇幅單獨講述,這里暫時先略過。我們只要了解的是,如果使用D函數實例化模型類,一般需要對應一個數據模型類,而且create方法會自動把表單提交的數據進行自動驗證和自動完成(如果有定義的話),如果自動驗證失敗,就可以通過模型的getError方法獲取驗證提示信息,如果驗證通過,就表示數據對象已經成功創建,但目前只是保存在內存中,直到我們調用add方法寫入數據到數據庫。這樣就完成了一個完整的Create操作,所以可以看到ThinkPHP在創建數據的過程中使用了兩步:

  • 第一步,create方法創建數據對象
  • 第二步,使用add方法把當前的數據對象寫入數據庫

當然,你完全可以跨過第一步,直接進行第二步,但是這樣的預處理有幾個優勢:

  1. 無論表單有多復雜,create方法都可以用一行代碼輕松創建數據對象;
  2. 在寫入數據之前,可以對數據進行驗證和補充;

其實create方法還有很多的功能操作,目的只有一個,確保寫入數據庫的數據安全和有效。

我們來驗證下表單提交的效果,當我們不輸入標題就直接提交表單的話,系統會給出標題必須這樣的提示信息。

2015-04-23/5538cfc446925

當我們順利提交表單后,會看到寫入數據表的數據中的create_time字段已經有值了,這就是通過模型的自動完成寫入的。

2015-04-23/5538cfe376ae6

 **********************************************************************************************************************************************************************

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM