亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
歡迎 目錄 快速參考圖 基本信息 服務(wù)器要求 許可協(xié)議 變更記錄 關(guān)于CodeIgniter 安裝 下載 CodeIgniter 安裝指導(dǎo) 從老版本升級 疑難解答 介紹 開始 CodeIgniter 是什么? CodeIgniter 速記表 支持特性 應(yīng)用程序流程圖 模型-視圖-控制器 架構(gòu)目標(biāo) 教程 內(nèi)容提要 加載靜態(tài)內(nèi)容 創(chuàng)建新聞條目 讀取新聞條目 結(jié)束語 常規(guī)主題 CodeIgniter URL 控制器 保留字 視圖 模型 輔助函數(shù) 使用 CodeIgniter 類庫 創(chuàng)建你自己的類庫 使用 CodeIgniter 適配器 創(chuàng)建適配器 創(chuàng)建核心系統(tǒng)類 鉤子 - 擴(kuò)展框架的核心 自動裝載資源 公共函數(shù) URI 路由 錯誤處理 緩存 調(diào)試應(yīng)用程序 以CLI方式運(yùn)行 管理應(yīng)用程序 處理多環(huán)境 PHP替代語法 安全 開發(fā)規(guī)范 類庫參考 基準(zhǔn)測試類 日歷類 購物車類 配置類 Email 類 加密類 文件上傳類 表單驗(yàn)證詳解 FTP 類 圖像處理類 輸入類 Javascript 類 語言類 裝載類 遷移類 輸出類 分頁類 模板解析器類 安全類 Session 類 HTML 表格類 引用通告類 排版類 單元測試類 URI 類 User-Agent 類 表單驗(yàn)證 XML-RPC 和 XML-RPC 服務(wù)器 Zip 編碼類 緩存適配器 適配器參考 適配器 數(shù)據(jù)庫類 Active Record 類 數(shù)據(jù)庫緩存類 自定義函數(shù)調(diào)用 數(shù)據(jù)庫配置 連接你的數(shù)據(jù)庫 數(shù)據(jù)庫快速入門例子代碼 字段數(shù)據(jù) 數(shù)據(jù)庫維護(hù)類 查詢輔助函數(shù) 數(shù)據(jù)庫類 查詢 生成查詢記錄集 表數(shù)據(jù) 事務(wù) 數(shù)據(jù)庫工具類 JavaScript類 輔助函數(shù)參考 數(shù)組輔助函數(shù) CAPTCHA 輔助函數(shù) Cookie Helper 日期輔助函數(shù) 目錄輔助函數(shù) 下載輔助函數(shù) Email 輔助函數(shù) 文件輔助函數(shù) 表單輔助函數(shù) HTML輔助函數(shù) Inflector 輔助函數(shù) 語言輔助函數(shù) 數(shù)字輔助函數(shù) 路徑輔助函數(shù) 安全輔助函數(shù) 表情輔助函數(shù) 字符串輔助函數(shù) 文本輔助函數(shù) 排版輔助函數(shù) URL 輔助函數(shù) XML 輔助函數(shù)
watak

CodeIgniter 用戶指南 版本 2.1.0

編輯文檔、查看近期更改請 登錄 或 注冊  找回密碼
查看原文

表單驗(yàn)證詳解

CodeIgniter 提供了一個(gè)全面的表單驗(yàn)證和數(shù)據(jù)預(yù)處理類以幫助縮減你所寫的代碼。

  • 概述
  • 表單驗(yàn)證指南
    • 表單
    • 成功頁面
    • 控制器
    • 設(shè)置驗(yàn)證規(guī)則
    • 使用一個(gè)數(shù)組設(shè)置驗(yàn)證規(guī)則
    • 級聯(lián)規(guī)則(Cascading Rules)
    • 預(yù)處理數(shù)據(jù)(Prepping Data)
    • 重新填充表單(Re-populating the Form)
    • 回調(diào)
    • 設(shè)置錯誤信息
    • 更改錯誤定界符
    • 翻譯表單域名字
    • 獨(dú)立顯示錯誤
    • 將一系列驗(yàn)證規(guī)則保存到一個(gè)配置文件
    • 使用數(shù)組作為表單域名字
  • 規(guī)則參考
  • 預(yù)處理參考
  • 函數(shù)參考
  • 輔助函數(shù)參考

