アプリ版:「スタンプのみでお礼する」機能のリリースについて

選択された値を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>

A 回答 (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>
    • good
    • 0
この回答へのお礼

ありがとうございます。
他との兼ね合いもあり少し苦戦してしまいましたが、おかげさまでうまくいきました。
他の方法、valueの件についても検討していきたいと思います。
本当にありがとうございました!

お礼日時:2008/10/31 15:15

まず、PHPはサーバーで動いてHTMLのソースコード送るものであるという事を確認してください。

最初にこのページが表示されると$_POSTには何も入っていませんから、$urlは定義されません。従ってactionは""になります。
この状態でサブミットされると、再度このページが表示されます。その時は$urlが定義され、actionのところに飛び先が書かれます。したがって、もう一度サブミットすると目的のページに飛びます。ここで、選択肢を変えてもactionに書かれたurlに飛びます。

直接飛ばすんでしたら、formのactionを飛ぶ前にブラウザ上で変える必要があります。actionを直接書くのではなく、onsubmitでactionを動的に変えてやればいいでしょう。

<form onsubmit="this.action=this.tiiki.value + &quot;/&quot; + this.ken.value" method="post">

こんな感じですね。&quot;は、ダブルクォートを意味します。このまま書いて下さいね。
    • good
    • 0
この回答へのお礼

今回はできればJavaScriptは使いたくないのです。
ですが、今後のためにも覚えておきます。ありがとうございました!

お礼日時:2008/10/31 15:17

一行目があるから二回送信しないといけなくて、一行目をなくして$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>

この回答への補足

ありがとうございます。
試してみましたが、うまくいかないようです…。

補足日時:2008/10/31 14:08
    • good
    • 0

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