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

direktori cari
歡迎 目錄 快速參考圖 基本信息 服務(wù)器要求 許可協(xié)議 變更記錄 關(guān)于CodeIgniter 安裝 下載 CodeIgniter 安裝指導(dǎo) 從老版本升級(jí) 疑難解答 介紹 開始 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ò)展框架的核心 自動(dòng)裝載資源 公共函數(shù) URI 路由 錯(cuò)誤處理 緩存 調(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

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

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

表單驗(yàn)證

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

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

在這個(gè)過程中,程序必須:

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

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

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

預(yù)覽

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

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

讓我們創(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/ 文件夾下:

試一試!

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

example.com/index.php/form/

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

說明:

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

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

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

    驗(yàn)證類會(huì)使用這個(gè)變量返回并顯示一些錯(cuò)誤信息。如果沒有信息將沒有返回值。

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

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

設(shè)置驗(yàn)證條件

CodeIgniter可以讓你設(shè)置任意數(shù)量的條件來控制給定的范圍,循環(huán),甚至同時(shí)它可以讓你準(zhǔ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)在提交空白的表單,你將會(huì)看到錯(cuò)誤信息。如果你提交的表單包含有完全正確的信息,你將看到你的成功頁。

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

改變出錯(cuò)信息的樣式

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

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

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

順序編排規(guī)則

CodeIgniter可以讓你把所有的驗(yàn)證條件有序地串聯(lián)起來。我們來試一下。把你的驗(yà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ū)域 必須包含一個(gè)合法的Email地址.

盡管嘗試下吧!

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

準(zhǔn)備數(shù)據(jù)

在驗(yàn)證函數(shù)的基礎(chǔ)上,你可以使用不同的方法準(zhǔn)備好你的數(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ū)域?yàn)?MD5 編碼,通過“XSS_CLEAN”函數(shù)檢測用戶名,移除危險(xiǎn)的數(shù)據(jù)。

默認(rèn)的PHP函數(shù)能為一個(gè)規(guī)則使用一個(gè)參數(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ù):你自己的驗(yàn)證函數(shù)

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

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

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

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

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

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

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

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

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

填充表單

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

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

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

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

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

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

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

單獨(dú)顯示錯(cuò)誤

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

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

Note: 要這樣顯示錯(cuò)誤信息,你必須之前使用$this->validation->set_fields 函數(shù)描述。錯(cuò)誤將會(huì)被轉(zhuǎn)換成表單域名加"_error"后綴的變量。例如,你的用戶名錯(cuò)誤的值可以這樣訪問:
$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不能使用該驗(yàn)證規(guī)則) ?
is_natural_no_zero No 如果為非正整數(shù)(自然數(shù)) 則 Returns FALSE (注意 CI 1.7x版 新增, CI 1.6x不能使用該驗(yàn)證規(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ī)則也可以像獨(dú)立的函數(shù)一樣被調(diào)用。例如:

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

Note: 你也可以使用接受一個(gè)參數(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: 你也可以,使用接收一個(gè)參數(shù)的PHP原生函數(shù),例如trim, htmlspecialchars, urldecode,等等。

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

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

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

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

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

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

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

set_select()

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

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

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

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

set_radio()

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

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

?

翻譯貢獻(xiàn)者: Hex, lishen2, lomatus, shnwqshnwq, tanqimin, wjm7301, yz20sui
最后修改: 2009-09-12 15:36:46
Artikel sebelumnya: Artikel seterusnya: