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

directory search
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
characters

CodeIgniter提供了一個(gè)全面的表單驗(yàn)證和數(shù)據(jù)準(zhǔn)備類,有助于最小化您編寫的代碼量。

頁面內(nèi)容

  • 表單驗(yàn)證

    • 表格

    • 成功頁面

    • 控制器

    • 嘗試一下!

    • 說明

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

    • 使用數(shù)組設(shè)置規(guī)則

    • 級聯(lián)規(guī)則

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

    • 重新填寫表單

    • 回調(diào):您自己的驗(yàn)證方法

    • 可調(diào)用:通常使用任何東西

    • 設(shè)置錯(cuò)誤消息

    • 翻譯字段名稱

    • 更改錯(cuò)誤分隔符

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

    • 驗(yàn)證數(shù)組(非$ _POST)

    • 概觀

    • 表單驗(yàn)證教程

-  [Saving Sets of Validation Rules to a Config File](about:blank#saving-sets-of-validation-rules-to-a-config-file)    - [How to save your rules](about:blank#how-to-save-your-rules)    - [Creating Sets of Rules](about:blank#creating-sets-of-rules)    - [Calling a Specific Rule Group](about:blank#calling-a-specific-rule-group)    - [Associating a Controller Method with a Rule Group](about:blank#associating-a-controller-method-with-a-rule-group)
- [Using Arrays as Field Names](about:blank#using-arrays-as-field-names)- [Rule Reference](about:blank#rule-reference)- [Prepping Reference](about:blank#prepping-reference)- [Class Reference](about:blank#class-reference)- [Helper Reference](about:blank#helper-reference)

概觀

在解釋CodeIgniter的數(shù)據(jù)驗(yàn)證方法之前,先介紹一下理想的情況:

  1. 將顯示一個(gè)表單。

  2. 您填寫并提交。

  3. 如果您提交的內(nèi)容無效,或者可能錯(cuò)過了必填項(xiàng)目,則會重新顯示包含您的數(shù)據(jù)的表單以及描述問題的錯(cuò)誤消息。

  4. 此過程將繼續(xù),直到您提交了有效的表單。

在接收端,腳本必須:

  1. 檢查所需的數(shù)據(jù)。

  2. 驗(yàn)證數(shù)據(jù)的類型是否正確,并且符合正確的標(biāo)準(zhǔn)。例如,如果提交用戶名,則必須驗(yàn)證它是否僅包含允許的字符。它必須是最小長度,并且不能超過最大長度。用戶名不能是別人現(xiàn)有的用戶名,或者甚至可能是保留字。等等。

  3. 清理數(shù)據(jù)的安全性。

  4. 如果需要,預(yù)格式化數(shù)據(jù)(數(shù)據(jù)是否需要修剪?HTML編碼等)

  5. 準(zhǔn)備數(shù)據(jù)以便在數(shù)據(jù)庫中插入。

雖然上述過程沒有什么特別復(fù)雜,但它通常需要大量的代碼,并且要顯示錯(cuò)誤消息,各種控制結(jié)構(gòu)通常放在HTML表單中。表單驗(yàn)證盡管很容易創(chuàng)建,但實(shí)現(xiàn)起來通常非常繁瑣和繁瑣。

表單驗(yàn)證教程

以下是實(shí)施CodeIgniters表單驗(yàn)證的“實(shí)踐”教程。

為了實(shí)現(xiàn)表單驗(yàn)證,你需要三件事情:

  1. 包含表單的視圖文件。

  2. 包含成功提交后將顯示“成功”消息的視圖文件。

  3. 接收和處理提交的數(shù)據(jù)的控制器方法。

讓我們創(chuàng)建這三件事,以會員注冊表單為例。

表格

使用文本編輯器創(chuàng)建一個(gè)名為myform.php的表單。在其中,放置此代碼并將其保存到您的應(yīng)用程序/視圖/文件夾中:

<html><head><title>My Form</title></head><body><?php echo validation_errors(); ?><?php echo form_open('form'); ?><h5>Username</h5><input type="text" name="username" value="" size="50" /><h5>Password</h5><input type="text" name="password" value="" size="50" /><h5>Password Confirm</h5><input type="text" name="passconf" value="" size="50" /><h5>Email Address</h5><input type="text" name="email" value="" size="50" /><div><input type="submit" value="Submit" /></div></form></body></html>

成功頁面

使用文本編輯器創(chuàng)建一個(gè)名為formsuccess.php的表單。在其中,放置此代碼并將其保存到您的應(yīng)用程序/視圖/文件夾中:

<html><head><title>My Form</title></head><body><h3>Your form was successfully submitted!</h3><p><?php echo anchor('form', 'Try it again!'); ?></p></body></html>

控制器

使用文本編輯器創(chuàng)建一個(gè)名為Form.php的控制器。在它中,放置這些代碼并將其保存到您的應(yīng)用程序/控制器/文件夾中:

<?phpclass Form extends CI_Controller {        public function index()        {
                $this->load->helper(array('form', 'url'));

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

嘗試一下!

要嘗試表單,請使用類似下面的網(wǎng)址訪問您的網(wǎng)站:

example.com/index.php/form/

如果您提交表單,則只需查看表單重新加載。那是因?yàn)槟氵€沒有設(shè)置任何驗(yàn)證規(guī)則。

既然你還沒有告訴Form Validation類來驗(yàn)證任何東西,它默認(rèn)返回FALSE(boolean false)。The run()方法只會返回TRUE,如果它已成功應(yīng)用您的規(guī)則,而沒有任何失敗。

說明

你會注意到關(guān)于上述頁面的幾件事情:

表單(myform.php)是一個(gè)標(biāo)準(zhǔn)的Web表單,除了兩個(gè)例外:

  1. 它使用表單助手來創(chuàng)建表單打開。從技術(shù)上講,這是沒有必要的。您可以使用標(biāo)準(zhǔn)HTML創(chuàng)建表單。但是,使用助手的好處是它會根據(jù)配置文件中的URL為您生成操作URL。這使您的應(yīng)用程序在您的URL更改時(shí)更具可移植性。

  2. 在窗體的頂部,您會注意到以下函數(shù)調(diào)用:<?php echo validation \ _errors(); ?>該函數(shù)將返回驗(yàn)證器發(fā)回的任何錯(cuò)誤消息。如果沒有消息,它將返回一個(gè)空字符串。

控制器(Form.php)有一個(gè)方法:index()。此方法初始化驗(yàn)證類并加載視圖文件使用的表單助手和URL助手。它也運(yùn)行驗(yàn)證程序。根據(jù)驗(yàn)證是否成功,它會顯示表單或成功頁面。

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

CodeIgniter允許您為給定字段設(shè)置盡可能多的驗(yàn)證規(guī)則,將它們按順序級聯(lián),甚至可以讓您同時(shí)準(zhǔn)備和預(yù)處理字段數(shù)據(jù)。要設(shè)置驗(yàn)證規(guī)則,您將使用以下set_rules()方法:

$this->form_validation->set_rules();

上述方法以三個(gè)參數(shù)作為輸入:

  1. 字段名稱 - 您給出表單字段的確切名稱。

  2. 該字段的“人類”名稱,將插入錯(cuò)誤消息中。例如,如果您的字段被命名為“用戶”,則可以給它一個(gè)人名“用戶名”。

  3. 此表單字段的驗(yàn)證規(guī)則。

  4. (可選)根據(jù)當(dāng)前字段的任何規(guī)則設(shè)置自定義錯(cuò)誤消息。如果沒有提供將使用默認(rèn)的。

注意

如果您希望將字段名稱存儲在語言文件中,請參閱翻譯字段名稱。

這是一個(gè)例子。在你的控制器(Form.php)中,在驗(yàn)證初始化方法的下面添加下面的代碼:

$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');

你的控制器應(yīng)該看起來像這樣:

<?phpclass Form extends CI_Controller {        public function index()        {
                $this->load->helper(array('form', 'url'));

                $this->load->library('form_validation');

                $this->form_validation->set_rules('username', 'Username', 'required');
                $this->form_validation->set_rules('password', 'Password', 'required',                        array('required' => 'You must provide a %s.')                );
                $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
                $this->form_validation->set_rules('email', 'Email', 'required');                if ($this->form_validation->run() == FALSE)                {
                        $this->load->view('myform');                }                else                {
                        $this->load->view('formsuccess');                }        }}

現(xiàn)在提交表單的空白字段,你應(yīng)該看到錯(cuò)誤信息。如果您填寫填寫了所有字段的表單,您將看到您的成功頁面。

注意

出現(xiàn)錯(cuò)誤時(shí),表單字段尚未用數(shù)據(jù)重新填充。我們很快會做到。

使用數(shù)組設(shè)置規(guī)則

在繼續(xù)之前,應(yīng)該注意的是,如果您希望在一個(gè)操作中設(shè)置所有規(guī)則,則可以將規(guī)則設(shè)置方法傳遞給數(shù)組。如果您使用此方法,則必須按照指示命名您的數(shù)組鍵:

$config = array(        
                array(                
                        'field' => 'username',                
                        'label' => 'Username',                
                        'rules' => 'required'        
                        ),        
                array(                
                        'field' => 'password',                
                        'label' => 'Password',                
                        'rules' => 'required',                
                        'errors' => array(                        
                                    'required' => 'You must provide a %s.',                
                                    ),        
                      ),        
                array(                
                        'field' => 'passconf',                
                        'label' => 'Password Confirmation',                
                        'rules' => 'required'        
                    ),        
                array(                
                        'field' => 'email',                
                        'label' => 'Email',                
                        'rules' => 'required'        
                    )
                );
$this->form_validation->set_rules($config);

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

CodeIgniter允許你將多個(gè)規(guī)則放在一起。我們來試試吧。在規(guī)則設(shè)置方法的第三個(gè)參數(shù)中更改您的規(guī)則,如下所示:

$this->form_validation->set_rules('username', 'Username','required|min_length[5]|max_length[12]|is_unique[users.username]',array(                
    'required'      => 'You have not provided %s.',                
    'is_unique'     => 'This %s already exists.'        
    )
);
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

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

  1. 用戶名字段不能少于5個(gè)字符,也不能超過12個(gè)。

  2. 密碼字段必須與密碼確認(rèn)字段匹配。

  3. 電子郵件字段必須包含有效的電子郵件地址。

試一試!提交表單時(shí)沒有正確的數(shù)據(jù),您會看到與新規(guī)則相對應(yīng)的新錯(cuò)誤消息。有許多規(guī)則可供您在驗(yàn)證參考中閱讀。

注意

您也可以傳遞一組規(guī)則來set_rules()代替字符串。例:

$this->form_validation->set_rules('username', 'Username', array('required', 'min_length[5]'));

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

除了上面我們使用的驗(yàn)證方法之外,您還可以用各種方式準(zhǔn)備數(shù)據(jù)。例如,你可以設(shè)置這樣的規(guī)則:

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

在上面的例子中,我們正在“修剪”這些字段,在必要時(shí)檢查長度并確保兩個(gè)密碼字段匹配。

接受一個(gè)參數(shù)的任何天然PHP功能可以作為一條規(guī)則,等htmlspecialchars()trim()等。

注意

您通常會在驗(yàn)證規(guī)則之后使用準(zhǔn)備功能,因此如果出現(xiàn)錯(cuò)誤,原始數(shù)據(jù)將顯示在表單中。

重新填寫表單

到目前為止,我們只處理錯(cuò)誤?,F(xiàn)在是用提交的數(shù)據(jù)重新填充表單字段的時(shí)候了。CodeIgniter提供了幾個(gè)幫助函數(shù),允許你這樣做。你最常用的一個(gè)是:

set_value('field name')

打開myform.php視圖文件和更新中使用的每個(gè)字段set_value()的功能:

不要忘記在php:func:set\_value()函數(shù)調(diào)用中包含每個(gè)字段名稱!

<html><head><title>My Form</title></head><body><?php echo validation_errors(); ?><?php echo form_open('form'); ?><h5>Username</h5><input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /><h5>Password</h5><input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /><h5>Password Confirm</h5><input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /><h5>Email Address</h5><input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" /><div><input type="submit" value="Submit" /></div></form></body></html>

現(xiàn)在重新加載頁面并提交表單,以便觸發(fā)錯(cuò)誤。您的表單字段現(xiàn)在應(yīng)該重新填充

注意

下面的類參考部分包含允許您重新填充<select>菜單,單選按鈕和復(fù)選框的方法。

重要

如果使用數(shù)組作為表單域的名稱,則必須將其作為數(shù)組提供給函數(shù)。例:

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

欲了解更多信息,請參閱下面的使用數(shù)組作為字段名稱部分。

回調(diào):您自己的驗(yàn)證方法

驗(yàn)證系統(tǒng)支持回調(diào)你自己的驗(yàn)證方法。這允許您擴(kuò)展驗(yàn)證類以滿足您的需求。例如,如果您需要運(yùn)行數(shù)據(jù)庫查詢來查看用戶是否選擇了唯一的用戶名,則可以創(chuàng)建一個(gè)回調(diào)方法來實(shí)現(xiàn)此目的。我們來創(chuàng)建一個(gè)這樣的例子。

在您的控制器中,將“用戶名”規(guī)則更改為:

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

然后添加一個(gè)稱為username_check()您的控制器的新方法。以下是您的控制器現(xiàn)在的外觀:

<?phpclass Form extends CI_Controller {        public function index()        {
                $this->load->helper(array('form', 'url'));

                $this->load->library('form_validation');

                $this->form_validation->set_rules('username', 'Username', 'callback_username_check');
                $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|is_unique[users.email]');                if ($this->form_validation->run() == FALSE)                {
                        $this->load->view('myform');                }                else                {
                        $this->load->view('formsuccess');                }        }        public function username_check($str)        {                if ($str == 'test')                {
                        $this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"');                        return FALSE;                }                else                {                        return TRUE;                }        }}

重新載入您的表格并將其用“test”作為用戶名提交。您可以看到表單字段數(shù)據(jù)已傳遞給您的回調(diào)方法供您處理。

要調(diào)用回調(diào),只需將方法名稱放在規(guī)則中,并將“callback_”作為規(guī)則前綴。如果你需要在你的回調(diào)方法中接收一個(gè)額外的參數(shù),只需要在方括號之后的方括號后面添加它,如:callback_foo[bar],然后它將作為回調(diào)方法的第二個(gè)參數(shù)傳遞。

注意

您也可以處理傳遞給您的回調(diào)的表單數(shù)據(jù)并將其返回。如果您的回調(diào)函數(shù)返回布爾值TRUE / FALSE以外的任何值,則假定該數(shù)據(jù)是您新處理的表單數(shù)據(jù)。

可調(diào)用:通常使用任何東西

如果回調(diào)規(guī)則對您來說不夠好(例如,因?yàn)樗鼈儍H限于您的控制器),請不要感到失望,還有一種方法可以創(chuàng)建自定義規(guī)則:任何is_callable()會返回TRUE的規(guī)則。

考慮下面的例子:

$this->form_validation->set_rules(        
'username', 'Username',        
array(                
'required',                
array($this->users_model, 'valid_username')        
));

上面的代碼將使用valid_username()你的Users_model對象的方法。

這僅僅是一個(gè)例子,回調(diào)不限于模型。您可以使用接受該字段值作為其第一個(gè)參數(shù)的任何對象/方法。你也可以使用匿名函數(shù):

$this->form_validation->set_rules(        
'username', 'Username',        
array(                
'required',                
function($value)                {                        // Check $value                }        ));

當(dāng)然,由于Callable規(guī)則本身不是一個(gè)字符串,它也不是規(guī)則名稱。當(dāng)你想為它們設(shè)置錯(cuò)誤信息時(shí),這是一個(gè)問題。為了解決這個(gè)問題,可以將這樣的規(guī)則放在數(shù)組的第二個(gè)元素中,第一個(gè)元素是規(guī)則名稱:

$this->form_validation->set_rules(        
'username', 'Username',        
array(                
'required',                
array('username_callable', array($this->users_model, 'valid_username'))        
));

匿名功能版本:

$this->form_validation->set_rules(        
'username', 'Username',        
array(                
'required',                
array(                        
    'username_callable',function($str){                               
     // Check validity of $str and return TRUE or FALSE                        
    }                
)        
));

設(shè)置錯(cuò)誤消息

所有本地錯(cuò)誤消息都位于以下語言文件中:system / language / english / form_validation_lang.php

要為規(guī)則設(shè)置自己的全局自定義消息,您可以通過在應(yīng)用程序/ language / english / form_validation_lang.php中創(chuàng)建自己的語言來擴(kuò)展/覆蓋語言文件(在Language Class文檔中閱讀更多內(nèi)容),或者使用以下方法:

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

如果您需要為特定規(guī)則的特定字段設(shè)置自定義錯(cuò)誤消息,請使用set_rules()方法:

$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3',        array('rule2' => 'Error Message on rule2 for this field_name'));

其中規(guī)則對應(yīng)于特定規(guī)則的名稱,錯(cuò)誤消息是您希望顯示的文本。

如果您想要包含字段的“人名”名稱或某些規(guī)則允許的可選參數(shù)(例如max_length),則可以分別將{field}{param}標(biāo)記添加到您的消息中:

$this->form_validation->set_message('min_length', '{field} must have at least {param} characters.');

在具有人名用戶名和min_length5規(guī)則的字段中,將顯示錯(cuò)誤:“用戶名必須至少包含5個(gè)字符?!?/p>

注意

在錯(cuò)誤消息sprintf()中使用%s的舊方法仍然有效,但它會覆蓋上面的標(biāo)記。你應(yīng)該使用一個(gè)或另一個(gè)。

在上面的回調(diào)規(guī)則示例中,通過傳遞方法的名稱(不帶“callback_”前綴)來設(shè)置錯(cuò)誤消息:

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

翻譯字段名稱

如果您想將傳遞給該set_rules()方法的“人”名稱存儲在語言文件中,并因此使該名稱能夠被翻譯,請執(zhí)行以下操作:

首先,用lang:作為你的“人類”名稱的前綴,如下例所示:

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

然后,將名稱存儲在您的一個(gè)語言文件數(shù)組中(不帶前綴):

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

注意

如果您將數(shù)組項(xiàng)存儲在未由CI自動加載的語言文件中,則需要記住使用以下命令將其加載到控制器中:

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

有關(guān)語言文件的更多信息,請參見“語言課程”頁面。

更改錯(cuò)誤分隔符

默認(rèn)情況下,F(xiàn)orm Validation類會在每個(gè)顯示的錯(cuò)誤消息的周圍添加一個(gè)段落標(biāo)記(<p>)。您可以全局更改這些分隔符,也可以單獨(dú)更改這些分隔符或更改配置文件中的默認(rèn)值。

  1. 全局更改分隔符要在全局更改錯(cuò)誤分隔符,在您的控制器方法中,在加載Form Validation類之后,添加以下代碼:$ this-> form_validation-> set_error_delimiters('<div class =“error”>','</ div >'); 在這個(gè)例子中,我們切換到使用div標(biāo)簽。

  2. 單獨(dú)更改分隔符本教程中顯示的兩個(gè)錯(cuò)誤生成函數(shù)中的每一個(gè)都可以提供它們自己的分隔符,如下所示:<?php echo form \ _error('field name','<div class =“error”>','</ DIV>'); ?>或者:<?php echo validation \ _errors('<div class =“error”>','</ div>'); ?>

  3. 在配置文件中設(shè)置分隔符您可以在application / config / form_validation.php中添加錯(cuò)誤分隔符,如下所示:$ config'error_prefix'='<div class =“error \ _prefix”>'; $ config'error_suffix'='</ div>';

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

如果您希望在每個(gè)表單字段旁邊顯示錯(cuò)誤消息,而不是列表,則可以使用該form_error()功能。

嘗試一下!更改您的表單,使其看起來像這樣:

<h5>Username</h5><?php echo form_error('username'); ?><input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" /><h5>Password</h5><?php echo form_error('password'); ?><input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" /><h5>Password Confirm</h5><?php echo form_error('passconf'); ?><input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" /><h5>Email Address</h5><?php echo form_error('email'); ?><input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />

如果沒有錯(cuò)誤,則不會顯示任何內(nèi)容。如果出現(xiàn)錯(cuò)誤,則會顯示消息。

重要

如果使用數(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)證數(shù)組(非$ _POST)

有時(shí)您可能想要驗(yàn)證不是源自$_POST數(shù)據(jù)的數(shù)組。

在這種情況下,您可以指定要驗(yàn)證的數(shù)組:

$data = array(        'username' => 'johndoe',        'password' => 'mypassword',        'passconf' => 'mypassword');$this->form_validation->set_data($data);

無論您是驗(yàn)證$_POST數(shù)據(jù)還是選擇其他陣列,創(chuàng)建驗(yàn)證規(guī)則,運(yùn)行驗(yàn)證和檢索錯(cuò)誤消息的工作方式都是相同的。

重要

您必須定義任何驗(yàn)證規(guī)則之前調(diào)用該set_data()方法。

重要

如果你想在單個(gè)執(zhí)行過程中驗(yàn)證多個(gè)數(shù)組,那么你應(yīng)該reset_validation()在設(shè)置規(guī)則和驗(yàn)證新數(shù)組之前調(diào)用該方法。

欲了解更多信息,請參閱下面的類參考部分。

將一組驗(yàn)證規(guī)則保存到配置文件

Form Validation類的一個(gè)很好的特性是它允許你將你的整個(gè)應(yīng)用程序的所有驗(yàn)證規(guī)則存儲在配置文件中。您可以將這些規(guī)則組織到“組”中。這些組可以在調(diào)用匹配的控制器/方法時(shí)自動加載,也可以根據(jù)需要手動調(diào)用每個(gè)組。

如何保存你的規(guī)則

要存儲您的驗(yàn)證規(guī)則,只需在application / config /文件夾中創(chuàng)建一個(gè)名為form_validation.php的文件即可。在那個(gè)文件中,你將放置一個(gè)名為$ config的數(shù)組和你的規(guī)則。如前所示,驗(yàn)證數(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'        ));

您的驗(yàn)證規(guī)則文件將自動加載并在您調(diào)用該run()方法時(shí)使用。

請注意,您必須為您的$config陣列命名。

創(chuàng)建一組規(guī)則

為了將您的規(guī)則組織到“集合”中,需要將它們放入“子陣列”中??紤]下面的例子,顯示兩組規(guī)則。我們?nèi)我庹{(diào)用這兩個(gè)規(guī)則“注冊”和“電子郵件”。你可以任意指定你的規(guī)則:

$config = array(        'signup' => 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'                )        ),        '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)用特定的規(guī)則組

為了調(diào)用一個(gè)特定的組,你將把它的名字傳遞給該run()方法。例如,要調(diào)用注冊規(guī)則,您將執(zhí)行以下操作:

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

將控制器方法與規(guī)則組關(guān)聯(lián)

調(diào)用規(guī)則組的另一種(更自動的)方法是根據(jù)您打算使用的控制器類/方法來命名它。例如,假設(shè)您有一個(gè)名為Member的控制器和一個(gè)名為signup的方法。以下是您的班級可能的樣子:

<?phpclass Member extends CI_Controller {        public 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ī)則組成員/注冊命名:

$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)一個(gè)規(guī)則組的命名方式與控制器類/方法的命名方式相同時(shí),當(dāng)該run()方法從該類/方法調(diào)用時(shí),它將自動使用。

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

Form Validation類支持使用數(shù)組作為字段名稱。考慮這個(gè)例子:

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

如果您確實(shí)使用數(shù)組作為字段名稱,則必須在幫助器函數(shù)中使用需要字段名稱的EXACT數(shù)組名稱以及您的驗(yàn)證規(guī)則字段名稱。

例如,要為上述字段設(shè)置規(guī)則,您可以使用:

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

或者,要顯示上述字段的錯(cuò)誤,您可以使用:

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

或者重新填充您要使用的字段:

<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è)例子一樣,你必須在輔助函數(shù)中使用確切的數(shù)組名稱:

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

如果您使用具有多個(gè)選項(xiàng)的復(fù)選框(或其他字段),請不要忘記在每個(gè)選項(xiàng)后留下一個(gè)空括號,以便將所有選擇都添加到POST數(shù)組中:

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

或者,如果您使用多維數(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)你使用輔助函數(shù)時(shí),你也會包含這個(gè)括號:

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

規(guī)則參考

以下是可供使用的所有本機(jī)規(guī)則的列表:

規(guī)則

參數(shù)

描述

需要

沒有

如果表單元素為空,則返回FALSE。


火柴

如果表單元素與參數(shù)中的表單元素不匹配,則返回FALSE。

matchesform_item

regex_match

如果表單元素與正則表達(dá)式不匹配,則返回FALSE。

regex_match /正則表達(dá)式/

不同

如果表單元素與參數(shù)中的元素沒有差異,則返回FALSE。

differsform_item

是獨(dú)特的

如果表單元素對參數(shù)中的表和字段名稱不唯一,則返回FALSE。注意:此規(guī)則要求啟用查詢生成器才能工作。

is_uniquetable.field

MIN_LENGTH

如果表單元素比參數(shù)值短,則返回FALSE。

min_length3

最長長度

如果表單元素長于參數(shù)值,則返回FALSE。

max_length12

exact_length

Returns FALSE if the form element is not exactly the parameter value.

exact_length8

greater_than

Yes

Returns FALSE if the form element is less than or equal to the parameter value or not numeric.

greater_than8

greater_than_equal_to

Yes

Returns FALSE if the form element is less than the parameter value, or not numeric.

greater_than_equal_to8

less_than

Yes

Returns FALSE if the form element is greater than or equal to the parameter value or not numeric.

less_than8

less_than_equal_to

Yes

Returns FALSE if the form element is greater than the parameter value, or not numeric.

less_than_equal_to8

in_list

Yes

Returns FALSE if the form element is not within a predetermined list.

in_listred,blue,green

alpha

No

Returns FALSE if the form element contains anything other than alphabetical characters.


alpha_numeric

No

如果表單元素包含除字母數(shù)字字符以外的任何內(nèi)容,則返回FALSE。


alpha_numeric_spaces

沒有

如果表單元素包含除字母數(shù)字字符或空格之外的任何內(nèi)容,則返回FALSE。修剪后應(yīng)使用,以避免在開始或結(jié)束時(shí)出現(xiàn)空格。


alpha_dash

沒有

如果表單元素包含除字母數(shù)字字符,下劃線或破折號之外的任何內(nèi)容,則返回FALSE。


數(shù)字

沒有

如果表單元素包含數(shù)字字符以外的任何內(nèi)容,則返回FALSE。


整數(shù)

沒有

如果表單元素包含除整數(shù)以外的任何內(nèi)容,則返回FALSE。


十進(jìn)制

沒有

如果表單元素包含除十進(jìn)制數(shù)以外的任何內(nèi)容,則返回FALSE。


is_natural

沒有

如果表單元素包含除自然數(shù)以外的任何其他值,則返回FALSE:0,1,2,3等


is_natural_no_zero

沒有

如果表單元素包含除自然數(shù)以外的任何值,但不為零,則返回FALSE:1,2,3等


valid_url

沒有

如果表單元素不包含有效的URL,則返回FALSE。


VALID_EMAIL

沒有

如果表單元素不包含有效的電子郵件地址,則返回FALSE。


valid_emails

沒有

如果逗號分隔列表中提供的任何值不是有效的電子郵件,則返回FALSE。


valid_ip

如果提供的IP地址無效,則返回FALSE。接受“ipv4”或“ipv6”的可選參數(shù)以指定IP格式。


valid_base64

沒有

如果提供的字符串包含有效的Base64字符以外的任何內(nèi)容,則返回FALSE。


注意

這些規(guī)則也可以稱為離散方法。例如:

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

注意

您還可以使用任何允許最多兩個(gè)參數(shù)的本地PHP函數(shù),其中至少需要一個(gè)參數(shù)(以傳遞字段數(shù)據(jù))。

準(zhǔn)備參考

以下是可供使用的所有準(zhǔn)備方法的列表:

Name

參數(shù)

描述

prep_for_form

沒有

DEPRECATED:轉(zhuǎn)換特殊字符,以便HTML數(shù)據(jù)可以顯示在表單字段中而不會被破壞。

prep_url

沒有

如果缺少URL,則添加“http://”。

strip_image_tags

沒有

從離開原始URL的圖像標(biāo)簽剝離HTML。

encode_php_tags

沒有

將PHP標(biāo)簽轉(zhuǎn)換為實(shí)體。

注意

您還可以使用任何PHP函數(shù)允許一個(gè)參數(shù),如trim()htmlspecialchars(),urldecode(),等。

類參考

class CI_Form_validationset_rules($field[, $label = ''[, $rules = ''[, $errors = array()]]])

參數(shù):

$ field(string) - 字段名稱$ label(字符串) - 字段標(biāo)簽$ rules(mixed) - 驗(yàn)證規(guī)則,作為由管道“|”分隔的字符串列表,或者作為數(shù)組或規(guī)則$錯(cuò)誤(數(shù)組)自定義錯(cuò)誤消息列表

返回:

CI_Form_validation實(shí)例(方法鏈接)

返回類型:

CI_Form_validation

  • $ fieldstring) - 字段名稱

  • $ label字符串) - 字段標(biāo)簽

  • $ rulesmixed) - 驗(yàn)證規(guī)則,作為由管道“|”分隔的字符串列表,或者作為數(shù)組或規(guī)則

  • $ errorsarray) - 自定義錯(cuò)誤消息的列表

Returns:  CI\_Form\_validation instance (method chaining)
Return type:  CI\_Form\_validation
允許您設(shè)置驗(yàn)證規(guī)則,如以上教程部分所述:
  • 設(shè)置驗(yàn)證規(guī)則

  • 將一組驗(yàn)證規(guī)則保存到配置文件

run([$group = ''])

參數(shù):

$ group(string) - 要運(yùn)行的驗(yàn)證組的名稱

返回:

成功為TRUE,如果驗(yàn)證失敗,則為FALSE

返回類型:

布爾

  • $ groupstring) - 要運(yùn)行的驗(yàn)證組的名稱

返回:成功時(shí)為TRUE,如果驗(yàn)證失敗,則返回FALSE
Return type:  bool
運(yùn)行驗(yàn)證例程。成功時(shí)返回布爾值TRUE,失敗時(shí)返回FALSE。您可以選擇通過方法傳遞驗(yàn)證組的名稱,如下所述:[將驗(yàn)證規(guī)則集保存到配置文件](about:blank#saving-groups)

set_message($lang[, $val = ''])

參數(shù):

$ lang(string) - 消息的規(guī)則是$ val(字符串) - 消息

返回:

CI_Form_validation實(shí)例(方法鏈接)

返回類型:

CI_Form_validation

  • $ langstring) - 消息的規(guī)則

  • $ val字符串) - 消息

Returns:  CI\_Form\_validation instance (method chaining)
Return type:  CI\_Form\_validation
允許您設(shè)置自定義錯(cuò)誤消息。參見[設(shè)置錯(cuò)誤消息](關(guān)于:空白#設(shè)置錯(cuò)誤消息)

set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']])

參數(shù):

$ prefix(string) - 錯(cuò)誤消息前綴$ suffix(string) - 錯(cuò)誤消息后綴

返回:

CI_Form_validation實(shí)例(方法鏈接)

返回類型:

CI_Form_validation

  • $ prefix字符串) - 錯(cuò)誤消息前綴

  • $ suffix字符串) - 錯(cuò)誤消息后綴

