前書き
PHPを利用してHTMLを書いていると、変数の値をタグの属性値にして使いたい時があったので、そのやり方
コード
input_sample2.php
<?php
$name=array('磯野波平','磯野フネ');
if(isset($_POST['namae'])
AND in_array($_POST['namae'],array(0,1)))
$input_value = $name[$_POST['namae']];
else
$input_value = "";
$body =<<<BBB
<!DOCTYPE html>
<html lang="ja">
<head>
<title>input sample page</title>
</head>
<body>
<form method="post">
<p>名前を入力したい人を選択してください。</p>
<label>お父さんの名前<input type="radio" name="namae" value="0" checked ></label>
<label>お母さんの名前 <input type="radio" name="namae" value="1" ></label>
<p><input type="submit" value="入力"></p>
</form>
BBB;
$body2 =<<<BODY
<h2>世田谷の有名家族調査</h2>
<form>
<label>名前<input type="text" value="{$input_value}" size=20></label>
<p><input type="submit" value="検索"></p>
</form>
BODY;
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$body = $body.$body2;
}
echo $body;
echo '</body></html>';
?>
実行
php -S localhost:8000
でPHPだけでWEBサーバを起動。
上記コマンドを打った場所がホームディレクトリーとなるので、そこにinput_sample.html
を配置
ブラウザで見てみる。
うまくいった。
解説
コメントに書いているとおり、
PHP:echo - Manual
の記載方法をつかって、input
タグのvalue
属性に値を渡している。
ヒアドキュメント内の変数展開と、数字のバリデーションを行なって、どんな値が来たとしてもなんとかなるようにした。
in_array()
とpreg_match()
どっちがいいんだろ?考えやすいのはpreg_match()
の方だけど。
をみても
信頼できないデータは安全な属性のリスト(下記)にのみ配置、background, ID, nameなどの安全でない属性は厳密に検証する。
とのことなので、検証コードは必要。
まとめ
属性も動的に設定できると、WEBページを使った簡易的なゲームなんかがもっと柔軟に作れるようになると思う。