2010-08-20 15 views
5

जाँच मैं इस नियंत्रक एक लॉगिन के लिए स्थापित:Codeigniter फार्म मान्यकरण कॉलबैक से अधिक फ़ील्ड

<?php 
class Login extends Controller { 

    function __construct() { 
     parent::Controller(); 
     $this->form_validation->set_error_delimiters('', ''); 
     $this->output->enable_profiler(TRUE); 
    } 

    function index(){ 

     redirect('/login/terminal'); 

    } 

    function terminal() { 
    // terminal login 

     $this->form_validation->set_rules(array('username','password'), 'Username', 'callback_terminal_login_check[$username,$password]'); 
     if ($this->form_validation->run() == FALSE) { 
      $this->load->view('login_header'); 
      $this->load->view('login_terminal'); 
      $data['version'] = $this->master->GetVersion(); 
      $this->load->view('login_footer', $data); 
     } else { 
      redirect('/terminal'); 
     } 

    } 

    function terminal_login_check($username,$password) { 
    // callback function to perform terminal login 

     if ($this->authentication->DoTerminalAuthentication($username,$password)) { 
      echo $username; 
      return TRUE; 
     } else { 
      $this->form_validation->set_message('terminal_login_check', 'Invalid'); 
      return FALSE; 
     } 


    } 

} 

मैं किसकी तलाश कर रहा हूँ लाइन है कि फ़ॉर्म सत्यापन कॉलबैक >>$this->form_validation->set_rules(array('username','password'), 'Username', 'callback_terminal_login_check[$username,$password]');

मुझे पता करता है यह सही नहीं है। मूल रूप से मैं जो करना चाहता हूं वह उपयोगकर्ता के लॉगिन को संसाधित करने के लिए प्रमाणीकरण-> DoTerminalA प्रमाणीकरण मॉडल के विरुद्ध उपयोगकर्ता नाम और पासवर्ड की जांच करना है। मैं $username और $password फॉर्म फ़ील्ड पास करना चाहता हूं। यहां मेरा फॉर्म व्यू है यदि यह मदद करता है:

<div id="title">Terminal Login</div> 
<?php 
    if (validation_errors()) { 
     echo '<div id="error">' . validation_errors() . '</div>'; 
    } 
?> 

<?=form_open('login/terminal');?> 
<?=form_label('Username', 'username')?><br /> 
<?=form_input(array('id'=>'username','name'=>'username','value'=>set_value('username')))?><br /> 
<?=form_label('Password', 'password')?><br /> 
<?=form_password(array('id'=>'password','name'=>'password'))?><br /> 
<?=form_submit(array('name'=>'passwordsubmit','value'=>'Login >>'))?><br /> 
<?=form_close();?> 
+0

तो जवाब में से कोई भी अगर तुम सच में एक को स्वीकार करना चाहिए अपने प्रश्न का उत्तर। यदि आप नहीं करते हैं तो आप भविष्य में लोगों की मदद करने के लिए कम इच्छुक होंगे। – musoNic80

उत्तर

9

जैसा कि मैं इसे समझता हूं, फ़ील्ड आधार पर फ़ील्ड पर प्रमाणीकरण कार्य करता है। आप जो चाहते हैं उसे प्राप्त करने के लिए, मैं कॉलबैक को किसी एक फ़ील्ड में संलग्न कर दूंगा (शायद पासवर्ड फ़ील्ड सबसे अच्छा होगा) और उसके बाद वैश्विक POST सरणी का उपयोग करके अन्य फॉर्म फ़ील्ड डेटा तक पहुंचें। इस तरह आपको कॉलबैक फ़ंक्शन में पैरामीटर के रूप में कुछ भी पास करने की आवश्यकता नहीं है।

7

अपने सत्यापन नियमों को सेट करने के लिए अपने नियंत्रक में इसका उपयोग करें।

$this->form_validation->set_rules('username', 'Username', 'required'); 
$this->form_validation->set_rules('password', 'Password', 'required|callback_terminal_login_check'); 

और इस तरह की कॉलबैक कुछ। यदि आप अपने पोस्ट डेटा को डेटाबेस में तुलना कर रहे हैं तो मैं एक मॉडल का उपयोग करूंगा।

function terminal_login_check() 
{ 
    $username = $this->input->post('username'); 
    $password = $this->input->post('password'); 

    // LOAD MODEL HERE 

    if ($this->authentication->DoTerminalAuthentication($username, $password)) 
    { 
    echo $username; 
    return TRUE; 
    } 
    else 
    { 
    $this->form_validation->set_message('terminal_login_check', 'Invalid'); 
    return FALSE; 
    } 
} 

संपादित 2013-07-09: पासवर्ड सत्यापन नियम में जोड़ा आवश्यक फ़ील्ड आप डीबी हिट करने के लिए अगर किसी को एक पासवर्ड नहीं जोड़ता है की जरूरत नहीं है तो।

+1

+1 यह ग्लोबल्स का उपयोग करने से कहीं बेहतर है, क्योंकि कोडिनेटर पोस्ट ग्लोबल्स के बजाय इनपुट क्लास का उपयोग करने के लिए प्रोत्साहित करता है। –

2

मैं खाली इनपुट सत्यापन, अमान्य ईमेल पते, बहुत कम पासवर्ड आदि की जांच जैसे सरल इनपुट सत्यापन के लिए फॉर्म सत्यापन का उपयोग करना पसंद करता हूं। मैं प्रमाणीकरण जैसे अधिक जटिल तर्क के लिए फॉर्म सत्यापन का उपयोग नहीं करता हूं। मैं सत्यापन कॉलबैक फ़ंक्शन के बजाय एक्शन विधि में प्रमाणीकरण जांच डालूंगा। यह आपकी विशेष समस्या को साइड-स्टेपिंग करके प्राप्त कर देगा।

function terminal() 
{ 
    $this->form_validation->set_rules('username', 'Username', 'required'); 
    $this->form_validation->set_rules('password', 'password', 'required'); 

    if ($this->form_validation->run()) 
    { 
     $username = $this->input->post('username'); 
     $password = $this->input->post('password'); 

     if ($this->authentication->DoTerminalAuthentication($username, $password)) 
     { 
      // Handle successful login 
     } 
     else 
     { 
      // Authentication failed. Alert the view. 
      $this->load->view('terminal', array('login_failed' => true)); 
     } 
    } 
    else 
    { 
     $this->load->view('terminal', array('login_failed' => false)); 
    } 
} 

और फिर ध्यान में रखते हुए आप इस अपनी प्रवेश फार्म नीचे जगह कर सकते हैं

<?php if ($login_failed) : ?> 
    <span id="login-failed-message">Login failed</span> 
<?php endif; ?> 
संबंधित मुद्दे