fc2ブログ

CakePHPで何かを作ろうとする 8日目

昨日の続きだが、状況確認も兼ねて今作ろうとしているものを改めて書いておく。

先日作った簡単な計算の特訓ページに、次の機能を追加する。
・ユーザー登録
・ログイン/ログアウト
・ログイン済かチェック
・式ごとの回答タイムをデータベースに登録
・データベースに登録された回答タイムを表示

やりたいことは「計算式ごとの回答タイム平均値を表示」なのだが、そのためには回答タイムを登録する必要があり、誰のデータかを識別するためにユーザー登録やログインが必要になる。

今日はユーザー登録機能とログアウト機能を作った。
また、式ごとの回答タイムをデータベースに登録する際の入力チェック部分を作った。
POSTデータに 6 + 7,0.625 という形で式とタイムが格納されており、以下のように正規表現を使ってチェックした。
foreach($_POST as $key => $value){
  if(preg_match("/^\\d+$/",$key) < 1){
    $this->log("不正なkey: " . $key, "debug");
    $chkFlg = false;  // チェックエラーフラグを立てて、入力チェックを続行
  }
  if(preg_match("/^(\\d+\\s*(?:\\+|-|\\*|\\/)\\s*\\d+),(\\d+\\.?\\d*)$/",$value,$match) < 1){
    $this->log("不正なvalue: " . $value, "debug");
    $chkFlg = false;  // チェックエラーフラグを立てて、入力チェックを続行
  }else{
    $this->log("POSTdata 式: " . $match[1] . " タイム: ". $match[2], "debug");
    $inExpres[] = $match[1];  // 式を配列へ格納
    $inTime[] = $match[2];  // タイムを配列へ格納
  }
}
この前正規表現について色々と調べたので、正規表現を書くのはそれほど苦労しなかった。でも (?: を使うのは初めてだ。
ereg()はPHP 5.3.0から非推奨」とマニュアルに書かれていたので、preg_match()を使用した。

現在の状況だが、「データベースに登録された回答タイムを表示」以外の機能は完成。
ただし、完成した機能の入力チェック処理、エラー処理に漏れが無いか見直す必要あり。
また、テストが不十分なのでせめて分岐を全部通すぐらいのテストはしたい。

明日で完成すればいいと思うが、テストとデバッグだけで丸一日かかりそうな気がする。
スポンサーサイト



コメント

コメントの投稿

非公開コメント

プロフィール

himax64

Author: 南西
30代後半の無職です。
就活もせずダラダラ生きてます。
作ったもの

最新記事
人気記事
検索フォーム
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QRコード
カウンター