首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

CodeIgniter 表單驗證完整實作指南:從視圖到控制器的最佳實踐

     編輯:PHP 綜合知識

前言

表單驗證是 Web 應用的核心功能之一。CodeIgniter 內建的 Validation 類庫提供了規則設定、錯誤訊息客製化、欄位標籤對應等完整功能。本文以完整專案結構示範,從視圖設計到控制器邏輯,帶你掌握 CI 表單驗證的標準流程。

一、專案結構規劃

application/
├── views/
│   ├── myform.php          # 表單視圖
│   └── formsuccess.php     # 成功視圖
└── controllers/
    └── form.php            # 表單控制器

二、視圖層實作

1. 表單頁面 myform.php

<html>
<head>
    <title>My Form</title>
</head>
<body>
    <?php echo $this->validation->error_string; ?>
    <?php echo form_open('form/index'); ?>
    
    <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>

關鍵點解析

  • form_open():自動產生含 CSRF 保護的表單標籤,action 指向 form/index
  • $this->validation->error_string:顯示所有驗證錯誤訊息
  • 輸入框 name 屬性需與驗證規則鍵名一致

2. 成功頁面 formsuccess.php

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

三、控制器層實作 form.php

<?php
class Form extends Controller {
    function index() {
        // 載入輔助函式與驗證類庫
        $this->load->helper(array('form', 'url'));
        $this->load->library('validation');
        
        // 1. 定義驗證規則
        $rules['username'] = "required";
        $rules['password'] = "required";
        $rules['passconf'] = "required";
        $rules['email'] = "required";
        $this->validation->set_rules($rules);
        
        // 2. 設定錯誤訊息分隔符(可選)
        // $this->validation->set_error_delimiters('
', '
'); // 3. 定義欄位顯示名稱(用於錯誤訊息) $fields['username'] = 'Username'; $fields['password'] = 'Password'; $fields['passconf'] = 'Password Confirmation'; $fields['email'] = 'Email Address'; $this->validation->set_fields($fields); // 4. 執行驗證 if ($this->validation->run() == FALSE) { $this->load->view('myform'); } else { $this->load->view('formsuccess'); } } } ?>

流程說明

  1. 載入依賴:form 提供 form_open(),url 提供 anchor()
  2. 設定規則:陣列鍵名對應表單 name,值為規則字串(支援管線符串聯多規則)
  3. 設定欄位標籤:錯誤訊息將顯示「The Username field is required.」而非「The username field...」
  4. 執行驗證:run() 回傳布林值,失敗重載表單視圖(保留用戶輸入),成功載入成功視圖

四、常用驗證規則速查表

多規則串聯:"required|valid_email|callback_check_unique"

五、自訂回調驗證範例

// 控制器中加入
function check_unique($str) {
    $this->load->model('User_model');
    if ($this->User_model->email_exists($str)) {
        $this->validation->set_message('check_unique', '此 Email 已被註冊');
        return FALSE;
    }
    return TRUE;
}

// 規則中使用
$rules['email'] = "required|valid_email|callback_check_unique";

六、瀏覽器測試

訪問:https://localhost:8888/index.php/form/index

  • 空白送出 → 顯示四欄位必填錯誤
  • Email 格式錯誤 → 顯示格式錯誤
  • 全部正確 → 跳轉成功頁面

七、最佳實踐建議

  1. 規則集中管理:大型專案建議將規則定義在 config/form_validation.php
  2. 錯誤訊息客製化:使用 set_message() 或語言包覆蓋預設訊息
  3. 保留用戶輸入:視圖中 value="<?=set_value('username')?>" 避免重複輸入
  4. XSS 防護:搭配 xss_clean 規則或全域 $config['global_xss_filtering'] = TRUE

八、結語

CodeIgniter 表單驗證類庫功能完備,遵循「規則設定 → 執行驗證 → 視圖回饋」標準流程,即可構建健壯的表單處理機制。掌握回調驗證與規則集中管理,能應對企業級專案的複雜驗證需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
規則說明範例
required必填"required"
min_length[n]最小長度"min_length[6]"
max_length[n]最大長度"max_length[12]"
exact_length[n]固定長度"exact_length[10]"
valid_emailEmail 格式"valid_email"
valid_ipIP 格式"valid_ip"
alpha僅字母"alpha"
alpha_numeric字母數字"alpha_numeric"
matches[field]與某欄位相同"matches[password]"
callback_func自訂回調函式"callback_check_unique"