サイトの再構築でphpを学習中。
perlよりもお手軽に書ける感じだが、定義なしに変数を使えるのは善し悪し。
便利だけれど思わぬバグの元です。
以下の例で使用した「可変変数」は上手に活用すれば、とても便利だと思います。
FORMで送信するデータをGETで受ける場合の例文を見ていると、全てのデータを一旦展開するものが多い様子。
必要なものだけをGETして、規定値以外はデフォルトの値を持たせるようにしてみました。
チョットしたことですが、使ってみると応用範囲が広くて便利です。(^^)v
hoge.php ※ファイル名は任意、下記は文字コードUTF-8用に記述してあります。 |
<?php header('Content-Type: text/html; charset=UTF-8'); $countrydata = array( '00' => 'V Select', 'ET' => 'Ethiopia', 'GT' => 'Guatemala', 'CO' => 'Colombia', 'JM' => 'Jamaica', 'TZ' => 'Tanzania', 'BR' => 'Brazil', 'MX' => 'Mexico', ); $weightdata = array( '1' => '100g', '2' => '200g', '5' => '500g' ); $roastdata = array( '0' => 'all', '1' => 'medium', '2' => 'high', '3' => 'city', '4' => 'full city', '5' => 'french' ); $listdata = array( 'weight' => array( 'name' => 'Weight', 'default' => '2' ), 'roast' => array( 'name' => 'Roast', 'default' => '0' ), 'country' => array( 'name' => 'Country', 'default' => '00' ) ); foreach($listdata as $key => $value) { if (isset($_GET[$key])) { ${$key} = htmlspecialchars($_GET[$key], ENT_QUOTES); } else { ${$key} = $value['default']; } if (!array_key_exists(${$key}, ${$key.'data'})) { ${$key} = $value['default']; } } ?> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>Example(Weight:<?php echo $weight; ?>00g, Roast:<?php echo $roastdata[$roast]; ?>, Country:<?php echo $countrydata[$country]; ?>)</TITLE> </HEAD> <BODY> <H1>Example</H1> <HR> <FORM action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET" style="margin:2px"> <?php foreach ($listdata as $listkey => $listvalue) { print " {$listvalue['name']}<SELECT name=\"$listkey\">\n"; foreach (${$listkey.'data'} as $key => $value) { $linedata = " <OPTION value=\"$key\""; if(${$listkey} == $key) $linedata .= ' selected'; $linedata .= ">$value</OPTION>\n"; print $linedata; } print " </SELECT>\n"; } ?> <INPUT type="submit" value="Submit"> </FORM> <HR> <?php foreach ($listdata as $listkey => $listvalue) { print " {$listvalue['name']} => ".${$listkey.'data'}[${$listkey}]." /\n"; } ?> </BODY> </HTML> |
【解説】
[$xxxxxdata = array();]
データテーブルの定義/「xxxxx」の部分は変数名を記述、キーと値を定義
[$listdata = array();]
先に定義したデータテーブルの「xxxxx」をキーにし、変数表示用の名称(name)と規定値(default)を定義
ここで定義したものがGETの対象となる。
[foreach($listdata as $key => $value)…]
$_GETしたデータ中に変数が存在すればその値を取得。
変数が存在しない場合、もしくは、データテーブルに取得した値が存在しなければ規定値にする。
[<HTML>~</HTML>]
サンプルプログラム。
各データテーブルの内容を<SELECT>~</SELECT>中に展開する。
キーの値が変数の値と等しい項目を「selected」する。
<FORM>中の「style=”margin:2px”」は送信ボタンの後ろに余白が出るのを防止するため。
最後は変数の内容確認のための「おまけ」。