第9章 動的な処理を行う
9.2 HTML文章を動的に処理してみよう
これまでの学習では、PHPモードとHTMLモードを別々に利用した形のプログラムになっていました。しかし、このモード切り替えを「条件分岐文」や「繰り返し文」の間で行うことで動的な処理が行えます。
HTML文章だけでは行えない、この動的に処理するということが、PHPを利用する最大のメリットになります。次の項より動的な処理方法のサンプルをいくつか紹介していきます。
9.2.1 条件分岐文を使って動的に画面を変化させる
条件分岐文を利用すればHTML文章であっても、その表示する内容を条件に応じて変化させることが簡単に行えます。
書式:条件分岐文を使って内容を変化
これまで学習してきたPHP構文のif文を以下の書式のように区切っていきます。書式ではif-else文になっていますが、条件式はPHP内で利用したように条件の数に応じて設定できます。
凡例:条件分岐文を使って内容を変化
上記の凡例では、変数$flagがtrueなら「ようこそ、神田たろう様・・・」のHTML文章が表示され、そうでない場合は「以下のフォームから・・・」のHTML文章が表示されます。このようにHTML文章でも条件分岐文を利用すれば、条件式の結果に応じて画面に表示するHTML文章を変化させることができるのです。
では実際にプログラムを作成して確認してみましょう。
条件に応じて画面を変化させるプログラム
遷移元のラジオボタンで選択した情報を、遷移先でその情報を受け取り条件分岐文で判定します。その結果に応じて、遷移先で表示するWeb画面の内容が変化することを確認します。
ソース・フォルダー: myproj_basic/ch09
パッケージ: changeHtmlForm.php
アクセスURL:http://localhost/myproj_basic/ch09/changeHtmlForm.php
changeHtmlForm.php
ソース・フォルダー: myproj_basic/ch09
パッケージ: changeHtml.php
アクセスURL:changeHtmlForm.phpからの画面遷移でアクセスされる
changeHtml.php
7行目のif文は、遷移元からのPOSTデータが「1(管理者を選択)」であるかを判定しています。ここで一旦PHPモードを終了させているのがポイントになり、13行目は再びPHPモードで、7行目のif文の続きのelseブロックを記述して再度PHPモードを終了させます。最後に19行目でも再びPHPモードで、13行目のeles文を閉じるための処理を記述してPHPモードを終了させます。
このように条件文をそのブロック毎にPHPモードで区切ることで、7行目の条件式を満たせば7~13行の間に記述されたHTML文章が表示され、そうでない場合は13~19行の間に記述されたHTML文章が表示される仕組みになります。
条件分岐文をPHPモードで一旦区切っても、次のPHPモードで続きを記述することで動作します。上記のような記述方法を行った場合、その間に記載されたHTML文章はその条件式が満たされた時に行う処理の対象になることをしっかり覚えておきましょう。
9.2.2 繰り返し文を使って動的にHTML文章を作成する
前項では条件分岐文をPHPモードで区切って処理することで、その間に記述した内容を条件を満たした場合の処理にすることができました。繰り返し文も同じようにPHPモードで区切ることで、その間に記述したHTML文章を繰り返し対象にすることができます。
書式:繰り返し文を使ってHTML文章を作成
繰り返し文は、これまで学習したfor、while、do-while、foreachのどれを使っても構いません。
凡例:繰り返し文を使ってHTML文章を作成
上記のように繰り返し文の間に記述したタグ(<tr>~</tr>、<option>~</option>)が繰り返し対象のHTML文章になります。この仕組みを利用すれば、PHPの処理で作成した配列データの数だけHTML文章を出力できます。さらに処理の内容に応じて配列データを変更すれば、画面に表示する内容を簡単に変化させることも可能になります。
また、凡例ではテーブルの行タグとセレクトボックスのオプションタグしか紹介していませんが、チェックボックスを複数表示したり、テーブル全体を表示したりもできます。繰り返し文の間に記述できるタグは、HTML文章の全てが対象になることを覚えておいて下さい。
では、繰り返し文を使ってどのようにしてHTML文章を表示するのか、実際にプログラムを作成して確認しましょう。
繰り返し文と配列データを利用して動的にHTML文章を作成するプログラム
配列データを元にそのデータの数だけHTML文章のテーブルの行、セレクトボックスのオプション項目、チェックボックスを表示できることを確認します。
ソース・フォルダー: myproj_basic/ch09
パッケージ: makeHtmlInLoop.php
アクセスURL:http://localhost/myproj_basic/ch09/makeHtmlInLoop.php
makeHtmlInLoop.php
1~10行目の間でarray関数を利用して、各配列変数に表示用データを設定しています。
17~26行目がテーブルタグを使ってデータを表示する処理になります。テーブル全体のタグ(<table>~</table>)とヘッダーを表示する行のタグ(<th>)はループ処理の間に含めないのがポイントです。もしも間違って含めてしまうと、繰り返しの対象になってしまうので注意して下さい。
20行目と25行目で繰り返し文を記述して、配列変数$tableDataのデータ数だけその間に記述された内容を繰り返し表示するようになります。
21~24行目が繰り返しの対象になり、配列データの1件(文字列キーをタイトルデータ、格納データを価格)をテーブルの1行として表示しています。
28~31行目がチェックボックスを表示する処理になります。
チェックボックスの場合は29行目と31行目の繰り返し処理の間に、<input>タグを記述すればいいだけになり、1つ目の処理と同じように、配列変数$checkDataの数分だけチェックボックスを表示します。その際にはname属性は同じ名前know[](遷移先に配列データとして送信できる)、value属性に配列の添え字数値キー、画面に表示する項目文字列に配列の格納データを設定しています。
33~38行目がセレクトボックスを表示する処理になります。
セレクトボックスの場合もテーブルと同様に、繰り返したいのは<option>のみのため、ループ処理の外側に<select>、</select>を記述する必要があります。
35行目ではfor文とcount関数を組み合わせて、配列変数$selectDataの数分だけ<option>タグを表示しています。その際にはvalue属性にはカウント変数$i、表示項目として配列の格納データを設定しています。
実行結果からも分かりますが、繰り返し文を利用すれば簡単にHTML文章も複数回処理して表示することができます。
HTML文章をPHPモード内で記述する方法条件分岐文や繰り返し文をPHPモードで区切ることで、その間のHTML文章を動的に処理することができます。少しだけ記述が分かり難くなりますが、PHPモードで区切らずにそのままHTML文章を表示することもできます。
上記のように<option>タグのHTML文章を、echo文を利用して文字列として出力すればPHPモードを区切らずに処理を記述できます。しかし、「”」の文字列囲み、文字連結などでHTML文章が分かり難くなってしまうため、本節で学習したようにPHPモードを区切って記述する方法をお薦めします。