?

概述

在解釋 CodeIgniter 的數(shù)據(jù)驗(yàn)證處理之前,讓我們先描述一下一般的情況:

  1. 一個(gè)表單顯示了。
  2. 你填寫并提交了它。
  3. 如果你提交了一些無效的信息,或者可能漏掉了一個(gè)必填項(xiàng),表單將會連同你的數(shù)據(jù)和錯誤問題的描述信息重新顯示。
  4. 這個(gè)過程將繼續(xù),直到你提交了一個(gè)有效的表單。

在接收端,腳本必須:

  1. 檢查必須的數(shù)據(jù)。
  2. 驗(yàn)證數(shù)據(jù)是否為正確的類型,合適的標(biāo)準(zhǔn)。例如,如果一個(gè)用戶名被提交,它必須被驗(yàn)證是否只包含了允許的字符。它必須有一個(gè)最小長度,不能超過最大長度。用戶名不能是已存在的他人用戶名,或者甚至是一個(gè)保留字等。
  3. 清理數(shù)據(jù)使其安全。
  4. 如果需要,預(yù)格式化數(shù)據(jù)(數(shù)據(jù)需要清除空白嗎?經(jīng)過 HTML 編碼?等。)
  5. 準(zhǔn)備數(shù)據(jù),插入數(shù)據(jù)庫。

盡管上面的過程并不是很復(fù)雜,但是通常需要編寫很多代碼,而且為了顯示錯誤信息,在網(wǎng)頁中經(jīng)常要使用多種不同的控制結(jié)構(gòu)。創(chuàng)建表單驗(yàn)證雖簡單,實(shí)施起來卻也枯燥無味。

?

表單驗(yàn)證指南

下面是如何實(shí)施CodeIgniter表單驗(yàn)證的一個(gè)簡易教程

為了進(jìn)行表單驗(yàn)證,你需要這三樣?xùn)|西:

  1. 一個(gè)包含表單的 視圖 文件。
  2. 一個(gè)包含“成功”信息的視圖文件,在成功提交后將被顯示。
  3. 一個(gè)接收并處理所提交數(shù)據(jù)的 控制器 函數(shù)。

讓我們以一個(gè)會員注冊表單為例來創(chuàng)建這三個(gè)玩意。

表單

使用一個(gè)文本編輯器,創(chuàng)建一個(gè)名叫 myform.php 的表單。在它里面放上這些代碼并把它保存到你的 applications/views/ 文件夾中:

成功頁面

使用一個(gè)文本編輯器,創(chuàng)建一個(gè)名叫 formsuccess.php 的表單。在它里面放上這些代碼并保存到你的 applications/views/ 文件夾:

控制器

使用一個(gè)文本編輯器,創(chuàng)建一個(gè)名叫 form.php 的控制器。在它里面,放上這些代碼并保存到你的 applications/controllers/ 文件夾:

Try it!

要測試你的表單,請使用類似這樣的URL訪問你的網(wǎng)站:

example.com/index.php/form/

如果你提交表單你只會看到表單重新加載了。這是因?yàn)槟氵€沒有設(shè)置驗(yàn)證規(guī)則。

由于你還沒有告訴表單驗(yàn)證類驗(yàn)證什么東西。它只是默認(rèn)的返回了 FALSE (boolean false) 。 run() 方法只在全部成功匹配了你的規(guī)則才會返回 TRUE 。

解析

你會注意到在此頁上面的幾點(diǎn):

表單 (myform.php) 是一個(gè)標(biāo)準(zhǔn)的Web表單,除了以下兩點(diǎn):

  1. 它使用一個(gè) 表單輔助函數(shù) 創(chuàng)建表單開始。 技術(shù)上,這并非必要。你可以使用標(biāo)準(zhǔn)的HTMl來創(chuàng)建,然而,使用輔助函數(shù)的好處是它為你生成了基于你配置文件中的URL的 action URL。這使得你的應(yīng)用在更改URL時(shí)更具移植性。
  2. 在表單的頂端你將注意到如下函數(shù)調(diào)用: <?php echo validation_errors(); ?>

    這個(gè)函數(shù)將會返回驗(yàn)證器送回的所有錯誤信息。如果沒有錯誤信息,它將返回空字符串。

