サイトの再構築で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”」は送信ボタンの後ろに余白が出るのを防止するため。
最後は変数の内容確認のための「おまけ」。