2

Codeigniterを使用するのは初めてで、パスワードを忘れたフォームで送信された電子メールアドレスがデータベースに存在するかどうかを確認するためのフォーム検証ルールとカスタム検証メッセージを設定する必要があります。メールアドレスが存在する場合はメールを送信します。存在しない場合はフォームを再読み込みし、フィールド値をユーザーが入力した値に設定して、メールアドレスが存在しないというエラーを入力します。

私はコントローラーに次のものを持っています...

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

4

2 に答える 2

3

電子メールが存在することを確認するには、コールバックを使用する必要があります。したがって、コントローラーは次のようになります...

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
    }
}

そして、あなたのコールバック(まだコントローラーにあります)は次のようになります...

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 ドキュメントに詳しく説明されています。CI の慣習に慣れていない場合は、CI の規則に従うことをお勧めします。

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

編集: codeigniter3 でこれを行っているときに直面していた別の問題もあります。コールバックにメッセージ フィールド名を付ける必要があります。だから代わりに$this->form_validation->set_message('email_address', 'That email address don\'t exist, sucka!');

これは

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

于 2012-04-25T20:25:02.083 に答える
0

を拡張する必要がMY_Form_validationあります。このようにして、コントローラーに存在するフォームだけでなく、任意のフォームで関数を使用できます。

于 2012-04-26T11:43:14.457 に答える