10秒目をつむったら…

初めまして。
まだまだphpを初めて間もないのですが、勉強がてらphpで登録内容の変更フォームを作っています。


ただ、どうしても住所関連の部分で上手く処理が出来ずに悩んでいまして、
よろしければお知恵を拝借できないでしょうか?



↓ココから実際のコード-----------------------------------------------------------------
<select name="usaddress" id="usaddress" >
<option value="">お住まいの都道府県を選択してください</option>
<?
for ($i=01;$i<53;$i++) {


if(substr($i + 100 , 1 , 2) == $usaddress){
echo '<option value="' . substr($i + 100 , 1 , 2) . '" selected="selected">' . $selectprefecture_set[substr($i + 100 , 1 , 2)] . '</option>' . "\n";
}else{
echo '<option value="' . substr($i + 100 , 1 , 2) . '">' . $selectprefecture_set[substr($i + 100 , 1 , 2)] . '</option>' . "\n";
}

}
?>
</select>
↑ココまで実際のコード-----------------------------------------------------------------

$usaddressには登録者の都道府県コードが入っています。
DBから呼び出して当該ユーザーの都道府県コードが入ってきます。

$selectprefecture_setには、連想配列で都道府県名を突っ込んでいます。


コレを登録内容の変更フォームに組み込むと、
セレクトボックスの中身は表示されるんですが、
DBから取ってきた値がデフォルト値で表示されないのです・・・。
DBからはキチンと値を持ってきているのは確認できていますし、
正直どこが悪いのかすらわかっていません・・・。


宜しくお願い致します。

A 回答 (3件)

こんにちは。



せっかく

> substr($i + 100 , 1 , 2)

とされているので、

> for ($i=01;$i<53;$i++) {

ではなく

for ($i=1;$i<53;$i++) {

ではどうでしょう?

$i=01 では8進数でまわっているような気がします。
    • good
    • 0

$usaddressには正しく値が入っていますか?


>if(substr($i + 100 , 1 , 2) == $usaddress){
でマッチしていないせいかと・・・

以下のコードで動作しました(tmp.php):
---------
<?php
for ( $i = 1; $i < 53; $i++ )
{
$selectprefecture_set[ sprintf("%02d", $i) ] = '都道府県' . $i;
}
?>
<form action="tmp.php" method="post">
<select name="usaddress" id="usaddress" >
<option value="">お住まいの都道府県を選択してください</option>
<?
for ($i = 01 ;$i < 53; $i++ )
{
if ( substr($i + 100 , 1 , 2) == $_POST['usaddress'] )
{
echo '<option value="' . substr($i + 100 , 1 , 2) . '" selected="selected">' . $selectprefecture_set[substr($i + 100 , 1 , 2)] . '</option>' . "\n";
}
else
{
echo '<option value="' . substr($i + 100 , 1 , 2) . '">' . $selectprefecture_set[substr($i + 100 , 1 , 2)] . '</option>' . "\n";
}
}
?>
</select>
<input type="submit" value="post" />
</form>
---------
    • good
    • 0

>echo '<option value="' . substr($i + 100 , 1 , 2) . '" selected="selected">' . $selectprefecture_set[substr($i + 100 , 1 , 2)] . '</option>' . "\n";


表示されたページを「ページのソースを表示」でどうなってるか確認してごらん。

それでも意味が判らないというならそれを保存するなりコピペしてテキストを新規作成するなりしてそれを検証してごらん。
http://openlab.ring.gr.jp/k16/htmllint/

この回答への補足

「selectedが与えられてないから」という意味でしょうか?
であれば、それは理解できているのですが何故forループが上手く回っていないのかがわからずに悩んでいます・・・。

補足日時:2008/08/22 20:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!