2012-12-03 16 views
14

के लिए is_unique है, मैं यह समझने की कोशिश कर रहा हूं कि मैं निम्नलिखित स्थिति में कोडिनेटर फॉर्म सत्यापन लायब्रेरी से is_unique नियम का उपयोग कैसे कर सकता हूं।codeigniter फॉर्म सत्यापन

मैं एक उपयोगकर्ता संपादित करें प्रपत्र प्रस्तुत करने के लिए कोशिश कर रहा हूँ और नियम है:

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|is_unique[users.user_name]'); 

क्या रूप में अन्य मूल्यों बदले जा रहे हैं लेकिन यह मान ही रहता है। फॉर्म यह देखने जा रहा है कि यह मान पहले से मौजूद है, इसलिए यदि यह मान परिवर्तित नहीं होता है तो मैं इसे संपादन से कैसे सुरक्षित रखूंगा।

उत्तर

28

उदाहरण के रूप में अपने कोड का उपयोग करके, is_unique सत्यापन नियम डेटाबेस तालिका में user_name नामक फ़ील्ड की तलाश करके काम करता है। यदि एक ही मान वाले फ़ील्ड मौजूद है तो यह गलत के रूप में मान्य है।

यह सुनिश्चित करने के लिए कि जब उपयोगकर्ता एक नया मान सबमिट करता है तो यह केवल तभी चलता है जब आप डेटाबेस से खींचे गए मान के विरुद्ध पोस्ट मूल्य $this->input->post('user_name') चेक कर सकते हैं। यदि वे वही हैं, तो is_unique मान्य न करें;

if($this->input->post('user_name') != $original_value) { 
    $is_unique = '|is_unique[users.user_name]' 
} else { 
    $is_unique = '' 
} 

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique); 
+0

मैं मूल मूल्य को परिभाषित करता हूं? –

+1

यह डेटाबेस से लिया गया उपयोगकर्ता उपयोगकर्ता नाम का मूल मूल्य होगा। यदि कथन उपयोगकर्ता द्वारा सबमिट किए गए डेटा के साथ मूल उपयोगकर्ता_नाम की तुलना करता है। यदि उपयोगकर्ता अपना उपयोगकर्ता नाम बदलता है, तो यह देखने के लिए जांच करेगा कि वह मान पहले से मौजूद नहीं है, अन्यथा यह सामान्य सत्यापन करेगा। – Jeemusu

+0

तो मुझे यह पता लगाने के लिए एक और क्वेरी सेट अप करने की आवश्यकता है कि पुराना मूल्य क्या था? –

6

अभी भी CodeIgniters 'मान्यता पुस्तकालय ... उपयोग edit_unique जहां एक अतिरिक्त पैरामीटर कौन सी पंक्ति संपादित कर रहे हैं की पहचान है पारित उपयोग करते हुए, मुझे लगता है, उसके चारों ओर जाने के लिए एक बेहतर तरीका है .. नीचे देखें .. मैं इसका इस्तेमाल और मेरे लिए बहुत ठीक काम करता है .. आशा है कि यह मदद करता है

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|edit_unique[users.user_name.'.$id.']'); 
+4

फ़ंक्शन edit_unique() [इस उत्तर] में उपलब्ध है (http://stackoverflow.com/a/15930074/1356425)। – Apostle

0

यहाँ एक आसान तरीका है कि मेरे लिए काम किया है और अच्छी तरह से प्रलेखित कोड का उपयोग करता है (यह साझा करने के लिए https://github.com/ivantcholakov करने के लिए धन्यवाद!)। मैंने पाया यह (एमआईटी लाइसेंस प्राप्त) https://github.com/bcit-ci/CodeIgniter/issues/3109#issuecomment-46346280

  1. डाउनलोड https://github.com/ivantcholakov/starter-public-edition-3/blob/master/platform/application/libraries/MY_Form_validation.php पर जिक्र किया गया और आवेदन \ पुस्तकालयों में अपने आवेदन \ MY_Form_validation.php
  2. __construct से इन दो पंक्तियों() हटाने के लिए सहेजें:

    $ इस-> CI-> load-> सहायक ('चेकबॉक्स'); $ यह-> सीआई-> लोड-> सहायक ('ईमेल');

  3. __construct() और अद्वितीय() को छोड़कर सभी कार्यों को हटाएं।

  4. अपने नियंत्रक की विधि __construct() के अंत में इस पंक्ति जोड़ें:

    $ this-> load-> पुस्तकालय ('form_validation');

  5. अद्वितीय() विधि के प्रलेखन के अनुसार इस तरह की एक "अद्वितीय" नियम जोड़ने के लिए (उदाहरण के लिए यदि आप पहले से ही आवश्यक है और ट्रिम नियम) अपने सत्यापन नियम अद्यतन:

    ... | आवश्यक | अनन्य [ । tablename.fieldname, tablename (PrimaryKey से इस्तेमाल के लिए अद्यतन)] | ट्रिम ...

0
function check_unique_user_name($user_name) { 
      $query= $this->db->select('user_name') 
        ->from('emp') 
        ->where('id',$user_name); 

      $query = $this->db->get(); 
      if ($query->num_rows() > 0) { 
      return $query->row()->user_name; 
     } 
for $original_value you have to write function in model after Jeemusu code 
0

बढ़ाएँ Form_validation.php पुस्तकालय आवेदन के अंदर वर्ग बनाने/पुस्तकालयों नाम MY_Form_validation फ़ाइल।php

<?php 

class MY_Form_validation extends CI_Form_validation{ 
    protected $ci; 
    public function __construct($config = array()){ 
       parent::__construct($config); 
       $this->ci =& get_instance(); 
     } 

       public function is_unique_update($str, $field){ 
       $explode=explode('@', $field); 
       $field_name=$explode['0']; 
       $field_id_key=$explode['1']; 
       $field_id_value=$explode['2']; 
       sscanf($field_name, '%[^.].%[^.]', $table, $field_name); 

       if(isset($this->ci->db)){ 
         if($this->ci->db->limit(1)->get_where($table, array($field_name => $str,$field_id_key=>$field_id_value))->num_rows() === 0){ 
          $this->ci->form_validation->set_message('is_unique_update', 'The {field} field must contain a unique value.'); 
          return false; 
         } 
         return true; 
        } 


      } 
} 
अब

अपने नियंत्रक

$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|is_unique_update[[email protected]@'.$id.']'); 

में "@" मैं स्ट्रिंग विस्फोट के लिए इस्तेमाल किया
जहां आईडी उपयोगकर्ताओं तालिका के प्राथमिक कुंजी
और $ आईडी आईडी का मूल्य है। अब आप किसी भी नियंत्रक में is_unique_update सत्यापन का उपयोग कर सकते हैं।

1
$something = $this->input->post('something'); 

$this->form->validation->set_rules('something','Something','xss_clean|is_unique['tbl'.users]'); 

if($this->form_validation->run()== FALSE){ 

} 
0

हम के लिए is_unique

ऍक्स्प के लिए

तालिका नाम जोड़ने के लिए होना आवश्यक है।

is_unique[users.email] 
संबंधित मुद्दे