0

Code Igniter のネイティブ フォーム バリデーション エラー関数を適切に機能させるのに非常に苦労しているため、あきらめようとしています。私のロジックは矢印のようにまっすぐに見えますが、エラー ポージングの動作は、私のロジックに基づいたループに陥っています。

ここに何が起こっているかのリストがあります。

*フィールドに何も入力せずにフォームを送信すると、無効な電子メールとパスワードのエラーが発生するはずです

*正しい電子メールを入力してパスワード フィールドを空白のままにすると、適切な無効なパスワード エラーが表示されます。

*正しいメールと間違ったパスワードを入力すると、ページが白くロードされます

※パスワード欄だけ入力すると=無効なメールが出てきます

※意味不明なメールを入力してパスワードを空欄にすると=無効なメールが表示される

起こっている偽のフードの多くの組み合わせがあります。

また、入力された電子メールがデータベースに存在しない場合に認識される場所に固有の電子メールを作成したいと考えています。

私はこれにあまりにも長い間立ち往生しており、本当に助けが必要です. 私はコードイグナイターに不慣れで、なぜこれが起こっているのか本当に混乱しています。どんな助けでも大歓迎です。

これが私のコードです:

形:

<?php
echo form_open('auth/validate_credentials_login');
echo "<span class='errors_login'>";
echo form_error('email_login');
echo "</span>";
echo form_label('', 'Email', 'email_login');
$data = array( 'name' => 'email_login', 'class' => 'input', 'placeholder' => 'Email');
echo form_input($data, set_value('email_login'));
echo "<span class='errors_login'>";
echo form_error('password_login');
echo "</span>";
echo form_label('', 'Password;', 'password_login');
$data = array( 'name' => 'password_login', 'class' => 'input', 'placeholder' => 'Password');
echo form_password($data, set_value('sha1(password_login)'));
echo form_submit('submit_login', 'Login');
echo form_close();
?>

コントローラ:

function validate_credentials_login()
        {
            $this->load->library('session');
            $this->load->helper(array('form','url'));
            $this->load->model('user_model', 'um');
            $this->load->library('encrypt');
            $this->load->library('form_validation');
            $this->form_validation->set_rules('email_login', 'Email', 'required');
            $this->form_validation->set_rules('password_login', 'Password', 'required');
            $login = $this->input->post('submit_login');

            if($login) {
                if($this->form_validation->run() == FALSE)
                {
                    $data['main_content'] = 'home/home_page';
                    $this->load->view('includes/templates/home_page_template', $data);
                }
                else 
                {
                    $user = $this->um->validate_home_login(array('email' => $this->input->post('email_login')));

                        if($user->password == $this->encrypt->sha1( $user->salt .           $this->encrypt->sha1($this->input->post('password_login')))) {
                            $this->session->set_userdata(array(
                                'email' => $this->input->post('email_login')
                                    ));
                                redirect('account/edit');
                                exit;
                            }
                        }
                    }
                }

前もって感謝します!

4

1 に答える 1

4

正しいメールアドレスと間違ったパスワードを入力すると=ページが白く読み込まれます

elseこれは、ここに条件がないためです。

if($user->password == $this->encrypt->sha1($user->salt.$this->encrypt->sha1($this->input->post('password_login')))) {
        $this->session->set_userdata(array(
            'email' => $this->input->post('email_login')
        ));
        redirect('account/edit');
        exit;
    }
}
// do nothing?

リスト内の他のすべては期待される動作のように聞こえますが、それが正常に機能していることを確認する必要がある場合があります$this->um->validate_home_login()

exitちなみに、電話した後は必要ありませんredirect()、それはあなたのためにそれをします。

また、set_value('sha1(password_login)')私には怪しげに見えますが、あなたが思っていることをしているとは思いません。パスワード値をリテラル文字列に設定しますsha1(password_login)。パスワードフィールドに事前入力することはお勧めしません。空のままにしてください。

CIのフォーム検証は間違いなく壊れていません。実際には非常にうまく機能しているので、イライラしないでください。ドキュメントを確認し、すべてが正しく機能するようになるまで、もっと簡単なものを試してみるのは良い考えかもしれません。

また、入力された電子メールがデータベースに存在しないかどうかを認識する場所に固有の電子メールを作成したいと思います。

is_uniqueルールを確認してください:

http://ellislab.com/codeigniter/user_guide/libraries/form_validation.html#rulereference

$this->form_validation->set_rules(
    'email_login',
    'Email',
    'required|is_unique[your_table.your_email_field]'
);
于 2012-10-09T17:29:38.887 に答える