控制器 (form.php) 有一個(gè)方法: index()。這個(gè)方法初始化驗(yàn)證類并加載你視圖中用到的 表單輔助函數(shù)URL 輔助函數(shù) 它也會 運(yùn)行 驗(yàn)證程序。基于驗(yàn)證是否成功,它會重現(xiàn)表單或顯示成功頁面。

設(shè)置驗(yàn)證規(guī)則

CodeIgniter允許你為單個(gè)表單域創(chuàng)建多個(gè)驗(yàn)證規(guī)則,按順序?qū)盈B在一起,你甚至可以同時(shí)預(yù)先處理表單域數(shù)據(jù)。要設(shè)置驗(yàn)證規(guī)則請使用set_rules() 函數(shù):

$this->form_validation->set_rules();

上面的函數(shù)使用 三個(gè) 參數(shù)作為輸入:

  1. 表單域的名字 - 就是你給表單域取的那個(gè)名字。
  2. 一個(gè)此表單域的 "人性化" 名字,它將被插入到錯誤信息中。例如,如果你有一個(gè)表單域叫做“user”你可能給它一個(gè)人性化名字叫做“用戶名”。 注意: 如果你想讓表單域的名字保存在一個(gè)語言文件里,請參考 翻譯表單域名字.
  3. 為此表單域設(shè)置的驗(yàn)證規(guī)則。


這兒有一個(gè)示例。在你的 控制器 (form.php) 中緊接著驗(yàn)證初始化函數(shù)之后,添加這段代碼:

$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');

你的控制器現(xiàn)在看起來像這樣:

現(xiàn)在留空表單域提交表單你會看到錯誤信息。 如果你填充所有的表單域提交表單你會看到成功頁。

注意: 出現(xiàn)錯誤時(shí)表單域并沒有被使用數(shù)據(jù)重新填充。稍后我們?nèi)ジ氵@個(gè)。

使用一個(gè)數(shù)組設(shè)置驗(yàn)證規(guī)則

繼續(xù)之前請注意,如果你更喜歡通過一個(gè)操作設(shè)置所有規(guī)則的話,向規(guī)則設(shè)定函數(shù)傳遞的可以是一個(gè)數(shù)組。 如果你想用這個(gè)方式,你必須這樣命名你的數(shù)組鍵:

$config = array(
???????????????array(
?????????????????????'field'???=> 'username',
?????????????????????'label'???=> 'Username',
?????????????????????'rules'???=> 'required'
??????????????????),
???????????????array(
?????????????????????'field'???=> 'password',
?????????????????????'label'???=> 'Password',
?????????????????????'rules'???=> 'required'
??????????????????),
???????????????array(
?????????????????????'field'???=> 'passconf',
?????????????????????'label'???=> 'Password Confirmation',
?????????????????????'rules'???=> 'required'
??????????????????),???
???????????????array(
?????????????????????'field'???=> 'email',
?????????????????????'label'???=> 'Email',
?????????????????????'rules'???=> 'required'
??????????????????)
????????????);

$this->form_validation->set_rules($config);

級聯(lián)規(guī)則(Cascading Rules)

CodeIgniter 允許你將多個(gè)規(guī)則連接在一起。讓我們試一試。修改規(guī)則設(shè)置函數(shù)中的第三個(gè)參數(shù),如下:

$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|is_unique[users.username]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

上面的代碼設(shè)置了一組規(guī)則:

  1. 用戶名表單域長度不得小于5個(gè)字符以及大于12個(gè)字符。
  2. 密碼表單域必須跟密碼確認(rèn)表單域的數(shù)據(jù)一致。
  3. 電子郵件表單域必須是一個(gè)有效郵件地址。

馬上試試看!提交不合法的數(shù)據(jù)后你會看到新的錯誤信息跟你設(shè)置的新規(guī)則相符。在驗(yàn)證參考頁中你可以閱讀到更多規(guī)則。

預(yù)處理數(shù)據(jù)

作為上面使用的驗(yàn)證函數(shù)的附加,你也可以以多種方式預(yù)處理你的數(shù)據(jù)。 例如,你可以設(shè)置像這樣的規(guī)則:

$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'trim|required|matches[passconf]|md5');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');

在上面的例子里,我們“修整(trimming,去掉字符串兩端空白)”了數(shù)據(jù),轉(zhuǎn)換密碼為MD5,將用戶名通過“xss_clean”函數(shù)處理去掉了有害數(shù)據(jù)。

