2012-04-25 7 views
2

私はCodeigniterを使用するのが初めてで、フォーム検証ルールとカスタム検証メッセージを設定して、パスワードを忘れた形式で電子メールアドレスが存在する場合は電子メールを送信し、電子メールアドレスを送信しない場合は、フォームを再ロードする必要があります。フィールド値をユーザーが入力した値に設定し、電子メールアドレスが存在しないというエラーを返します。私は、コントローラに次のように持ってCI - 電子メールアドレスがDBに存在するかどうかを確認するためのパスワード検証フォームを忘れた

...

public function forgot_password() 
{ 
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email'); 

    if($this->form_validation->run() == FALSE) 
    { 
     $this->forgot_password_form(); 
    } 
    else 
    { 
     $this->load->model('membership_model'); 
     if($query = $this->membership_model->val_forgot_password()) 
     { 
      $data['main_content'] = 'forgot_password_sent'; 
      $this->load->view('includes/template', $data); 
     } 
     else 
     { 
      $this->form_validation->set_message('email_address','The email address you provided does not exist.'); 
      $this->forgot_password_form(); 
     } 
    } 
} 

とモデルで

...

public function val_forgot_password() 
{ 
    $this->db->where('email_address', $this->input->post('email_address')); 
    $query = $this->db->get($this->members); 

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

とフォームがある...

<?php 

echo form_open('login/forgot_password'); 
echo "Email Address: " . form_input('email_address', set_value('email_address', '')); 
echo br(2); 
echo form_submit('submit','Send Email'); 
echo form_close(); 
echo br(1); 

echo validation_errors('<p>Error: '); 

?> 

フォームが有効な電子メールアドレスで送信されると、正常に成功ページに進みますが、電子メールアドレスが存在しない場合は、フォームをリロードしてもエラーは発生しません。

ヘルプpls! :D

答えて

3

電子メールが存在することを確認するには、コールバックを使用する必要があります。だからあなたのコントローラは

public function _check_email_exists($email) 
{ 
    // LOAD AND USE YOUR MODEL TO CHECK EMAIL EXISTS HERE 
    if (! $email_exists) 
    { 
    $this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!'); 
    return FALSE; 
    } 
    else 
    { 
    return TRUE; 
    } 
} 

すべてこの

は、優れたCIのドキュメントに綴られている...ようなものになるだろう...

public function forgot_password() 
{ 
    $this->form_validation->set_rules('email_address','Email Address','trim|required|valid_email|callback__check_email_exists'); 

    if($this->form_validation->run() == FALSE) 
    { 
     // VALIDATION ERRORS, SHOW VIEWS 
    } 
    else 
    { 
     // ALL IS GOOD, UPDATE EMAIL, AND REDIRECT TO CURRENT URL 
    } 
} 

そして(まだあなたのコントローラで)あなたのコールバックを何かのようになりますここでは、あなたが新しいものであればCIコンベンションに固執することをお勧めします。

http://codeigniter.com/user_guide/libraries/form_validation.html

EDIT: codeigniter3でこれをやっている間、私が直面していた別の問題もあります。コールバックにメッセージフィールド名を指定する必要があります。だからではなく、$this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!');

のこれはあなたがMY_Form_validationを拡張する必要があります

$this->form_validation->set_message('_check_email_exists', 'That email address don\'t exist, sucka!');

+0

ええと私はこのコールバック関数を見て、これがあなたが確かに確信しているそれを行う最良の方法だろうと思った、ありがとう。 – pmgrace

0

する必要があり、あなたの関数は、どのような形態で使用することができますこの方法だけでなく、あなたのコントローラに存在するもの。

関連する問題