CodeIgniter

CodeIgniterで会員サイト/ログインページの作成

更新日:

今日は、登録した会員情報でログインするための処理を作成します。プログラムの流れとして、会員サイトのトップページにアクセスした場合、基本的にログインページへ移動するように作成します。但し、既にログインできている場合は、ログインページへ移動しないで、そのままトップページを表示します。

それでは、実際に作成しながら考えていきましょう。ログイン用のページは前回作成しましたが、ログイン後のトップページを作成しておきます。空白でも構いませんが、味気ないので、『ようこそ、Wirnroad会員サイトへ』と表示したページを『application/views』フォルダに『top.php』ファイル名で保存します。

まず、前回作成したビューファイル『login.php』を開きます。『<?php echo validation_errors();?>』をフォームの上に入力し、フォームのアクションに『login』と入力します。

それと、テキストフィールド名を『email』『passw』に変更しておきます。これは、次で設定する検証グループ『login』の配列『filed』の名称と同じにします。

そして、『application/config』フォルダの『form_validation.php』に新しい検証グループ『login』を作成します。

  'login'=>array(
 array(
 'field' => 'email',
 'labbel' => 'メールアドレス',
 'rules' => 'required|htmlspecialchars|valid_email'
 ),
 array(
 'field' => 'passw',
 'label' => 'パスワード',
 'rules' => 'required|htmlspecialchars|md5'
 )
 )

それでは、コントローラの『members.php』に『login』メソッドを追加します。

 function login()
 {
	 //フォームバリデーションに登録してあるloginがFALSEなら
	if($this->form_validation->run('login') == FALSE)
	 {
		 //ビューファイル『login.php』を開きます。
		$error=array('login_err'=>'');
		$this->load->view('login',$error);
	//フォームバリデーションが全てOKなら
	 }else{
	 //入力データの整理
	 $email=$_POST['email'];
	 $passw=$_POST['passw'];

	 //データベースへの接続
	 $this->load->database();
	 //ログイン処理
	$sql="SELECT * FROM members WHERE email=? AND passw=?";
	$query=$this->db->query($sql,array($email,$passw));
	//もしクエリの行数が1件以上あれば
		if($query->num_rows() > 0)
		{
			$this->session->set_userdata(
				array('email'=>$email,'passw'=>$passw));
			$this->load->view('top');
		}else{
			$error=array('login_err'=>'メールアドレスかパスワードが違います');
			$this->load->view('login',$error);
		}
 	 }
  }

次に、ビューファイル『login.php』に新規登録ファイルへ戻るリンクとエラーメッセージの表示箇所を作成します。新規登録の文字をドラッグして選択し、リンク先を『entry』と入力します。次にログインページの下の方に『<?php echo $login_err;?>』を挿入します。

それでは、ブラウザで確認してみましょう。まずバリデーションのチェックです。メールアドレスに『nakada.info』パスワードを空白にして、ログインボタンを押してみます。

次に、間違ったパスワードで入力してみます。

最後に、正しいメールアドレスとパスワードを入力すると、トップページへ移動します。

それでは、毎回ログインページを経由するのではなく、セッションユーザデータの『email』と『passw』が会員データベーステーブル『members』のデータと一致したら、直接トップページへ移動するように設定します。『application/controllers』フォルダの『members』ファイルを開き、『index』メソッドを作成し、下記のコードを入力します。

  function index()
  {
	 //データベースへの接続
	 $this->load->database();
	 //セッションユーザデータの取得
	 $email=$this->session->userdata('email');
	 $passw=$this->session->userdata('passw');
	 //ログイン処理
	$sql="SELECT * FROM members WHERE email=? AND passw=?";
	$query=$this->db->query($sql,array($email,$passw));
	//もしクエリの行数が1件以上あれば
		if($query->num_rows() > 0)
		{
			//トップページへ移動
			$this->load->view('top');
	//クエリの件数が0件なら
		}else{
			//ログインページへ移動
			redirect('members/login');
		}
  }

それでは、ブラウザで確認してみます。

『http://ci.builwing.co.jp/members』と入力してみます。一度ログインできていれば、直接トップページへ移動します。

尚、セッションが終了するまでの秒数は、デフォルで2時間(7200秒)となっています。有効期限を変更したい場合は、『application/config』フォルダの『config.php』ファイルを開き248行目あたりの『$config['sess_expiration']=7200;』の数字を変更して下さい。有効期限のないセッションを使いたい場合は0に設定して下さい。とりあえず、今回は3日間(60×60×24×3=259,200)に設定してみます。

本日は以上です。次回からは、このトップページをツイッター風の会員サイトにしてみたいと思います。お楽しみに!!

-CodeIgniter
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.