PHPの勉強を始めて1週間の初心者です。
phpで簡単なメールフォームを作る練習をしています。
ネットで検索していろんなサイトを見ると
__<?php $sel = isset($_POST['select']) ? $_POST['select'] : ''; ?>
<html> <form method="post" action="<?=$_SERVER['SCRIPT_NAME'];?>"> <select name="select"> <option value="a"<?= $sel === 'a' ? ' selected' : ''; ?>>a</option> <option value="b"<?= $sel === 'b' ? ' selected' : ''; ?>>b</option> <option value="c"<?= $sel === 'c' ? ' selected' : ''; ?>>c</option> <option value="d"<?= $sel === 'd' ? ' selected' : ''; ?>>d</option> </select> <input type="submit" name="submit" value="送る"> </form> </html> __ __(ネットの記事から引用)__
のような解決法が多くありました。
しかし、今私が作ろうとしているプルダウンメニューが
都道府県を選択するメニューなので、
これはあまりにも手間がかかる上にテキスト量が多くなり読みにくくなってしまいます。
for文やforech文などを使って
<?php if(isset($_POST["send"])){ $japan = $_POST["japan"]; $japan = array("", "北海道", "青森県", ..(※省略).... "沖縄県",);
}
?>
<?php for($i=0; $i<count($japan); $i++){ echo('<option value="' . $japan[$i] . '">' . $japan[$i] . '</option>'); } ?> </select>
<select class="form3" name="japan">
と自分で書いてはみたのですが、2点ほどうまくいかない事があります。
その1、初期値が空になって▼マークのみの表示になってしまう。
(一度送信するとなぜかプルダウンし選択できるようになる)
その2、選択した項目を送信した後も保持したままにしたい。
そこでお願いしたいのはこの2点の解決方法です。
できればfor文など使用したスッキリした形で完成させたいです。
まだ知らないこともたくさんありますので
もし別の方法があれば教えていただきたいです。
宜しくお願いします。
追記:ネットから引用した前述の方法以外の解決策はないんでしょうか?
追記2:回答を受け以下の記述に直しました。
<?php **$japan = array("", "北海道", "青森県", ..(※省略).... "沖縄県",);** if(isset($_POST["send"])){ $japans = $_POST["japans"]; } ?> <select class="form3" name="japan"> <?phpfor($i=0; $i<count($japan); $i++){
if($_POST["japans"]==$japan[$i]){
echo('<option value="' . $japan[$i] . '">' . $japan[$i] . '</option>');
}
else{
echo('<option value="' . $japan[$i] . '" selected>' . $japan[$i] . '</option>');
}
}
?>
</select>
この記述の結果、その1の問題は解決しました。
しかし送信後のプルダウンメニューが強制的に沖縄県(項目の最後)に移動してしまいました。
その後else部分の$japan[$i]を**$_POST["japan"]**に変えてみたところ、
送信後のプルダウンメニューの全47項目が選択した都道府県に変わってしまいました、、、
(例… 送信前:「東京都」を選択→
→送信後:47項目全てが「東京都」に)
もうどうすればいいか分かりません、、、
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/25 07:54
退会済みユーザー
2016/05/25 08:00
2016/05/25 08:49
退会済みユーザー
2016/05/25 08:54