第6回 PHPで実用アプリケーションを作ろう(後編)
前回はPHPによるMySQL操作の基本的なコーディング方法を紹介した。今回は実際に動作するアプリケーションを例に、プログラミングの実践的なテクニックを解説する。
鶴長 鎮一
MySQLユーザ会
2001/4/21
アドレス帳アプリケーションの構築
一通りmysql関数を使えるようになったところで、実例を見てみましょう。今回用意したのはWebアドレス帳です。グループでのアドレス管理に対応できるようにWebアプリケーションとして実現してみました。
名前や住所をはじめとする一般的な項目の入力ができ、日付、時間といった文字列以外の特殊な項目の入力にも対応しています。プログラム自体はアドレスの登録・検索・変更・削除といった基本的な機能に絞っていますが、これら1つ1つの機能がデータベースのINSERT・SELECT・UPDATE・DELETEに対応しており、機能ごとのPHPスクリプトの流れが追いやすいのではないかと思います。
機能はシンプルですが、登録項目を変更することで在庫管理などのちょっとした業務アプリケーションにも応用できます。
■アドレス帳プログラムのインストール
まずプログラムのインストールです。といってもファイルを展開するだけです。以下のリンクからatmarkit5th.tar.gzをダウンロードしてください。
ダウンロードしたら、Apacheで公開できるディレクトリに展開します。ここでは/usr/local/apache/htdocsを利用します。
# cd /usr/local/apache/htdocs |
PHPスクリプトのインストールは以上です。特にパーミッションの変更などは必要ありません。
次にデータベースを用意します。第4回でATMARKITデータベースを用意しました。今回も同じデータベースを利用しています。まだ用意していない場合は、データベースのcreate権限を持つユーザー(たいていはrootです)にスイッチしてデータベースを作成します。
# mysqladmin create ATMARKIT |
続いてテーブルを作成し、適切な参照権を与えます。ここでは、あらかじめ用意しておいたsqlファイルを利用します。先ほどatmarkit.tar.gzを解凍したatmarkit5thディレクトリに移動します。
# cd atmarkit5th |
ここにあるsqlファイルをATMARKITデータベースに流し込みます。
# mysql ATMARKIT < ADDRESS.sql |
名前からも分かるとおり、ADDRESS.sqlファイルがテーブル“ADDRESS”を作成するためのもの。grant.sqlがADDRESSテーブルの参照権を設定するものです。
以上の作業で下記のようなテーブルが作成されます。
---ADDRESSテーブル----- |
また、第4回と同様、参照権の設定ではlocalhostからの接続も明示的に開けています。
では、アドレス帳プログラムの動作を確認してみましょう。Webブラウザでhttp://127.0.0.1:8080/atmarkit5th/を指定します(PHPスクリプトを展開したディレクトリに合わせてURLも適宜変更してください)。
下のような画面が表示されれば、まずは成功です。あとは適当に「受付処理」や「検索処理」を行い、アドレス帳プログラムが動作しているか確認してみましょう。
![]() |
| 画面 今回PHPで作成したアプリケーション。この画面から各種の機能を呼び出します(画像をクリックすると拡大表示します) |
■プログラムのファイル構成と処理内容
処理の流れは図のようになっています。まず受付処理から見ていきましょう。 受付処理(データ登録)では、最初にinsert.phpが呼び出されます。このスクリプトは、変数“$mode”がセットされているか否かで動作が異なります。 |
if($mode == "insert"){ |
| リスト insert.php(一部) |
$modeに“insert”がセットされていなければ、受付用フォームを表示するためにinsert_form.iniをインクルードします。
受付用フォームもinsert.phpを呼び出しますが、“insert.php?mode=insert”のようにしてURLに変数$modeをセットすることでinsert.phpの動作を変えます。
<FORM ACTION="insert.php?mode=insert"
METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
|
| リストinsert_form.ini(一部) |
insert.phpは$modeに“insert”がセットされている場合、下のリストのように各変数の値を指定されたテーブルのカラムに挿入します。
$conn = mysql_connect("127.0.0.1:3306","test","test2001"); |
| リスト insert.php(一部) |
削除・更新の作業の前には、どのデータを更新するかを選び出す必要があります。検索処理がそれを可能にします。
insert.phpと同様、select.phpも$modeがセットされているか否かで2種類の動作を用意しています。まず指定がなかった場合、select_form.iniをインクルードして検索用のフォームを出力し、このフォームの[検索します]ボタンがクリックされると$modeに“select”をセットしてから再びselect.phpを呼び出します。
$modeに“select”がセットされている場合、フォームの値から検索用のSQL文を生成してデータベース問い合わせを行い、結果を指定された表示数だけ出力します。検索サイトで見かけるように、検索結果の該当範囲を細切れにし、無駄に表示結果を大きくしないようにするため、SELECT文にLIMIT句(データベースTIPS参照)を付けています。もし表示件数が10であれば“limit 0,10”とし、次のページを表示する際には“limit 10,10”にします。[次のx件]がクリックされた際は、SELECTクエリーも一緒に渡すようにしています。次の件数を表示するのなら、各変数を個別に渡すよりも、一度生成したクエリーのLIMIT句だけを変えて渡した方が効率的ですよね。
|
ただし、クエリーまでURLの引数として渡したい場合は少し処理が必要になります。アルファベットだけの検索条件ならいいのですが、漢字や特殊記号も入る場合があります。そのために
$uquery = urlencode($sub_query); |
のようにして、URLの引数として渡してもWebブラウザのエラーや変数落ちがないようにします。
また、各フォームの検索条件は完全一致ではなく、部分一致になっています。例えば名前で検索する場合、
WHERE name like '%名前フォームの値%' |
を用いています。
検索で意中のデータを見つけて変更したい場合、update.phpを“update.php?no=X”のように番号指定で呼び出します。update.phpは該当のデータをフォーム上に表示します。そのため、dateタイプの値を年・月・日のフォームの形に合うように、事前に定義されたdate2letter()関数を用いて分割します。同様にtimeデータも時・分に分割します(time2letter()関数使用)。
[変更します]がクリックされると、“update.php?update=do”としてupdate.phpを呼び出し、更新を実行します。
最後は削除です。“delete.php?no=X”のように、delete.phpを番号指定で呼び出します。間違って削除処理が実行されるのを防ぐため、JavaScriptを使って簡単な確認を行うようにしています。
<script language="JavaScript1.1"> |
| リスト jscript.ini |
個別の処理以外にも、よく使う関数をまとめたatmarkit.iniファイルがあります。データベースへの接続、SELECT文、UPDATE文、DELETE文の実行といった処理は、ここにまとめてあります。例えば、データベースの初期化処理を呼び出す場合、まずaccess_ADDRESSオブジェクトを作成します。
$am = new access_ADDRESS; |
その後メソッドを呼び出します。
$am->db_init(); |
これらの処理は、atmarkit.iniファイルをインクルードすることで利用可能になっています。
◆
PHPは冒頭でも触れたように、ここ5年で飛躍的に進歩してきたスクリプト言語です。多くの有志の手でさらなる改善が続けられている一方、従来のデータベースとの親和性も大事にされています。
HTML文章に埋め込むスタイルは、いまやJavaでもJSPという形で提供されるなど、多くの言語で実現できるようになってきました。しかし、PDFやGIFの生成をはじめとする各種ライブラリの充実ぶり、cookieでもPOSTでもGETでも変数を簡単に取得できる柔軟さなど、Webアプリケーション構築の優位性はしばらくの間はPHPに分がありそうです。
さて、次回はスクリプト言語の新参者Rubyを取り上げます。日本で生まれたこの言語のMySQLサポートについては、MySQLユーザー会(http://www.mysql.gr.jp/)の大御所とみたまさひろ氏の功労によるところが大きいといえるでしょう。
| 連載 快速MySQLでデータベースアプリ! |
| Linux Squareフォーラム データベース関連記事 |
| 連載:快速MySQLでデータベースアプリ!(全11回) 軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説 |
|
| 連載:今から始める MySQL入門(連載中) 定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する |
|
| 連載:Oracleマイスター養成講座(全6回) 本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座 |
|
| 連載:DB2マイスター養成講座(全7回) 本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説 |
|
| 特集:エンタープライズ市場に向かうMySQL
5.0[前編] MySQL 5.0の新機能をアルファ版でチェック 1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる |
|
| 特集:Linuxで動くリレーショナルデータベース・カタログ データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい |
|
|
ホワイトペーパー(TechTargetジャパン)
- natテーブルを利用したLinuxルータの作成 (2010/2/9)
natテーブルを用い、市販のブロードバンドルータと同等かそれ以上の機能を備える「Linuxルータ」を作成してみましょう - Web監視機能を賢く利用する (2010/2/2)
プロセスの稼働確認だけでは、サービスが正常に提供できているか分からないことも。そこで使いたいのがWeb監視です - ものいわぬOpenLDAPサーバのログ管理 (2010/1/20)
不満をいわないコンピュータが相手だからこそ、常にログが確認できる状態を整備することが重要になります - ネットワークアクセス権も放棄せよ (2010/1/12)
新しいセキュリティ機構「disablenetwork」を提案する1通のメールから始まった議論が、LSMも巻き込む話へと拡大しました
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