任何PHP自身接收一個(gè)參數(shù)的函數(shù)都可以被用作一個(gè)規(guī)則,比如 htmlspecialchars, trim, MD5, 等。

注意: 你一般會在驗(yàn)證規(guī)則之后使用這些預(yù)處理功能,這樣如果發(fā)生錯誤,原數(shù)據(jù)將會被顯示在表單。

重新填充表單(Re-populating the form)

目前為止我們只處理了錯誤。是使用提交的數(shù)據(jù)重填表單的時(shí)候了。CodeIgniter 為此提供了幾個(gè)輔助函數(shù)。你最常用到的一個(gè)是:

set_value('field name')

打開 myform.php 視圖文件并使用 set_value() 函數(shù)更新每個(gè)表單域的

不要忘記在set_value()函數(shù)中包含每個(gè)表單域的名字!

現(xiàn)在刷新你的頁面并提交表單產(chǎn)生一個(gè)錯誤。你的表單域應(yīng)該被重新填寫了。

注意: 下面的 函數(shù)參考 節(jié)包含了可以讓你重填下拉菜單,單選框和復(fù)選框的函數(shù)

重要提示: 如果你使用一個(gè)數(shù)組作為一個(gè)表單域的名字,你必須為函數(shù)提供給它一個(gè)數(shù)組。例如:

<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />

更多信息請參考下面的 使用數(shù)組作為表單域名字 一節(jié)。

回調(diào): 你自己的驗(yàn)證函數(shù)

驗(yàn)證系統(tǒng)提供了向你自己驗(yàn)證函數(shù)的回調(diào)。這是你可以擴(kuò)展驗(yàn)證類以適應(yīng)你的需求。例如,如果你需要執(zhí)行一個(gè)數(shù)據(jù)庫查詢來檢查用戶是否選擇了一個(gè)唯一的用戶名,你可以創(chuàng)建一個(gè)回調(diào)函數(shù)做這個(gè)。咱們建個(gè)例子。

在你的控制器中,修改“username”為:

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

然后在你的控制器中添加一個(gè)新的函數(shù)名叫 username_check 。你的控制器現(xiàn)在看起來是這樣:

重新載入表單并以“test”作為用戶名提交數(shù)據(jù),你會看到表單域數(shù)據(jù)傳遞到回調(diào)函數(shù)中供你處理。

要調(diào)用一個(gè)回調(diào)函數(shù)只需把函數(shù)名加一個(gè)"callback_"前綴并放在驗(yàn)證規(guī)則里。如果你需要在你的回調(diào)函數(shù)中調(diào)用一個(gè)額外的參數(shù),你只需要在回調(diào)函數(shù)后面用[]把參數(shù)括起來, 例如: "callback_foo[bar]", 其中bar將成為你的回調(diào)函數(shù)中的第二個(gè)參數(shù).【譯者注:第一個(gè)參數(shù)是input的value值】

注意:你也可以處理并返回傳遞給你的回調(diào)函數(shù)中的表單數(shù)據(jù)。如果你的回調(diào)函數(shù)返回了除布爾型的TRUE/FALSE外的任何值,它將被假定數(shù)據(jù)是你新處理過的表單數(shù)據(jù)。

設(shè)置錯誤信息

所有自身的錯誤信息位于下面的語言文件中:language/english/form_validation_lang.php

要設(shè)置你的自定義信息你可以編輯那個(gè)文件,或使用下面的函數(shù):

$this->form_validation->set_message('rule', 'Error Message');

其中 rule 是該條定義規(guī)則的名稱,Error Message 該規(guī)則會顯示的錯誤文本。

如果你在錯誤信息中包含了 %s,它將插入顯示出你在表單域中設(shè)置的別名。

In the "callback" example above, the error message was set by passing the name of the function:

在上面回調(diào)的例子中,, 錯誤信息是通過傳送函數(shù)名稱返回的:

$this->form_validation->set_message('username_check')

You can also override any error message found in the language file. For example, to change the message for the "required" rule you will do this:

你也可以重寫語言文件中的錯誤信息. 例如, 你可以這么做來改變"required" 規(guī)則的信息:

$this->form_validation->set_message('required', 'Your custom message here');

翻譯表單域名稱

如果你希望將傳遞給 set_rules() 函數(shù)的自然語言參數(shù)存儲在一個(gè)語言文件中——使他們有一個(gè)或多個(gè)翻譯版本,你可以這么做:

首先,給當(dāng)前表單域自定義一個(gè)key值(通常就是表單標(biāo)簽的name),然后添加上lang:前綴,如下:

$this->form_validation->set_rules('first_name', 'lang:first_name', 'required');

然后,以如下語言數(shù)組(數(shù)組的key值不必包含lang前綴)的形式保存在你的語言文件中:

$lang['first_name'] = 'First Name';

注意: 開發(fā)者自定義的語言文件數(shù)組(如上例)不會自動被CI加載,你需要在控制器中手動加載:

$this->lang->load('file_name');

關(guān)于語言文件的具體設(shè)置和加載請參考 語言類 說明。

更改錯誤定界符

在默認(rèn)情況下,表單驗(yàn)證類會使用 (<p>) 標(biāo)簽來分割每條錯誤信息,以達(dá)到分段效果。你可以自行對其進(jìn)行定義。

  1. 定界符統(tǒng)一更改

    如果需要全局更改錯誤定界符, 可以在你的控制器中,在表單驗(yàn)證類加載之后添加如下代碼:

    $this->form_validation->set_error_delimiters('<div class="error">', '</div>');

    在此例中,我們將定界符由系統(tǒng)默認(rèn)的 <p> 更改為一個(gè)div標(biāo)簽。

  2. 定界符單獨(dú)更改

    表單驗(yàn)證類所提供的兩種顯示錯誤驗(yàn)證信息的函數(shù),分別可以通過如下方法來設(shè)置它們的定界符:

    <?php echo form_error('field name', '<div class="error">', '</div>'); ?>

    或者:

    <?php echo validation_errors('<div class="error">', '</div>'); ?>

獨(dú)立顯示錯誤

如果你喜歡緊挨著每個(gè)表單域顯示錯誤信息而不是顯示為一個(gè)列表,你可以使用 form_error() 函數(shù)。

試一下!更改你的表單代碼為下面這樣:

如果沒有錯誤信息,將不會顯示。如有錯誤信息,會在輸入框旁單獨(dú)顯示。

注意: 如果你的表單域名稱使用的是數(shù)組形式,你必須提供該完整的數(shù)組函數(shù)。 例如:

<?php echo form_error('options[size]'); ?>
<input type="text" name="options[size]" value="<?php echo set_value("options[size]"); ?>" size="50" />

如要了解更多,請參閱 使用數(shù)組作為表單字段名稱 。

?

將一系列驗(yàn)證規(guī)則保存到一個(gè)配置文件

表單驗(yàn)證類的一個(gè)超拽的特性是它允許你將整個(gè)應(yīng)用的所有驗(yàn)證規(guī)則存儲到一個(gè)配置文件中。你可以組織這些規(guī)則到“組”里。這些組既可以在符合controller/function的調(diào)用時(shí)自動加載,也可以在用到時(shí)你手動調(diào)用。

怎樣保存你的規(guī)則

如果想要將驗(yàn)證規(guī)則保存在獨(dú)立的文件中,你首先需要在 application/config/ 文件夾下創(chuàng)建一個(gè)名稱為 form_validation.php的文件。 然后,將驗(yàn)證規(guī)則的配置信息保存在數(shù)組 $config 中即可,具體格式如下:

$config = array(
???????????????array(
?????????????????????'field'???=> 'username',
?????????????????????'label'???=> 'Username',
?????????????????????'rules'???=> 'required'
??????????????????),
???????????????array(
?????????????????????'field'???=> 'password',
?????????????????????'label'???=> 'Password',
?????????????????????'rules'???=> 'required'
??????????????????),
???????????????array(
?????????????????????'field'???=> 'passconf',
?????????????????????'label'???=> 'Password Confirmation',
?????????????????????'rules'???=> 'required'
??????????????????),???
???????????????array(
?????????????????????'field'???=> 'email',
?????????????????????'label'???=> 'Email',
?????????????????????'rules'???=> 'required'
??????????????????)
????????????);

當(dāng)用戶觸發(fā) run() 函數(shù)時(shí),你的驗(yàn)證規(guī)則會自動被控制器加載和調(diào)用。

注意:請務(wù)必要將數(shù)組名稱定義成 $config.

創(chuàng)建多組驗(yàn)證規(guī)則

為了創(chuàng)建多組驗(yàn)證規(guī)則,我們需要將它們放置到子數(shù)組中。請參考下面的例子,在此例中我們設(shè)置了兩組規(guī)則,組名稱分別是 "signup" 和 "email"。 當(dāng)然,在實(shí)際開發(fā)中,你可以根據(jù)自己的需求任意命名:

$config = array(
?????????????????'signup' => array(
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'username',
????????????????????????????????????????????'label' => 'Username',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'password',
????????????????????????????????????????????'label' => 'Password',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'passconf',
????????????????????????????????????????????'label' => 'PasswordConfirmation',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'email',
????????????????????????????????????????????'label' => 'Email',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????)
????????????????????????????????????),
?????????????????'email' => array(
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'emailaddress',
????????????????????????????????????????????'label' => 'EmailAddress',
????????????????????????????????????????????'rules' => 'required|valid_email'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'name',
????????????????????????????????????????????'label' => 'Name',
????????????????????????????????????????????'rules' => 'required|alpha'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'title',
????????????????????????????????????????????'label' => 'Title',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'message',
????????????????????????????????????????????'label' => 'MessageBody',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????)
????????????????????????????????????)??????????????????????????
???????????????);

調(diào)用某組驗(yàn)證規(guī)則

當(dāng)同時(shí)存在多組規(guī)則時(shí),為了調(diào)用某一組規(guī)則,你需要將組的名字傳遞給 run() 函數(shù)。 比如, 要調(diào)用上例中"signup"組下面的規(guī)則,你應(yīng)該這么做:

if ($this->form_validation->run('signup') == FALSE)
{
???$this->load->view('myform');
}
else
{
???$this->load->view('formsuccess');
}

將控制器和驗(yàn)證組關(guān)聯(lián)在一起

調(diào)用某一特定驗(yàn)證規(guī)則組的另一方法(更自動化):將規(guī)則組的名稱定義為你要關(guān)聯(lián)的控制器類/函數(shù)(class/function)名稱。舉例來說,假設(shè)你有一個(gè)控制器名稱叫做 Member,它下面有個(gè)函數(shù)叫做 signup。那么,你的控制器可能會這么寫:

<?php

class Member extends CI_Controller {

???function signup()
???{??????
??????$this->load->library('form_validation');
????????????
??????if ($this->form_validation->run() == FALSE)
??????{
?????????$this->load->view('myform');
??????}
??????else
??????{
?????????$this->load->view('formsuccess');
??????}
???}
}
?>

在你的驗(yàn)證配置文件中,你需要將你的規(guī)則組命名為member/signup,形如:

$config = array(
???????????'member/signup' => array(
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'username',
????????????????????????????????????????????'label' => 'Username',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'password',
????????????????????????????????????????????'label' => 'Password',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'passconf',
????????????????????????????????????????????'label' => 'PasswordConfirmation',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????),
????????????????????????????????????array(
????????????????????????????????????????????'field' => 'email',
????????????????????????????????????????????'label' => 'Email',
????????????????????????????????????????????'rules' => 'required'
?????????????????????????????????????????)
????????????????????????????????????)
???????????????);

當(dāng)驗(yàn)證規(guī)則組的名稱符合”控制器類名稱/函數(shù)名稱“(class/function)條件時(shí),那么在 run() 函數(shù)被執(zhí)行時(shí),它所對應(yīng)的規(guī)則會自動被調(diào)用。

?

使用數(shù)組作為表單字段名稱

表單驗(yàn)證類支持表單字段的名稱為數(shù)組,比如:

<input type="text" name="options[]" value="" size="50" />

如果你將表單字段名稱定義為數(shù)組,那么在使用 Helper函數(shù)時(shí),你必須傳遞給他們與字段名稱一樣的數(shù)組名。對應(yīng)此表單字段的驗(yàn)證規(guī)則也同樣遵循此規(guī)則。

比如,在設(shè)置此類表單字段時(shí),你可能會用到:

$this->form_validation->set_rules('options[]', 'Options', 'required');

或者,在顯示此類表單字段的驗(yàn)證錯誤信息時(shí),你需要使用:

<?php echo form_error('options[]'); ?>

