誕生日順一覧表示 ソースと解説

前回、「本日が誕生日であるメンバーがいたらその旨を表示」するプログラムを作りましたが、その日にならないとそれがわかりにくいというので、今回は一覧表を誕生日順に表示するプログラムを作ってみました。その結果、意外な事が判明!前回のプログラムを改訂することになってしまいました。

プログラム言語:PHP

データベース:MySQL

動作条件

インターネットに接続してある標準的なWebブラウザで動きます。(Firefox、Safari、Chromeを推奨)

データベース・テーブルの変更

変更前のテーブル構造です。

birthday(生年月日8桁)の次にtanjobi(誕生日4桁)を挿入しました。

MySQLではパソコンのMicrosoftExcelの用に簡単にフィールドを追加することができます。元のデータはそのまま残りますから、バックアップして、同じフィールドにデータを複写するなどの操作はまったく必要ありません。また、既存のプログラムもそのまま使えます。そもそもphpにはコンパイルが必要ありませんから。

ソース

実際の文字コードはUTF-8ですが、ここではShift-JISにして表示します。

MVCfile name概要
Controllermusume.phpプログラムの本体、この中にtanjobijun()関数としてこの機能を追加
Modelmusume_model.php誕生日順に全レコードを得るget_member_list_tanjobijun()関数を追加
Viewmusume_tmpl.php今回の変更は無し
musume_tanjobijun.php誕生日順一覧を表示するhtmlを組み立てる部分
header.php共通ヘッダー
footer.php共通フッター

controllers/musume.php内のtanjobijun()

  1. データベースからメンバー全員のデータを誕生日順に配列に読み込む。
  2. 写真のファイル名をランダムに生成する。
  3. コンテンツ部分のhtmlを配列内に作成する。
  4. htmlテンプレートに必要部分を結合して表示する。

models/musume_model.php内のget_member_list_tanjobijun()

  1. 新設した誕生日フィールドの値順に全レコードを読み出す。

views/musume_tanjobijun.php

実行

これを実行してみるとこのように誕生日順に一覧が表示されました。

ところが、よく見ると・・・、

なんと、5月7日生まれが二人いました!わずか38名の中に同じ誕生日のメンバーがいるなんて・・・。

前回のプログラムを改訂

前回作った、トップページのインラインフレーム内に当日誕生日であるメンバーがいたらその旨を表示するプログラムは、同じ誕生日がいないという前提のアルゴリズムを使っていましたから、これは問題です。なにしろひとりしか表示されないのですから。

というわけで、アルゴリズムを見直して、前回のプログラムを作り直しました。

controllers/musume.phpのavocadomix()

変更点

  1. foreachループ内では名前と年齢の文字列を複数結合させる。
  2. foreachループを抜けた後でその文字列が空でなかったときに表示文字列のセットをおこなう。

これによって以下のような表示になります。

「本日20xx年05月07日は、紺野あさ美さんXX歳佐藤優樹さんXX歳の誕生日です。」

5月7日が楽しみです。もちろん、新メンバー加入により同じ誕生日のメンバーがさらに増えても対応できます。

2016年7月24日 記