2011-11-18 15 views
18

मेरे पास मेरे लॉगिन फॉर्म में एक फ़ंक्शन है जो जांचता है कि ईमेल और पासवर्ड डेटाबेस में मानों से मेल खाता है और यदि ऐसा है तो यह उपयोगकर्ता को सिस्टम में लॉग करता है।एक कस्टम कोडनिर्देशक सत्यापन नियम बनाना

यदि यह फ़ंक्शन गलत लौटाता है तो मैं एक सत्यापन त्रुटि प्रदर्शित करना चाहता हूं।

मेरी समस्या यह है कि मुझे यह सुनिश्चित करने के बारे में अनिश्चितता है कि यह कैसे सुनिश्चित किया जाए। संदेश पासवर्ड और ईमेल दोनों फ़ील्ड से संबंधित है, इसलिए मैं नहीं चाहता कि प्रत्येक इनपुट फ़ील्ड के लिए नियम केवल एक संदेश प्रदर्शित करे।

मैंने इसे प्राप्त करने के लिए फ्लैशडाटा का उपयोग करने का प्रयास किया है, लेकिन यह पृष्ठ केवल ताज़ा होने पर ही काम करता है।

मैं फ़ंक्शन $this->members_model->validate_member() फ़ंक्शन के लिए केवल एक नया सत्यापन नियम कैसे बना सकता हूं ??

$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 
     $this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email'); 
     $this->form_validation->set_rules('password', '"Password"', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $viewdata['main_content'] = 'members/login'; 
      $this->load->view('includes/template', $viewdata); 
     } 
     else 
     {  
       if($this->members_model->validate_member()) 
       { 

उत्तर

38

आप पूर्व के लिए अपने नियमों में callback_ उपयोग करते हैं, callbacks देखते हैं।

$this->form_validation->set_rules('email_address', '"Email address"', 'trim|required|valid_email|callback_validate_member'); 

और नियंत्रक में विधि जोड़ें। इस विधि सही या गलत

function validate_member($str) 
{ 
    $field_value = $str; //this is redundant, but it's to show you how 
    //the content of the fields gets automatically passed to the method 

    if($this->members_model->validate_member($field_value)) 
    { 
    return TRUE; 
    } 
    else 
    { 
    return FALSE; 
    } 
} 

फिर आप मामले में एक संबंधित त्रुटि बनाने की आवश्यकता सत्यापन विफल हो जाता प्राप्त करने के लिए इस CodeIgniter के फॉर्म मान्यता पुस्तकालय प्रदान कर रहा है

$this->form_validation->set_message('validate_member','Member is not valid!'); 
+2

नाम "_validate_member" बेहतर होगा .. – Ivan

+0

@Ivan यह आवश्यक नहीं है, लेकिन पर जोड़ सकते हैं पठनीयता, धन्यवाद –

+6

आवश्यक नहीं हो सकता है, लेकिन एक अग्रणी अंडरस्कोर विधि को "/ controller_name/validate_member/blah" के माध्यम से सुलभ होने से रोक देगा ... और डबल-अंडरस्कोर का उपयोग पूरी तरह से स्वीकार्य है IMO "callback__validate_member";) –

5

एक सबसे अच्छा तरीका है वापस जाने के लिए की जरूरत है। कहते हैं कि हम डेटाबेस तालिका users के क्षेत्र access_code के लिए access_code_unique नामक कस्टम सत्यापनकर्ता बनाना चाहते हैं।

आपको केवल नामक एक क्लास फ़ाइल बनाना है जो application/libraries निर्देशिका में है। विधि हमेशा लौट जाना TRUE या FALSE

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Form_validation extends CI_Form_validation { 
    protected $CI; 

    public function __construct() { 
     parent::__construct(); 
      // reference to the CodeIgniter super object 
     $this->CI =& get_instance(); 
    } 

    public function access_code_unique($access_code, $table_name) { 
     $this->CI->form_validation->set_message('access_code_unique', $this->CI->lang->line('access_code_invalid')); 

     $where = array (
      'access_code' => $access_code 
     ); 

     $query = $this->CI->db->limit(1)->get_where($table_name, $where); 
     return $query->num_rows() === 0; 
    } 
} 

अब आप आसानी से जोड़ सकते हैं अपने नए बनाए गए नियम

$this->form_validation->set_rules('access_code', $this->lang->line('access_code'), 'trim|xss_clean|access_code_unique[users]'); 
संबंधित मुद्दे