• ベストアンサー

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>

  • PHP
  • 回答数3
  • ありがとう数7

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

  • ベストアンサー
  • se-nabe
  • ベストアンサー率34% (31/91)
回答No.1

急ごしらえだったので、こんなものしか作れませんでしたが、 参考にどうぞ、 僕がテストで作ったので、 フォルダじゃなくて、ファイル(.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>

budhappy
質問者

お礼

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

その他の回答 (2)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

まず、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;は、ダブルクォートを意味します。このまま書いて下さいね。

budhappy
質問者

お礼

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

  • duckoo
  • ベストアンサー率22% (11/48)
回答No.2

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

budhappy
質問者

補足

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

関連するQ&A

  • PHPでのフォームの受け渡しについて

    PHPの勉強中の者です。 PHPでフォームの受け取りの時に入力データのIDを受け取り、出力させるやり方について模索しています。 具体的には以下の通りです。 例えば、セレクトフォームのIDをそれぞれAAAとBBBにします。 ーーーーーーーーーー [フォーム内] <form action="file.php" method="post" name=""> <select name="data1" size="1"> <option value="0">選択する</option> <option value="100" id="AAA" >aaa</option> <option value="200" id="BBB" >bbb</option> </select></form> ーーーーーーーーーー [出力結果] AAA は aaa です。 BBB は bbb です。 ーーーーーーーーーー 選択された aaa の受け取りは、 $data1[] = $_POST['data1']; これで出来ると思いますが、idを受け取り出力する方法が分からないのです。 どなたかわかる方ご教授お願い出来ますでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • phpで作る親子のコンボボックスについて

    phpだけでコンボボックスを作りたいのですが良い方法が見つかりません。 javascriptを使う方法は下記サイトに方法が載っているのでわかるのですが、 http://phpjavascriptroom.com/exp.php?f=include/js/selectoption/pulldown.inc&ttl=%E9%80%A3%E5%8B%95%E3%83%97%E3%83%AB%E3%83%80%E3%82%A6%E3%83%B3 post関数を使えば良いと思いますが、ページの移動なく、クリックイベントを条件分岐できないかと思案中です。助言をお願いします。 <?php $titles = array('さんぷる','サンプル'); $example = array('1', '2'); echo '<select name="test">'; foreach ($titles as $key => $sample) { if ($ibanners == $ibanner) { echo '<option name="' . $example[0] . '" value="' . $example[0] . '" selected="selected">' . $sample . '</option>'; } else { echo '<option name="' . $example[1] . '" value="' . $example[1] . '">' . $sample . '</option>'; } } echo '</select>'; $momo = array('さっかー','やきゅう','ばすけ','ごるふ'); $tetsu = array('サッカー','ヤキュウ','バスケ','ゴルフ'); echo '<select name="saikoro">'; foreach($momo as $bonbi) { if ($GODbonbi == $bonbi) { echo '<option name="カテゴリ01" value="' . $bonbi . '" selected="selected">' . $bonbi . '</option>'; } else { echo '<option name="カテゴリ01" value="' . $bonbi . '">' . $bonbi . '</option>'; } } foreach($tetsu as $bonbi) { if ($GODbonbi == $bonbi) { echo '<option name="カテゴリ02" value="' . $bonbi . '" selected="selected">' . $bonbi . '</option>'; } else { echo '<option name="カテゴリ02" value="' . $bonbi . '">' . $bonbi . '</option>'; } } echo '</select>'; ?>

    • ベストアンサー
    • PHP
  • phpでのセレクトボックスからの受け渡しについて

    phpにおいての、セレクトボックスにより選択させたデータの受け渡しについて、どなかか教えてください。 授業評価アンケートのデータ収集システムを卒研で開発しています。 その中の一部で、 年度・学年・クラス を各々セレクトボックスにて選択させるページがあります。 仮にpage1.htmlとし、以下にその一部を示します。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> <P> 年度: <SELECT name="nendo"> <OPTION value="1">2006</OPTION> <OPTION value="2">2007</OPTION> <OPTION value="3">2008</OPTION> <OPTION value="4">2009</OPTION> <OPTION value="5">2010</OPTION> <OPTION value="6" selected>2011</OPTION> <OPTION value="7">2012</OPTION> </SELECT> 学年: <SELECT name="gakunen"> <OPTION value="1">1年</OPTION> <OPTION value="2">2年</OPTION> <OPTION value="3">3年</OPTION> <OPTION value="4">4年</OPTION> </SELECT> クラス: <SELECT name="class"> <OPTION value="1">1組</OPTION> <OPTION value="2">2組</OPTION> <OPTION value="3">3組</OPTION> <OPTION value="4">4組</OPTION> <!-- --> </SELECT> </P> <P><INPUT type="submit" value="科目選択へ"> <INPUT type="reset" value="取り消す"></P> 次のページ(page2.php)では 科目・分類 を各々セレクトボックスにて選択させるページを用意します。 その際に、科目・分類の各々のセレクトボックスの上に、 前ページ(page1.php)にて選択された値(valueではなく文字列(2008,1年))を表示します。 年度:~~ 学年:~~ クラス:~~ これについては以下の方法で成功しました。 年度:<? echo $_POST["nendo"]+2005?> 年 学年:<? if ($_POST["gakunen"] == "1"){ echo "1年"; } else if ($_POST["gakunen"] == "2"){ echo "2年"; } else if ($_POST["gakunen"] == "3"){ echo "3年"; } else if ($_POST["gakunen"] == "4"){ echo "4年"; } ?> クラスについても同様の手法。 ここからが本題です。 page1.html→page2.php に受け渡した年度・学年・クラスのデータを page2.php→page3.php にも同じように、年度:~~・・・と表示させたいのですが、わかりません。 hiddenというのを使うのでしょうか。 調べても、このパターンのように1ページまたいでのデータの受け渡し方法がよくわかりません。 他の方法もあるのでしょうか。 どなたか具体的に教えてください!

    • 締切済み
    • PHP
  • HTML→PHP フォームの値の受け渡しができません

    PHPをはじめたばかりの初心者です。 ネットでいろいろ調べましたがわからず困っています。 お助けくださいm(_ _)m <内容> フォームの入力内容をPHP側で参照できません。 具体的には、 <form method="post" action="test.php"> <select name="BirthDay" size="1"> <option value="1">1月生まれ</option> <option value="2">2月生まれ</option> <option value="3">3月生まれ</option> </select> <input type="submit" value="決定"> </form> で飛ばした値を、 print($BirthDay); で表示させようとしています。 しかし、$BirthDayには何も入ってきません。 ただ、できないのはローカル環境だけで、 実際、他のサーバーにアップしてやると正常に 動作します。 ローカル環境は Win2000SP4+PHP4.4.1+Apache1.3.34 です。 httpd.confを見直しましたがわかりませんでした。 ぜひアドバイスをお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • PHP

    PHPで質問があります。funに「無し」を選択すると結果が?になり文字化けします。なぜでしょうか? <select name="fun"> <option vaue="*">無し</option> <option value="1">01</option> <option value="2">02</option> <option value="3">03</option> <option value="4">04</option> <option value="5">05</option> <option value="0">00</option> </select> </p> <input type="submit" value="設定" /> </form> </body> </html> <?php echo $_POST['fun']; echo " "; echo $_POST['jikan']; echo " "; ?>

    • ベストアンサー
    • PHP
  • フォームから値の受渡し

    http://www.stackasterisk.jp/tech/php/php02_06.jsp こちらのページを参考にしてみたのですが、うまく表示されません 解決法ご存知でしょうか? 具体的には、display.php3 のページは表示されますが ソースを見ると php の部分になにも書かれてないようです display.php3 > display.php にしたり <? → <?php に変えたりしてみたのですけども 【form.html】 <html><body> <form action="display.php3" method="POST"> <input type="text" name="fName" size="30"><br> <input type="submit" value="submit"> </form> </body></html> 【display.php3】 <html><body> <? print $fName; ?> </body></html>

    • ベストアンサー
    • PHP
  • phpの値の受け渡し方法について

    b.phpの <dl> <form action='a.php' method='post'> <dt>生年月日</dt> <dd> <select name="Y"> <?php $start = 1920; //始まりの年 $end = 2020; //終わりの年 $select = 2000; //最初に選択された状態で表示したい年 for ($i=$start;$i<=$end;$i++){ if($i==$select){ echo "<option value=\"$i\" selected=\"selected\">$i</option>\n"; }else{ echo "<option value=\"$i\">$i</option>\n"; } } ?> </select> 年 <select name="M"> <?php for ($i=1;$i<=12;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> 月 <select name="D"> <?php for ($i=1;$i<=31;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> 日 </dd> </dl> <input type="submit" value="送信する" /> </form> というコードで取得した生年月日をa.phpに渡し、表示させます。 a.phpファイルで <?php print('誕生日は:' . ($_REQUEST['Y']. '年',ENT_QUOTES)); print(($_REQUEST['M']. '月',ENT_QUOTES)); print(($_REQUEST['D']. '日',ENT_QUOTES)); ?> と、コードを入力しましたら、 誕生日は:1985年1月31日 という値を受け取り、ブラウザ上で表示することはできたのですが、他のコードで表示する方法はないのかと考えております。 もし、他のコードで表示できる方法がありましたらぜひ教えてください。お願いします。

    • ベストアンサー
    • PHP
  • Formを使ったPHP間での受け渡しについて

    いつもお世話になっています。 PHP間での変数の受け渡しで・・ <form action="<?= test.php ?>" method="POST">   <input type="hidden" name="id" value="aaa"/>   <input type="submit" name="submit" value="送信"> </form> と記述するとtest.phpには渡したいaaaが渡されるのですが、 これだとsubmitを押さないと渡せないため困っています。 したいことをまとめると、submitを使わずにページが表示されたら スグに変数が渡されるようにしたいです。 いろいろ試してみましたが、力不足で出来ませんでした。 宜しくお願いします!

    • ベストアンサー
    • PHP
  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう