第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ジャパン
- クライアントがアクセスできる範囲を制限する (2012/2/10)
今回は、サーバ上のファイルの扱いに関係する設定項目について解説します - 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


