0

ユーザーが存在しない場合、ログイン画面にエラーが返されるはずですが、ユーザーは、以前にサインコントローラーに登録したかのようにホームページに移動します。ログインコントローラー(クレデンシャルの検証関数)と私のモデル(関数can_log_in())は、バウンスするはずのエラーを示します

モデル:

  class Membership extends CI_Model
{
function Membership()
{
    parent::__construct();
}


public function can_log_in()
{
    $this->db->select('*')->from('membership');
    $this->db->where('username', $this->input->post ('username'));
    $this->db->where('password', md5($this->input->post ('password')));

    $query = $this->db->get('membership');
    if ($query->num_rows() == 1)
    {
        return true;
    }

    else{

        return false;

    }

}

ログインコントローラー:

 class Login extends CI_Controller 
 {

   function Login()
    {
     parent::__construct();

      $this->load->model('membership');
    }


    function loguserin()

    {

$this->load->helper(array('form', 'url'));

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

$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]|trim');
$this->form_validation->set_rules('password', 'Password', 'required|md5|trim');


$username = $this->input->post('username');
$password = $this->input->post('password');
      if ($this->form_validation->run()==TRUE)
     {
          $this->load->model('membership');
           if($this->membership->can_log_in($this->input->post('username'),$this->input->post('password'))
       { // this is unepected despite a new if statement called
        $this->session->set_userdata('status', 'OK');
        $this->session->set_userdata('username', $username);  
        redirect('home');
        } else //this else is unexpected
          {
       $this->session->set_userdata('status', 'NOT_OK');

      $this->session->set_flashdata('Incorrect username/password');
       $this->index();
      }
    } else {
   $this->index; 

   }

  }







        function logout()
      {
$this->session->sess_destroy();
redirect ('start');
       }


      function index()
      {
      $this->load->view('shared/header');
       $this->load->view('account/logintitle');
      $this->load->view('account/loginview');
        $this->load->view('shared/footer');
       }
      }

もう一度感謝します:)まだテーブルにいない場合、ユーザーはホームページにサインインできないはずです。

4

2 に答える 2

1

あなたの論理はいたるところにあり、フォーム検証の概念を誤解しています。フォーム検証は、それだけのフォーム入力を検証しますが、資格情報は検証しません。run関数の外部からフォーム検証エラーを呼び出すことはできないため、使用しているvalidate_credentials関数は正直言って意味がありません。ですから、それを完全になくしたほうがよいでしょう。

まず、form_validationの後の最初の呼び出しは次のようになります。

if ($this->form_validation->run()==TRUE)
{
    $this->load->model('membership');
    if($this->membership->can_log_in($this->input->post('username'),$this->input->post('password')))
    {
    $this->session->set_userdata('status', 'OK');
    $this->session->set_userdata('username', $username);  
    redirect('home');
    } else {
    $this->session->set_userdata('status', 'NOT_OK');// you'll need to do something
   // here to tell them their credentials are wrong as I said this won't work through
   // the form validation, perhaps look into using $this->session->set_flashdata()
    $this->index();
    }
} else {
$this->index; //reload the index to display the validation errors

ログイン関数へのデータ送信はこれで完了です。関数は実際にデータを受信する必要があります。データを送信した最初のページではないため、投稿文字列は空になります。そのため、関数でデータを渡しました。その上。変更する必要があるモデルの唯一の部分は次のとおりです。

public function can_log_in($username,$password)
{
$this->db->select('*')->from('membership');
$this->db->where('username', $username);
$this->db->where('password', md5($password));
于 2012-11-22T21:52:17.240 に答える
0

交換してみてください

if ($this->form_validation->run())

if ($this->form_validation->run() && validate_credentials())
于 2012-11-22T18:25:01.923 に答える