PHP の学習 (24) 簡単なエラー処理 (2)

今日の学習

先日の年齢入力フォームの件の続きです。諸々修正した改良版のコードも掲載されていたので、こちらも写経して読んでいきます。(変数名、メッセージの内容を一部短縮しています)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
if (isset($_POST["uranai"])) {
  $age = mb_convert_kana($_POST["age"],"a","EUC-JP");
  $error_msg = array();
  if (is_numeric($age) == false) {
    $error_msg[] = "please type numeric.";
  } elseif ($age < 1 || $age > 120) {
    $error_msg[] = "please input 1< and >120";
  }

  if (!count($error_msg)) {
  $sorry_msg = "ng";
  $uranai_msg[1] = "you are 10-19.";
  $uranai_msg[2] = "you are 20-29.";
  $uranai_msg[3] = "you are 30-39.";
  $uranai_msg[4] = "you are 40-49.";

  $sedai = floor($age / 10);

  if (isset($uranai_msg[$sedai])) {
    print($uranai_msg[$sedai]);
  } else {
    print($sorry_msg);
  }
  }
} else {
  $age = 25;
}
?>
<html>
<body>
<?php
if (count($error_msg)) {
  foreach($error_msg as $msg) {
    print($msg);
  }
}
?>

<form action = "sample_uranai2.php" method = "POST">
  年齢を教えてください:
<input type = "text" name = "age"
 value = "<?php print(htmlspecialchars($age, ENT_QUOTES));?>">
<input type = "submit" name = "uranai" value = "submit">
</form>
</body>
</html>

まず、入力された数字が全角だった場合に半角に変換するため、 mb_convert_kana() で処理した値を変数 $age に入れています。

変数 $error_msg という空の配列を用意しています。エラーの種類によって表示させるエラーメッセージを変えるけれども変数は一つ、ということですね。

is_numeric() が false 、つまり入力された値が数字ではない場合、また数字でも 1 未満もしくは 121 以上の場合はエラーとしています。演算子 || は or ですね。

if (!count($error_msg)) というところは、まず条件式の頭に ! が付いているので「もし条件式が false だったら」という意味になり、その条件式では count() で配列 $error_msg の要素数を調べています。

if 文では「要素数がゼロの配列」は false になるので、要するに $error_msg が空だったら、ということですね。

(つづく)

e ラーニングサイトを構築するソフトウェア Moodle

今日の学習

先日、大手 SIer に勤めている友人と会った際に Moodle という、e ラーニングサイトを構築するソフトウェアを教えて貰いました。

スクリーンショット(2011-02-28 23.02.52)

Wiki や CMS のようにサーバにインストールして使用するもので、オープンソースのソフトでした。

ムードルはPHPで開発されている。すなわちPHPの動作するUNIX、Linux、FreeBSD、Windows、Mac OS XなどほとんどのOSで動作し、またPHPをサポートしたwebホスティングサービスを行うプロバイダーで使用可能である。 またデータは単一のデータベースに格納され、主にMySQLとPostgreSQLがサポート対象であるが、ADOdbを使用しているためADOおよびODBC経由で商用データベースも使用可能である。
ムードル – Wikipedia

大学のサイトでも使われているところが結構あるようです。

gihyo.jp で連載記事もありました。

関連書籍

PHP の学習 (23) 簡単なエラー処理 is_numeric()

今日の学習

今日は手元にテキストがないので、Web 上のサンプルをもとに勉強です。参照したのはこちら。

年齢を入力してその範囲に応じて表示するメッセージを変更します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
if (isset($_POST["uranai"])) {
  if (is_numeric($_POST["age"]) == false) {
    print("年齢は数字で教えてください");
    exit();
  }
  $sorry_msg = "ng";
  $uranai_msg[1] = "you are 10-19.";
  $uranai_msg[2] = "you are 20-29.";
  $uranai_msg[3] = "you are 30-39.";
  $uranai_msg[4] = "you are 40-49.";

  $sedai = floor($_POST["age"] / 10);

  if (isset($uranai_msg[$sedai])) {
    print($uranai_msg[$sedai]);
  } else {
    print($sorry_msg);
  }
}
?>
<html>
<body>
<form action = "sample_uranai.php" method = "POST">
  年齢を教えてください:
<input type = "text" name = "age" value = "">
<input type = "submit" name = "uranai" value = "submit">
</form>
</body>
</html>

フォームに入力した値を POST で送信し、その値が数字かどうかを is_numeric() で判定して数字以外の場合はエラーメッセージを表示させます。

数字であっても 9 以下、50 以上の場合はエラーとなります。入力した値を 10 で割って floor() で端数を切り捨てたものを $uranai_msg のインデックスに使うというかたちですね。

1 〜 4 であれば設定したメッセージが表示されると。1 〜 4 以外の値だと $sorry_msg を表示します。

スクリーンショット(2011-02-27 2.12.56)

参照 URL

今日の復習

Emacs でファイルを操作する Dired でファイルをリネームするコマンドを覚えました。

まず C-x d で Dired バッファを開きます。対象のファイルにカーソルをあわせて R つまり Shift-r を入力するとミニバッファで新しいファイル名を入力できるようになります。

参照 URL

Emacs の学習 (9) Twitter に Emacs からアクセスする twittering-mode.el

今日の学習

引き続き Emacs 関連で、Twitter を閲覧、投稿するためのメジャーモード twittering-mode.el を試してみました。

こちらから最新版 1.0.0 をダウンロードして elisp を入れるディレクトリに設置します。私の場合は ~/.emacs.d/elisp というディレクトリに入れています。
ファイルを置いたら .emacs に設定内容を書き加えます。

1
2
3
(require 'twittering-mode)
(setq twittering-username "Twitter ユーザ名")
(setq twittering-password "Twitter パスワード")

これで準備は整いました。簡単でよいですね。

  • M-x twit で twittering-mode 開始
  • C-c C-f でタイムライン取得
  • C-c C-s で twit 投稿画面へ、入力後 C-c C-c でポスト
  • C-c C-l で「λかわいいよλ」とポスト(隠し機能)

参照 URL

スクリーンショット(2011-02-26 18.32.30)
↑ こんな感じになりました。
List, HashTag なども対応しているそうなのでもう少し調べてみようと思います。

Emacs の学習 (9) 略語展開のキーバインドを変更

今日は Emacs の静的略語展開のキーバインドを変更しました。 さすがに C-x a ‘ だと入力しにくいので M-/ にしてみます。

1
2
;;略称展開のキーバインドを変更する                                    
(global-set-key "\M-/" 'expand-abbrev)

また設定した略語のテーブルを編集するには

1
M-x edit-abbrevs

で記録された設定内容のバッファ Abbrevs が開くので、各モードごとの設定を自由に編集できます。
C-c C-c で保存できるようです。

参照 URL

日本語にしてもコードにしても、効率よく書いていきたいですね。