• ベストアンサー

valueの値について教えてください!

前提として疑問なのですがname属性の値を日本語にすると古いブラウザで 文字化けするなど環境により問題があるようなので英語にするのが無難と 言われておりますよね。 なんとなくそれは納得できるのですがセレクトボックスやラジオボタンの valueはなぜ英語または数字で指定されていることが多いのでしょうか? 初心者なものでまずは一度試してみようと思い英語でセレクトボックスのvalueを指定し 入力ページに以下のように配列を用意し(実際には47都道府県) $area_array = array(1 => '東京', 2 => '神奈川', 3 => '千葉'); foreach ($area_array as $key => $val) { echo "<option value=\"" . $key ."\">" . $val . "</option>\n"; } とすると <option value="1">東京</option> <option value="2">神奈川</option> <option value="3">千葉</option> となるのですがvalueが数字なのでこの状態で次の確認ページに進むと 何を選んだのかわかりません。 確認ページに if ($_SESSION['area'] == '1') { $_SESSION['area'] = '東京'; } と記述すればいいのですが47件もあるのでもっと簡略化 できないものかと思い調べてみたのですが有力な情報がみつからず質問 させて頂きました。 valueを日本語にすればそのままなので問題ないのですが英数字での場合 どのようにすれば実現できるのかを教えて頂きたいと思っております。 詳しい方おりましたら宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

value の値は英数字にするのが一般的なような気がしますが、なぜなんでしょうね・・・ asd3330 さんは >前提として疑問なのですがname属性の値を日本語にすると古いブラウザで >文字化けするなど環境により問題があるようなので英語にするのが無難と >言われておりますよね。 と書かれていましたが、それが理由の1つなのかもしれません。 name の値を日本語で書かない方が良いなら value の値も日本語で書かない方が良いのでしょうね。 逆に言えば、name の値を日本語で書くなら value の値も日本語で書いて構わないと思います。 >$area_array = array(1 => '東京', 2 => '神奈川', 3 => '千葉'); これは連想配列ですね。今回のような場面で配列を使うならば単に $area_array = array('東京', '神奈川', '千葉'); とすれば、 $area_array[0] = '東京'; $area_array[1] = '神奈川'; $area_array[2] = '千葉'; と同じことになります。(参照: http://www.scollabo.com/banban/php/php_05.html) あとは、 for ($key=0; $key<47; $key++) { echo "<option value=\"" . $key ."\">" . $area_array[$key] . "</option>\n"; } とすることでセレクト ボックスのアイテム部分の HTML が書き出されます。 確認ページでは(すでに47都道府県が格納されている $area_array があるものとして) $_SESSION['area'] = $area_array[$_SESSION['area']]; とすれば $_SESSION['area'」 に都道府県名が代入されます。 未検証ですが大筋ではこれでいけるはずです。

noname#65793
質問者

お礼

お返事ありがとうございます。 教えて頂いたとおりにやってみたところ確認ページでは日本語で表示することができました! for ($key=0; $key<47; $key++) { echo "<option value=\"" . $key ."\">" . $area_array[$key] . "</option>\n"; } こんな使い方もあるのですね~応用の方法がわからず困っておりましたが おかげ様で勉強になりました! うる覚え程度の知識なので余計考えてしまったのですが 名前:<input type="text" name="name" value="<?=name?>" /> とした場合、 valueには日本語が渡されるのでなんでセレクトボックスなどは英数字なのかが疑問でした^^; これとした原因はわかりませんが、やはり英数字で統一するのが無難な方法なのでしょうね。

その他の回答 (2)

回答No.3

ANo. 1 です。 理解していただけて何よりです。 >うろ覚え程度の知識なので余計考えてしまったのですが >名前:<input type="text" name="name" value="<?=name?>" /> >とした場合、 >valueには日本語が渡されるのでなんでセレクトボックスなどは英数字なのかが疑問でした^^; type="text" の場合、テキスト ボックスです。 テキスト ボックスに日本語を表示したければテキスト ボックスの中身で ある value には日本語が代入されます。 それに対してセレクト ボックスやラジオ ボタンの場合、各アイテム (選択肢) とそのアイテムのラベル (表示される文字) は無関係ですから、 value に日本語を代入する必要はないのです。 パスワードについては (本来なら別に質問すべきことなのですが・・・) 確認画面では $_SESSION['pass'] の文字数をカウントして、その文字数分だけ 伏字 (●や*) を表示するという処理になるでしょうね。

noname#65793
質問者

お礼

お返事ありがとうございます。 >パスワードについては (本来なら別に質問すべきことなのですが・・・) これにつきましては同レスですみませんでした^^; しかしアドバイスを基になんとか思い通りにすることができました! これにて解決させて頂きます。わかりやすく教えて頂きまして本当に ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

余談ですが都道府県名に数字のradioボタンを使うのは、もともとは個人情報を 難読化するための技法です。 都道府県名の後には個人の住所などの情報が併記されることがおおいことから インターネットの黎明期においてはそうすることが正しいとされていました。

noname#65793
質問者

お礼

なるほど~確かにセキュリティは大事ですよね。 貴重なご意見ありがとうございます! ひとつ質問があるのですが <input type="password" ...> とすると入力した時点では●●●となりますが確認ページに移行すると 値がそのまま表示されてしまいます。 確認ページに行くと***と表示させたいのですがこれはどうすればいいでしょうか? 確認ページで単純に$_SESSION['pass'] = '●●●' としても実際の値が 変わってしまい、送信ページにも●●●という値で送信されてしまいますし 6文字のパスワードであっても●●●としか表示されないので困っておりました・・・