夢小説PHP その3:スーパーグローバルとname属性の謎
先日ほけほけここで「作ってみたい」と呟いたら、夢小説作成JavaScriptのソースをご紹介いただきました。ありがとうございます。
それを参考にもそもそ作っていたのですが、思わぬところで詰まっています。
form入力するなら必須になってくる$_POST、そしてCookieにアクセスする$_COOKIE。
これらのname属性指定に変数は使えないのでしょうか?
こういうことがしたいと思っています。
- for文で、任意の英数名+数字のname属性(仮にaaa1、aaa2、aaa3とする)を持つテキストボックスを表示
- 各テキストボックスに入力された文字列を、それぞれのname属性でCookieに登録
……うーん、説明がうまくない。
for文でテキストボックス表示部分だけソース出します。
<form method="POST" action=<?=EDITPHPNAME ?>> <?php for($i = 0; $i < $max_name; $i++){ ?> <p><?=$rabel_name[$i] ?>: <input type="text" name="<?=POSTNAME.$i ?>" size="30" maxlength="50" value="<?=$hyoji_name[$i] ?>" /></p> <?php } ?>
EDITPHPNAME 、POSTNAMEは上の方で定数定義してます。
$hyoji_name[$i]はやはり上の方でCookieを読むかCookieがまだなければデフォ名を読むかしてます。
これを実行した時のHTMLソースが以下の通り。
<html> <head> <title>名前入力</title> </head> <body> <h1>名前入力</h1> <form method="POST" action=dr_edit.php> <p>主人公の名前: <input type="text" name="aaa0" size="30" maxlength="50" value="はてダ" /></p> <p>親友の名前: <input type="text" name="aaa1" size="30" maxlength="50" value="はてブ" /></p> <p>恋敵の名前: <input type="text" name="aaa2" size="30" maxlength="50" value="増田" /></p> <input type="submit" value="送信" /> </form> </body> </html>
こういう書き方しちゃうと、当然ながら各テキストボックスにアクセスするためには「aaa0」「aaa1」「aaa2」を$_POSTの[]内に指定しなければならないはず。
でも、ここで
$_POST["aaa0"]
ではなく
define("POSTNAME", "aaa"); $_POST[POSTNAME.0]
だとエラーになってしまいます。
詳細は分からずながら、
$_COOKIE["aaa"][0]
という書き方はOKらしい(あちこちぐぐってるときに見かけた)ので、どうにか近い形にしたいところであります。
……とか言ってるうちに思いついたので、さっきのスクリプトに追加して実行。
追加したスクリプトは以下に。
for($i = 0; $i < $max_name; $i++){ echo "$_POST['dr_name'][$i] <br />\n"; }
さっきのhtml部分、フォームのすぐ下に追加しました。
しかしこれはエラーになってしまいました。だめらしい。
Cookieの中ってどうなってるんだろう?