続:掲示板を作ろう その6
今回はセッション管理の為にモデルをいじっていきます。
参照:セッションクラス : CodeIgniter ユーザガイド 日本語版
ログインの為のモデルを作成
application/models/ に loginout.php を作成
まずはお約束事。CI_model 継承しつつ class Loginout を作成。
コンストラクタで親コンストラクタを継承。
class Loginout extends CI_model { public function __construct(){ parent::__construct(); }
ユーザー定義関数 login を作成
- post された値をユーザーIDとパスワードに連想配列で代入
public function login() { $user_id = array( 'user_id' => $this->input->post('user_id') ); $password = array( 'password' => $this->input->post('password') );
ユーザーIDとパスワードが一致するデータが users テーブルから欲しいのでSQL文は
SELECT * FROM users WHERE user_id = $user_id AND password = $password
これを CodeIgniter のデータベースクラス、ActiveRecord クラスを使って記述
参照:Active Record クラス : CodeIgniter ユーザガイド 日本語版
まずは、users テーブルにあるかだけ確認したいので
$query->num_rows() で一致する行数を取得
$this->db->where($user_id); $this->db->where($password); $query = $this->db->get('users'); $result = $query->num_rows();
もし、post されたユーザーIDとパスワードの一致するデータがあれば $result には1が入ってる。一致するデータがなければ0。なので
if ($result != 0) { $result = $query->row(); $id = $result->id; $username = $result->name; $email = $result->email; $newdata = array( 'id' => $id, 'username' => $user_name, 'email' => $email, 'logged_in' => TRUE ); $this->session->set_userdata($newdata); } else { $data = array( 'error_message' => 'ユーザIDかパスワードが間違っています' ); return $data; }
一致するデータがある時 ( $result != 0 )
一致するデータがある時、$query->row() でデータを取得。$result に代入
id, name, email を抽出して、セッションに格納。
セッションにデータを保存するときに使うのが
$this->session->userdata();
毎度おなじみの如く連想配列 $newdata を入れてやる
そこで新たに、ログイン管理の為のデータ、logged_in をセッションに保存すると。
logged_in が TRUE の時、ログイン状態。それ以外はログインしていない状態を想定
一致するデータがない時 ( else )
$data にユーザーIDかパスワードが間違ってるとの記述を連想配列で代入
~~~~閑話休題~~~~
form_validation でエラー表示でもいいっちゃいいのだけど、
講座で習った話によると、セキュリティの関係上ユーザーIDとパスワードのどちらかが合ってると分かってしまうエラー表示はよろしくないとの事。
なので、ここだけは form_validation を使わずにエラー表示文を作成
~~~~ここまで~~~~
こんな感じで loginout.php 完成!
以下、ソースコード
public function login() { $user_id = array( 'user_id' => $this->input->post('user_id') ); $password = array( 'password' => $this->input->post('password') ); $this->db->where($user_id); $this->db->where($password); $query = $this->db->get('users'); $result = $query->num_rows(); if ($result != 0) { $result = $query->row(); $id = $result->id; $username = $result->name; $email = $result->email; $newdata = array( 'id' => $id, 'username' => $user_name, 'email' => $email, 'logged_in' => TRUE ); $this->session->set_userdata($newdata); } else { $data = array( 'error_message' => 'ユーザIDかパスワードが間違っています' ); return $data; } }
当然の如く、このままだとセッションクラスは動いてくれないのです。
んが、長いので本日はここまで。
次回の続:掲示板を作ろうは
- カ○オ、コントローラファイルをいじる
- イ○ノ!野球しようぜ!
- 花○さんのモテキ
の三本です。嘘です。
コントローラファイルをいじっていきます。
んがっぐぐ