学習日記52日目

スタートアップ研修記はこちらです。

どうも、enomotoです。
ようやく梅雨らしく雨が降ってきました。
結局、土曜日も遠出できなかったなーとか思いつつ
今日も日記をお送りしたいと思います。

先週までの簡単なまとめ

48日目から始めたカレンダー制作を始めました。仕様を決め実装し自らテストして
課題を完成させるものです。
本日までに

  1. 月ごとのカレンダーが表示できる(1ヶ月単位)
  2. 日ごとの詳細画面がありスケジュールを見ることができる
  3. 上記2のスケジュール詳細画面では、一覧表示とスケジュール登録・削除・編集ができる。
  4. ログイン機能を付ける。

まで、終わっています。

今日、やったこと

  • 複数ユーザーで使えるようにした。
  • 新規登録画面を作った。
  • テストケースを書きながらテストを実行。
  • 細々とした機能を追加。

現在出ている不都合

  • 今のところ問題なし。

次回以降の課題

  • 完成

現在のファイル構成

|-- calendar
|   |-- create_db_table.txt
|   |-- lib
|   |   |-- DB.php
|   |   |-- controller.php
|   |   |-- library.php
|   |   `-- multiuser_lib.php
|   |-- modules
|   |   |-- admin
|   |   |   |-- logic
|   |   |   |   `-- users_view.php
|   |   |   `-- view
|   |   |       `-- users_view.php
|   |   `-- calendar
|   |       |-- logic
|   |       |   |-- day_view.php
|   |       |   `-- month_view.php
|   |       `-- view
|   |           |-- day_view.php
|   |           `-- month_view.php
|   |-- test_case_multi_mode.txt
|   |-- test_case_single_mode.txt
|   `-- web
|       |-- css
|       |   `-- style.css
|       `-- index.php

/modules/admin/logic/users_view.php

<?php

class Admin 
{
  public $cal_title;
  public $lib;
  public $account;
  public $pass;
  private $sql;
  public $result;
  public $list;

  public function render($get) {
    require_once($get);
    exit();
  }

  public function execute() {
    // タイトル設定
    $this->cal_title = '新規登録';
    // AccountとPassがあったら登録処理
    if (isset($_POST['entrymode']) && isset($_POST['account']) && isset($_POST['pass'])) {
      $this->lib = new Library();
      $this->account = $this->lib->changeSpecialParameter($_POST['account']);
      $this->pass = $this->lib->changeSpecialParameter($_POST['pass']);
      // AccountとPassが半角英数字かチェックして、問題なければコミットする。
      if (preg_match('/^[a-zA-Z0-9]{1,}$/',$this->account) && preg_match('/^[a-zA-Z0-9]{1,}$/',$this->pass)) {
        // IDにかぶりがないかチェック
        $this->lib->connectDB();
        DB::selectdb();
        $this->sql = 'SELECT account FROM users;';
        $this->result = $this->lib->readDB($this->sql);
        while($this->list = $this->lib->readDBfetch($this->result)) {
          if ($this->list['account'] == $this->account) {
            // 被っていたらさようなら。
            header("Location: ?mode=entry");
            exit();
          }
        }
        $this->commitUser($this->account,$this->pass);
      } 
    }
  }

  // コミット
  public function commitUser($id,$pass) {
    $create_at = date('Y-m-d H:i:s');
    $lib = new Library();
    $lib->connectDB();
    DB::selectdb();
    $md5pass = MultiUser::passcreate($pass);
    $keyid = MultiUser::keycreate($id,$md5pass);
    $this->sql = sprintf('INSERT INTO users(account,pass,create_at,keyid) VALUE(\'%s\',\'%s\',\'%s\',\'%s\');'
                         ,$id,$md5pass,$create_at,$keyid);
    $lib->commitDB($this->sql);
    DB::close();
    header("Location: ?");
  }

}