2017-12-13 4 views
0

編集:自分で解決しようとしたときに、いくつかの名前が混ざっていました。私はコールバックなどの名前を固定し、同じエラーが続く。カスタムコードシナーフォームバリデーターでフォーム入力データとデータベースデータを比較するには?

私はcodeigniterウェブサイトのログインページを作成しようとしています。私はすでにユーザー名とパスワードを「ユーザー」テーブルに正しく入力する登録ページを持っています。カスタムフォームバリデーターに必要な関数を作成する構文を理解する上で問題があります。

パスワードとユーザー名のカスタムバリデーターに「自分のフィールド名に対応するエラーメッセージにアクセスできません」というエラーが表示されます。ここで

は、私は思う。これは、対応するビュー「ログイン」

<?php echo form_open('login_ctrl'); ?> 
<h1>Login</h1><hr/> 
<?php if (isset($message)) { ?> 
<?php } ?> 
<?php echo form_label('User Name :'); ?> <?php echo form_error('username'); ?><br /> 
<?php echo form_input(array('id' => 'username', 'name' => 'username')); ?><br /> 

<?php echo form_label('Password :'); ?> <?php echo form_error('password'); ?><br /> 
<?php echo form_input(array('id' => 'password', 'name' => 'password')); ?><br /> 

<?php echo form_submit(array('id' => 'submit', 'value' => 'Submit')); ?> 

<?php echo form_close(); ?><br/> 

最後に、これは対応するモデル「login_mdl」である(ある

class login_ctrl extends CI_Controller { 

function __construct() { 
parent::__construct(); 
$this->load->model('login_mdl'); 
} 
function index() { 

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

$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 

//Validating Name Field 
$this->form_validation->set_rules('username', 'Username', 'trim|required|callback_userCorrect'); 

//Validating Password Field 
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_passwordCorrect'); 

//variables to pass form input 
$username = $this->input->post('username'); 
$password = $this->input->post('password'); 

//reload login page if validation fails 
if ($this->form_validation->run() == FALSE) { 
$this->load->view('login'); 
} else { 
//functions for custom validation 
function userCorrect($username) { 
    $this->load->library('form_validation'); 
    //the loads the model that contains the function to compare input to database data 
    $userExists = $this->login_mdl->userExists($username); 

    if ($userExists) { 
     $this->form_validation->set_message(
      'userCorrect', 'correct user.' 
    ); 
     return true; 
    } else { 
     $this->form_validation->set_message(
      'userCorrect', 'not a valid user name.' 
     ); 
     return false; 
    } 
} 
function passwordCorrect($password) { 
    $this->load->library('form_validation'); 
    $passwordExists = $this->login_mdl->passwordCorrect($password); 

    if ($passwordExists) { 
     $this->form_validation->set_message('passwordCorrect', 'correct password.'); 
     return true; 
    } else { 
     $this->form_validation->set_message('passwordCorrect', 'invalid password.'); 
     return false; 
    } 
} 

コントローラ「login_ctrl」の関連部分であります問題はこの男にあるかもしれない)。

<?php 
class login_mdl extends CI_Model{ 
function __construct() { 
parent::__construct(); 
} 
function userExists($username) { 
    $this->db->select('id'); 
    $this->db->where('username', $username); 
    $query = $this->db->get('users'); 

    if ($query->num_rows() > 0) { 
     return true; 
    } else { 
     return false; 
    } 
} 

function passwordCorrect($password) { 
    $this->db->select('password'); 
    $this->db->where('username', $username); 
    $query = $this->db->get('users'); 
    $result = $query->row(); 
    return $result->password; 

    if ('password' == $password) { 
     return true; 
    } else { 
     return false; 
    } 
} 
} 
?> 

私は私の問題はデシベルコールやif文に関連していると思いますが、私はドキュメントを読み、時間のためにこれを固定で失敗してきたので、目の新しいペアをいただければ幸いです。

答えて

0

あなたの衣装ルール関数でフィールド名を作成する必要がありますあなたの関数のコールバックと同じです。したがって、これは次のようになります。

$this->form_validation->set_message(
      'userCorrect', 'correct user.' 

他の機能で同じことをしますか?

関連する問題