Returns:  CI\_Form\_validation instance (method chaining)
Return type:  CI\_Form\_validation
設(shè)置錯(cuò)誤消息的默認(rèn)前綴和后綴。

set_data($data)

參數(shù):

$ data(array) - 數(shù)據(jù)驗(yàn)證數(shù)組

返回:

CI_Form_validation實(shí)例(方法鏈接)

返回類型:

CI_Form_validation

  • $ dataarray) - 數(shù)據(jù)驗(yàn)證數(shù)組

Returns:  CI\_Form\_validation instance (method chaining)
Return type:  CI\_Form\_validation
允許你為驗(yàn)證設(shè)置一個(gè)數(shù)組,而不是使用默認(rèn)的`$ _POST`數(shù)組。

reset_validation()

返回:

CI_Form_validation實(shí)例(方法鏈接)

返回類型:

CI_Form_validation

error_array()

返回:

錯(cuò)誤消息數(shù)組

返回類型:

排列

error_string([$prefix = ''[, $suffix = '']])

參數(shù):

$ prefix(string) - 錯(cuò)誤消息前綴$ suffix(string) - 錯(cuò)誤消息后綴

返回:

作為字符串的錯(cuò)誤消息

返回類型:

  • $ prefix字符串) - 錯(cuò)誤消息前綴

  • $ suffix字符串) - 錯(cuò)誤消息后綴

