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

directory search
歡迎 目錄 快速參考圖 基本信息 服務(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)類 鉤子 - 擴展框架的核心 自動裝載資源 公共函數(shù) URI 路由 錯誤處理 緩存 調(diào)試應(yīng)用程序 以CLI方式運行 管理應(yīng)用程序 處理多環(huán)境 PHP替代語法 安全 開發(fā)規(guī)范 類庫參考 基準測試類 日歷類 購物車類 配置類 Email 類 加密類 文件上傳類 表單驗證詳解 FTP 類 圖像處理類 輸入類 Javascript 類 語言類 裝載類 遷移類 輸出類 分頁類 模板解析器類 安全類 Session 類 HTML 表格類 引用通告類 排版類 單元測試類 URI 類 User-Agent 類 表單驗證 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ù)庫維護類 查詢輔助函數(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ù)
characters

CodeIgniter 用戶指南 版本 2.1.0

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

這個類庫已經(jīng)廢棄掉了。鼓勵使用 form_validation 類庫。

表單驗證

在解釋CodeIgniter的數(shù)據(jù)驗證前,讓我們先描述下理想情況:

  1. 顯示一個表單;
  2. 你填寫文字并點擊提交按鈕;
  3. 如果你提交的東西是殘缺的,又或者漏填了必須填寫的項,表單重新顯示并包含你提交數(shù)據(jù)的一條錯誤信息;
  4. 這個過程繼續(xù),直到你提交了正確的信息

在這個過程中,程序必須:

  1. 檢查必須的數(shù)據(jù)。
  2. 校驗數(shù)據(jù)的格式是否正確,是否符合標(biāo)準(比如,如果提交用戶名,那么必須只能包含有效的字符。必須有最小的長度,并且不能超過允許的長度。 用戶名不可以與已有用戶名重復(fù),或者不能為保留字,等等。 Etc.)
  3. 處理數(shù)據(jù)使之更安全。
  4. 需要的情況下預(yù)格式化數(shù)據(jù)(數(shù)據(jù)需要進行剪裁,HTML格式化?等等)。
  5. 準備數(shù)據(jù),寫入數(shù)據(jù)庫。

盡管上面的過程沒有什么復(fù)雜的地方,但這通常需要一定數(shù)量的代碼來提交錯誤信息,各種控制結(jié)構(gòu)放置在HTML文件里。 創(chuàng)建簡單表單驗證,代碼通常會非常凌亂而效能地下。

CodeIgniter提供了一個全面的解決框架,真正的精簡你需要寫的代碼數(shù)量。當(dāng)然也可以從你的HTML表單中分離出控制結(jié)構(gòu),使得它成為干凈而靈活的代碼。

預(yù)覽

為了能使用CodeIgniter的表單驗證功能,你需要做以下三件事情:

  1. 一個包含表單的 視圖 文件。
  2. 一個包含提交“成功”信息的視圖文件。
  3. 一個控制器函數(shù),用來接受和處理提交的數(shù)據(jù)。

讓我們創(chuàng)建這三個事件,使用注冊表單作為樣例:

表單頁

使用一個文本編輯器,創(chuàng)建一個名叫myform.php的文件。在文中寫入如下代碼并保存到applications/views/ 文件夾下:

成功頁

使用一個文本編輯器,創(chuàng)建一個名叫 formsuccess.php的文件。在文中寫入如下代碼并保存到applications/views/ 文件夾下:

控制器頁

使用一個文本編輯器,創(chuàng)建一個名叫 form.php的文件。在文中寫入如下代碼并保存到applications/controllers/ 文件夾下:

試一試!

用與下面相似的URL地址測試下你的表單:

example.com/index.php/form/

如果你提交了表單,你會發(fā)現(xiàn)表單重載了。那是因為你還沒有設(shè)置任何驗證條件,這就是我們接下來要做的。

說明:

你會注意到一些關(guān)于上面頁面的事情:

那個 頁面 (myform.php) 是一個除了兩個例外的標(biāo)準頁面:

  1. 它使用一個表單助手 來創(chuàng)建表單to create the form opening. 從技術(shù)上講,這是沒有必要的。你可以用標(biāo)準的HTML來創(chuàng)建表單。然而,使用這個助手的好處在于: 它為你生成了一個段URL,就是你在CONFIG文件里定義的那個。這使得你的程序在修改時可以更簡單和靈活。
  2. 在表單的頂部,你會注意到一下的不同點: <?php echo $this->validation->error_string; ?>

    驗證類會使用這個變量返回并顯示一些錯誤信息。如果沒有信息將沒有返回值。

這個控制器 (form.php) 有一個函數(shù): index(). 這個函數(shù)初始化驗證類并加載你的視圖文件需要使用的 form helperURL helper 。 當(dāng)然也 運行 驗證過程。這取決于驗證是否成功,既不顯示表單也沒有返回成功信息。

如果還沒有告訴驗證類使之生效的信息,它會一直返回“FALSE”(布爾值 FALSE)作為默認值。如果數(shù)據(jù)成功地接受你的條件并且它們沒有任何錯誤,那么run() 函數(shù)值返回“TRUE”。

設(shè)置驗證條件

CodeIgniter可以讓你設(shè)置任意數(shù)量的條件來控制給定的范圍,循環(huán),甚至同時它可以讓你準備并預(yù)處理數(shù)據(jù)。讓我們先看看它的用法,我們后面再具體解釋。

在你的控制器 (form.php)里, 僅加入下面的初始化函數(shù):

$rules['username'] = "required";
$rules['password'] = "required";
$rules['passconf'] = "required";
$rules['email'] = "required";

$this->validation->set_rules($rules);

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

現(xiàn)在提交空白的表單,你將會看到錯誤信息。如果你提交的表單包含有完全正確的信息,你將看到你的成功頁。

注意: 當(dāng)表單數(shù)據(jù)有錯誤時,它不會被重新填充。當(dāng)我們講明驗證規(guī)則后,馬上回來解釋它。

改變出錯信息的樣式

默認情況下,系統(tǒng)會為每個錯誤提示信息添加一個段落的標(biāo)識(<p>)。你可以很容易地通過編碼去改變這些界定符號,在控制器里寫入一下代碼:

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

在這個例子中,我們將其改成了 div 標(biāo)簽。

順序編排規(guī)則

CodeIgniter可以讓你把所有的驗證條件有序地串聯(lián)起來。我們來試一下。把你的驗證條件數(shù)據(jù)改成下面的樣子:

$rules['username'] = "required|min_length[5]|max_length[12]";
$rules['password'] = "required|matches[passconf]";
$rules['passconf'] = "required";
$rules['email'] = "required|valid_email";

以上代碼要求如下:

  1. username區(qū)域要求在5位到12位之間.
  2. password 區(qū)域必須和 password confirmation 區(qū)域匹配.
  3. Email 區(qū)域 必須包含一個合法的Email地址.

盡管嘗試下吧!

請注意: 如果你閱讀最后的“規(guī)則參考”(Rule Reference),你會發(fā)現(xiàn)有很多可用的規(guī)則!

準備數(shù)據(jù)

在驗證函數(shù)的基礎(chǔ)上,你可以使用不同的方法準備好你的數(shù)據(jù),例如,你可以建立這樣的規(guī)則:

$rules['username'] = "trim|required|min_length[5]|max_length[12]|xss_clean";
$rules['password'] = "trim|required|matches[passconf]|md5";
$rules['passconf'] = "trim|required";
$rules['email'] = "trim|required|valid_email";

上面的例子中,我們“修剪”內(nèi)容,轉(zhuǎn)換密碼區(qū)域為 MD5 編碼,通過“XSS_CLEAN”函數(shù)檢測用戶名,移除危險的數(shù)據(jù)。

默認的PHP函數(shù)能為一個規(guī)則使用一個參數(shù),像 htmlspecialchars, trim, MD5, 等等.

Note: You will generally want to use the prepping functions after the validation rules so if there is an error, the original data will be shown in the form.

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

驗證系統(tǒng)支持回調(diào)你自己的驗證函數(shù). 這允許你通過擴展驗證類來適應(yīng)自己的需要. 例如, 如果你需要執(zhí)行一個數(shù)據(jù)庫查詢來查看用戶是否選擇了唯一的用戶名,你可以通過創(chuàng)建一個回調(diào)函數(shù)來做這件事. 讓我們創(chuàng)建一個簡單的例子.

在你的控制器中將username規(guī)則改為:

$rules['username'] = "callback_username_check";

然后在你的控制器中添加一個新的函數(shù)叫做 username_check . 你的控制器看起來應(yīng)該像下面的例子:

重新載入表單并以"test"做為用戶名提交. 你可以看到表單中的數(shù)據(jù)已經(jīng)發(fā)送到你的回調(diào)函數(shù)中處理.

要想回調(diào)一個函數(shù)只需在你定義的函數(shù)名前加上一個"callback_"前綴即可.

錯誤消息可以使用 $this->validation->set_message 函數(shù)來設(shè)置. 請牢記消息鍵(第一個參數(shù))必須與您的函數(shù)名相匹配.

注意: 你可以在任何規(guī)則中使用你自定義的錯誤消息, 只需設(shè)置類似的消息. 例如,為"required"規(guī)則改變消息你可以這樣做:

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

填充表單

我們花了不少時間處理錯誤?,F(xiàn)在是討論使用數(shù)據(jù)重新填充表單的時候了。這里的做法和你的驗證規(guī)則類似。在你的驗證規(guī)則下面加入如下代碼:

$fields['username'] = 'Username';
$fields['password'] = 'Password';
$fields['passconf'] = 'Password Confirmation';
$fields['email'] = 'Email Address';

$this->validation->set_fields($fields);

數(shù)組的關(guān)鍵字實際上是表單域的名字,對應(yīng)的值是你想要在錯誤信息中顯示的全名。

現(xiàn)在你控制器中的index函數(shù)看起來應(yīng)該像這樣:

現(xiàn)在打開你的視圖文件myform.php,根據(jù)每個表單域的名字更新它們的值。

現(xiàn)在重新加載你的頁面,提交表單并觸發(fā)一個錯誤。你的表單將會被重新填充而且錯誤信息也會包含更多相關(guān)的表單域的名字。

單獨顯示錯誤

如果你想要在每個表單域旁顯示錯誤,而不是顯示一個錯誤列表,你可以像這樣修改你的表單:

如果沒有錯誤,不會顯示任何東西。如果有錯誤發(fā)生,消息將會使用你設(shè)置的分割標(biāo)記顯示(<p> 標(biāo)記是默認值)。

Note: 要這樣顯示錯誤信息,你必須之前使用$this->validation->set_fields 函數(shù)描述。錯誤將會被轉(zhuǎn)換成表單域名加"_error"后綴的變量。例如,你的用戶名錯誤的值可以這樣訪問:
$this->validation->username_error.

規(guī)則參考

下面是可用的原生規(guī)則列表:

Rule Parameter Description Example
required No Returns FALSE if the form element is empty.
matches Yes Returns FALSE if the form element does not match the one in the parameter. matches[form_item]
min_length Yes Returns FALSE if the form element is shorter then the parameter value. min_length[6]
max_length Yes Returns FALSE if the form element is longer then the parameter value. max_length[12]
exact_length Yes Returns FALSE if the form element is not exactly the parameter value. exact_length[8]
alpha No Returns FALSE if the form element contains anything other than alphabetical characters.
alpha_numeric No Returns FALSE if the form element contains anything other than alpha-numeric characters.
alpha_dash No Returns FALSE if the form element contains anything other than alpha-numeric characters, underscores or dashes.
numeric No Returns FALSE if the form element contains anything other than numeric characters. ?
integer No Returns FALSE if the form element contains anything other than an integer. ?
valid_email No Returns FALSE if the form element does not contain a valid email address. ?
is_natural No 如果為非整數(shù)(自然數(shù)) 則 Returns FALSE (注意 CI 1.7x版 新增, CI 1.6x不能使用該驗證規(guī)則) ?
is_natural_no_zero No 如果為非正整數(shù)(自然數(shù)) 則 Returns FALSE (注意 CI 1.7x版 新增, CI 1.6x不能使用該驗證規(guī)則) ?
valid_ip No Returns FALSE if the supplied IP is not valid. ?
valid_base64 No Returns FALSE if the supplied string contains anything other than valid Base64 characters. ?

Note: 這些規(guī)則也可以像獨立的函數(shù)一樣被調(diào)用。例如:

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

Note: 你也可以使用接受一個參數(shù)的PHP原生函數(shù)。

Prepping Reference

下面是所有可用的預(yù)處理函數(shù)列表

Name Parameter Description
xss_clean No Runs the data through the XSS filtering function, described in the Input Class page.
prep_for_form No Converts special characters so that HTML data can be shown in a form field without breaking it.
prep_url No Adds "http://" to URLs if missing.
strip_image_tags No Strips the HTML from image tags leaving the raw URL.
encode_php_tags No Converts PHP tags to entities.

Note: 你也可以,使用接收一個參數(shù)的PHP原生函數(shù),例如trim, htmlspecialchars, urldecode,等等。

設(shè)置自定義錯誤信息

所有的原生錯誤信息防止在下面的語言文件中:language/english/validation_lang.php

你可以編輯這個文件,或使用如下函數(shù)設(shè)置你自己的信息。

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

rule是特定規(guī)則的名字,Error Message是你想要顯示的信息。

處理選擇菜單,單選按鈕,和復(fù)選框

如果你使用了選擇菜單,單選按鈕,和復(fù)選框,你會想在出錯時保持原先的選擇。驗證類有三個函數(shù)幫助你完成這些:

set_select()

允許你顯示和提交時狀態(tài)一致的菜單項。第一個參數(shù)是選擇菜單的名字,第二個參數(shù)必須包含每個選項的值。例如:

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

set_checkbox()

允許你顯示和提交時狀態(tài)一致的復(fù)選框。第一個參數(shù)是復(fù)選框的名字,第二個參數(shù)必須包含它的值,例如:

<input type="checkbox" name="mycheck" value="1" <?php echo $this->validation->set_checkbox('mycheck', '1'); ?> />

set_radio()

允許你顯示和提交時狀態(tài)一致的單選按鈕。第一個參數(shù)是單選按鈕的名字,第二個參數(shù)必須包含它的值:例如:

<input type="radio" name="myradio" value="1" <?php echo $this->validation->set_radio('myradio', '1'); ?> />

?

翻譯貢獻者: Hex, lishen2, lomatus, shnwqshnwq, tanqimin, wjm7301, yz20sui
最后修改: 2009-09-12 15:36:46
Previous article: Next article: