続:掲示板を作ろう その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;
    }
}

当然の如く、このままだとセッションクラスは動いてくれないのです。
んが、長いので本日はここまで。

次回の続:掲示板を作ろうは

  • カ○オ、コントローラファイルをいじる
  • イ○ノ!野球しようぜ!
  • 花○さんのモテキ 

の三本です。嘘です。
コントローラファイルをいじっていきます。
んがっぐぐ