Returns:  Error messages as a string
Return type:  string
返回格式為字符串并由換行符分隔的所有錯(cuò)誤消息(從錯(cuò)誤\ _array()返回)。

error($field[, $prefix = ''[, $suffix = '']])

參數(shù):

$ field(string) - 字段名稱$ prefix(字符串) - 可選前綴$ suffix(字符串) - 可選后綴

返回:

錯(cuò)誤消息字符串

返回類型:

  • $ fieldstring) - 字段名稱

  • $ prefix字符串) - 可選的前綴

  • $ suffix字符串) - 可選后綴

Returns:  Error message string
Return type:  string
返回特定字段的錯(cuò)誤消息,可選地為其添加前綴和/或后綴(通常為HTML標(biāo)簽)。

has_rule($field)

參數(shù):

$ field(string) - 字段名稱

返回:

如果該字段設(shè)置了規(guī)則,則為TRUE,否則為FALSE

返回類型:

布爾

  • $ fieldstring) - 字段名稱

Returns:  TRUE if the field has rules set, FALSE if not
Return type:  bool
檢查是否有指定字段的規(guī)則集。

助手參考

請參閱Form Helper手冊以了解以下功能:

  • form_error()

  • validation_errors()

  • set_value()

  • set_select()

  • set_checkbox()

  • set_radio()

請注意,這些是程序性功能,因此它們要求您預(yù)先安排它們$this->form_validation。

Previous article: Next article: