<?php class Controllers_login extends CI_Controller{ public function __construct(){ parent::__construct(); $this->load->database(); $this->load->library('session'); $this->load->helper('url'); $this->load->library('form_validation'); } public function index(){ $this->load->view('views_mainpage'); } public function first_login(){ $this->load->view('views_login'); } public function main(){ $this->form_validation->set_rules('email','mailaddress','required'); $this->form_validation->set_rules('password','mypassword','required'); if($this->form_validation->run()==FALSE){ $this->load->view('views_error'); } else{ $email=$this->input->post('email'); $password=$this->input->post('password'); $this->load->model('models_login'); $number_row=$this->models_login->exist_func($email,$password); //この辺がバグの原因になりうる if($number_row>0){ //get id by this email and password $user_id=$this->models_login->get_id($email,$password);//!!! $this->session->set_userdata(array('id'=>$user_id['id'])); $this->session->userdata('id'); $session_id =array('id'=>$user_id['id']); //get name by this session id $name_data['name']=$this->models_login->get_name($session_id); //send name for view $this->load->view('views_mainpage',$name_data); } else{ //$this->load->view('views_login'); $this->load->view('views_error'); } } } public function logout(){ $this->session->sess_destroy(); redirect("controllers_login"); } } ?>
<?php class models_login extends CI_Model{ public function __construct(){ parent::__construct(); $this->load->database(); $this->load->library('session'); $this->load->helper('url'); $this->load->library('form_validation'); } public function exist_func($email,$password){ $sql="SELECT*FROM login WHERE email=? AND password=?"; $query=$this->db->query($sql,array($email,$password)); //この辺がバグの原因になりうる $number_result=$query->num_rows(); return $number_result; } public function get_id($email,$password){ $sql="SELECT id FROM login WHERE email=? AND password=?"; $query=$this->db->query($sql,array($email,$password)); $row=$query->row_array(); return $row; } public function get_name($session_id){ $sql="SELECT name FROM login WHERE id=?"; $query=$this->db->query($sql,array($session_id)); $row=$query->row_array(); return $row; } } ?>
ログイン認証についての質問です。
フォームに入力したメールアドレスとパスワードが一致した行数を返して、
0より大きいかを判断するのがif($number_row>0)なのですが、このようなやり方だと、同じメールアドレスとパスワードが2件あった場合にバグの原因になるようです。データベースの方でユニークを設定する以外で考えています。ログインできたかログインできなかったかをtrueかfaulseで判定するにはどういったものを使えば良いかヒントお願いします。一応今のコードでも動くのですが、やはりこの書き方はよくないでしょうか。
回答1件
あなたの回答
tips
プレビュー