同樣的,在預(yù)填充此字段的值時(shí)使用:

<input type="text" name="options[]" value="<?php echo set_value('options[]'); ?>" size="50" />

你還可以使用多維數(shù)組作為表單字段的名稱,比如

<input type="text" name="options[size]" value="" size="50" />

甚至使用:

<input type="text" name="sports[nba][basketball]" value="" size="50" />

和上個(gè)例子一樣,在helper函數(shù)中,你必須使用同樣的名稱:

<?php echo form_error('sports[nba][basketball]'); ?>

如果你選擇使用那些支持多個(gè)選項(xiàng)的表單字段,比如checkbox,別忘了在名稱之后加上空的方括號。只有這樣,當(dāng)用戶提交表單時(shí),所有的選項(xiàng)值就會被添加到 POST 數(shù)組當(dāng)中:

<input type="checkbox" name="options[]" value="red" />
<input type="checkbox" name="options[]" value="blue" />
<input type="checkbox" name="options[]" value="green" />

或者你使用的時(shí)多維數(shù)組:

<input type="checkbox" name="options[color][]" value="red" />
<input type="checkbox" name="options[color][]" value="blue" />
<input type="checkbox" name="options[color][]" value="green" />

當(dāng)你使用helper函數(shù)時(shí),也同樣需要添加方括號:

<?php echo form_error('options[color][]'); ?>

?

規(guī)則參數(shù)列表

以下列表將列出可被使用的原生規(guī)則

規(guī)則 參數(shù) 描述 舉例
required No 如果元素為空,則返回FALSE ?
matches Yes 如果表單元素的值與參數(shù)中對應(yīng)的表單字段的值不相等,則返回FALSE matches[form_item]
is_unique Yes Returns FALSE if the form element is not unique to the table and field name in the parameter. is_unique[table.field]
min_length Yes 如果表單元素值的字符長度少于參數(shù)中定義的數(shù)字,則返回FALSE min_length[6]
max_length Yes 如果表單元素值的字符長度大于參數(shù)中定義的數(shù)字,則返回FALSE max_length[12]
exact_length Yes 如果表單元素值的字符長度與參數(shù)中定義的數(shù)字不符,則返回FALSE exact_length[8]
greater_than Yes Returns FALSE if the form element is less than the parameter value or not numeric. greater_than[8]
less_than Yes Returns FALSE if the form element is greater than the parameter value or not numeric. less_than[8]
alpha No 如果表單元素值中包含除字母以外的其他字符,則返回FALSE ?
alpha_numeric No 如果表單元素值中包含除字母和數(shù)字以外的其他字符,則返回FALSE ?
alpha_dash No 如果表單元素值中包含除字母/數(shù)字/下劃線/破折號以外的其他字符,則返回FALSE ?
numeric No 如果表單元素值中包含除數(shù)字以外的字符,則返回 FALSE ?
integer No 如果表單元素中包含除整數(shù)以外的字符,則返回FALSE ?
decimal Yes Returns FALSE if the form element is not exactly the parameter value. ?
is_natural No 如果表單元素值中包含了非自然數(shù)的其他數(shù)值 (其他數(shù)值不包括零),則返回FALSE。自然數(shù)形如:0,1,2,3....等等。 ?
is_natural_no_zero No 如果表單元素值包含了非自然數(shù)的其他數(shù)值 (其他數(shù)值包括零),則返回FALSE。非零的自然數(shù):1,2,3.....等等。 ?
valid_email No 如果表單元素值包含不合法的email地址,則返回FALSE ?
valid_emails No 如果表單元素值中任何一個(gè)值包含不合法的email地址(地址之間用英文逗號分割),則返回FALSE。 ?
valid_ip No 如果表單元素的值不是一個(gè)合法的IP地址,則返回FALSE。 ?
valid_base64 No 如果表單元素的值包含除了base64 編碼字符之外的其他字符,則返回FALSE。 ?

注意: 這些規(guī)則也可以作為獨(dú)立的函數(shù). 例如:

$this->form_validation->required($string);

注意: 你也可以用適合參數(shù)的本地PHP系統(tǒng)函數(shù).

?

過濾函數(shù)

下面是可用的過濾函數(shù):

