- ベストアンサー
PHPでフォームからURLへの値の受け渡し
選択された値をURLとして移動させたいと考えています。 例えば、http://example.com/というページにフォームを設置し、 ドロップダウンメニューから四国を選択すると http://example.com/shikoku/というページが表示されるといった具合です。 他のページを参考しつつ自分で考えてみたのですが、2度送信ボタンを押さなければページが表示されません。 最近になってPHPを触りはじめたので、いまいち何がおかしいのかわからず困っています…。 どなたかご教授お願いします。また、変な部分もあるかと思いますので、よろしければ教えてください。 <?php if($_POST['submit']) {$url = $_POST['tiiki']."/".$_POST['ken'] ;}?> <form action="<?php echo $url ;?>" method="post"> <select name="tiiki"> <?php $tiiki = array("kyusyu"=>"九州","shikoku"=>"四国");?> <?php foreach ( $tiiki as $tiiki1=>$tiiki2 ){?> <option value="<?php echo $tiiki1 ;?>"><?php echo $tiiki2 ;?></option> <?php };?> </select><br /> <select name="ken"> <?php $ken = array("fukuoka"=>"福岡","ehime"=>"愛媛");?> <?php foreach ( $ken as $ken1=>$ken2 ){?> <option value="<?php echo $ken1 ;?>"><?php echo $ken2 ;?></option> <?php };?> </select><br /> <input type="submit" name="submit" value="送信"> </form>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
急ごしらえだったので、こんなものしか作れませんでしたが、 参考にどうぞ、 僕がテストで作ったので、 フォルダじゃなくて、ファイル(.php)を足していますが、 適当に消してください。 尚、これがすべてのやり方ではありません、 ほかにも何通りはやり方があると思います。 (違うファイルでロジックかませるとか・function使うとか・・) ひとつ付け足せばセキュリティー観点から、 valueにfukuokaとかそのままの値を渡すのはお勧めできません。 できれば変えたほうがいいです。 お力になれれば幸いです。 <?php //適当に拡張子ははずしてください。 if(isset($_POST['submit'])){ $url = $_POST['tiiki'].".php"; header("Location:./{$url}"); } ?> <html> <head> <title>テスト</title> </head> <body> <!--フォーム開始--> <form action="<?php $_SERVER['PHP_SELF']?>" method="POST"> <select name = "tiiki"> <?php $ken =array("fukuoka"=>"福岡","ehime"=>"愛媛"); foreach($ken as $key=>$value){?> <option value="<?= $key?>"><?php echo $value?></option> <?php } ?> <!--面倒なので二つしか作ってません、尚、valueにそのままの値を入れるのは好ましくありません--> </select> <input type ="submit" name="submit" value="送信"> </form> </body> </html>
その他の回答 (2)
- masa6272
- ベストアンサー率66% (93/140)
まず、PHPはサーバーで動いてHTMLのソースコード送るものであるという事を確認してください。最初にこのページが表示されると$_POSTには何も入っていませんから、$urlは定義されません。従ってactionは""になります。 この状態でサブミットされると、再度このページが表示されます。その時は$urlが定義され、actionのところに飛び先が書かれます。したがって、もう一度サブミットすると目的のページに飛びます。ここで、選択肢を変えてもactionに書かれたurlに飛びます。 直接飛ばすんでしたら、formのactionを飛ぶ前にブラウザ上で変える必要があります。actionを直接書くのではなく、onsubmitでactionを動的に変えてやればいいでしょう。 <form onsubmit="this.action=this.tiiki.value + "/" + this.ken.value" method="post"> こんな感じですね。"は、ダブルクォートを意味します。このまま書いて下さいね。
お礼
今回はできればJavaScriptは使いたくないのです。 ですが、今後のためにも覚えておきます。ありがとうございました!
- duckoo
- ベストアンサー率22% (11/48)
一行目があるから二回送信しないといけなくて、一行目をなくして$urlの値を直接actionに書けば一回の送信で済みます。これじゃだめですか? <form action="<?php echo $_POST['tiiki']."/".$_POST['ken'] ;?>" method="post"> <select name="tiiki"> <?php $tiiki = array("kyusyu"=>"九州","shikoku"=>"四国");?> <?php foreach ( $tiiki as $tiiki1=>$tiiki2 ){?> <option value="<?php echo $tiiki1 ;?>"><?php echo $tiiki2 ;?></option> <?php };?> </select><br /> <select name="ken"> <?php $ken = array("fukuoka"=>"福岡","ehime"=>"愛媛");?> <?php foreach ( $ken as $ken1=>$ken2 ){?> <option value="<?php echo $ken1 ;?>"><?php echo $ken2 ;?></option> <?php };?> </select><br /> <input type="submit" name="submit" value="送信"> </form>
補足
ありがとうございます。 試してみましたが、うまくいかないようです…。
お礼
ありがとうございます。 他との兼ね合いもあり少し苦戦してしまいましたが、おかげさまでうまくいきました。 他の方法、valueの件についても検討していきたいと思います。 本当にありがとうございました!