名稱 參數(shù) 功能描述
xss_clean No 通過 XSS 過濾函數(shù)來運(yùn)行數(shù)據(jù), 詳細(xì)說明見 Input 類.
prep_for_form No 將特殊字符的轉(zhuǎn)換,以便可以在表單域中顯示 HTML 數(shù)據(jù),而不會破壞它。.
prep_url No 當(dāng)URL丟失"http://" 時(shí),添加"http://".
strip_image_tags No Strips the HTML from image tags leaving the raw URL.
encode_php_tags No Converts PHP tags to entities.

Note: You can also use any native PHP functions that permit one parameter, like trim, htmlspecialchars, urldecode, etc.

?

函數(shù)(方法)參考

下面的這些方法是讓你在控制器里使用的。

$this->form_validation->set_rules();

允許您設(shè)置驗(yàn)證規(guī)則,如在本教程上面的章節(jié)中描述的:

  • 設(shè)置驗(yàn)證規(guī)則
  • 將一系列驗(yàn)證規(guī)則保存到一個(gè)配置文件

$this->form_validation->run();

運(yùn)行驗(yàn)證程序。成功返回TRUE,失敗返回FALSE。您可以選擇通過功能驗(yàn)證組的名稱,例如:將一系列驗(yàn)證規(guī)則保存到一個(gè)配置文件.

$this->form_validation->set_message();

允許您設(shè)置自定義錯誤消息??瓷厦娴脑O(shè)置錯誤信息

?

輔助函數(shù)參考

以下函數(shù)在調(diào)用form時(shí)自動加載無需手動載入。The following helper functions are available for use in the view files containing your forms. Note that these are procedural functions, so they do not require you to prepend them with $this->form_validation.【譯者注:所有使用下列函數(shù)的表單項(xiàng)都必須有驗(yàn)證規(guī)則,規(guī)則可以為''或者為簡單的trim函數(shù),不可為NULL

form_error()

Shows an individual error message associated with the field name supplied to the function. Example:

<?php echo form_error('username'); ?>

The error delimiters can be optionally specified. See the 更改錯誤定界符 section above.

validation_errors()

Shows all error messages as a string: Example:

<?php echo validation_errors(); ?>

The error delimiters can be optionally specified. See the 更改錯誤定界符 section above.

set_value()

Permits you to set the value of an input form or textarea. You must supply the field name via the first parameter of the function. The second (optional) parameter allows you to set a default value for the form. Example:

<input type="text" name="quantity" value="<dfn><?php echo set_value('quantity', '0'); ?></dfn>" size="50" />

The above form will show "0" when loaded for the first time.

set_select()

If you use a <select> menu, this function permits you to display the menu item that was selected. The first parameter must contain the name of the select menu, the second parameter must contain the value of each item, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE).

Example:

<select name="myselect">
<option value="one" <?php echo set_select('myselect', 'one', TRUE); ?> >One</option>
<option value="two" <?php echo set_select('myselect', 'two'); ?> >Two</option>
<option value="three" <?php echo set_select('myselect', 'three'); ?> >Three</option>
</select>

控制器:$this->form_validation->set_rules('myselect');???//thinkPod 編輯于 2011-08-09

set_checkbox()

Permits you to display a checkbox in the state it was submitted. The first parameter must contain the name of the checkbox, the second parameter must contain its value, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE). Example:

<input type="checkbox" name="mycheck[]" value="1" <?php echo set_checkbox('mycheck[]', '1'); ?> />
<input type="checkbox" name="mycheck[]" value="2" <?php echo set_checkbox('mycheck[]', '2'); ?> />

set_radio()

Permits you to display radio buttons in the state they were submitted. This function is identical to the set_checkbox() function above.

此函數(shù)與set_checkbox()函數(shù)相同, 用來顯示單選按鈕被選中的狀態(tài)。。

<input type="radio" name="myradio" value="1" <?php echo set_radio('myradio', '1', TRUE); ?> />
<input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />

?

翻譯貢獻(xiàn)者: 739122706, as3291363, baiyuxiong, carboo, cnsaturn, dimitry, Fanbin, goocarlos, Hex, huangnaiang, IT不倒翁, mchipengfei, niudongwei, rockey329, skidu, soyota, wangyueqiang, wnpers, xgdd1987, yuwen002, 上官元恒, 我是我, 暗夜星辰, 籠中
最后修改: 2012-05-07 16:49:23
Artikel sebelumnya: Artikel seterusnya: