- ベストアンサー
選択されたプルダウンの値を変数に渡したい
以下の日付プルダウンですが、 任意の日付が選択されたときに、 その値(日付)を他の変数に渡せるようにしたいです。 どのように他の変数に渡せば良いでしょうか? <? $today=time(); $limit=30; echo "<select name=puldown>"; $menu=$today; for($i=0; $i<$limit; $i++){ $menu=date("Y/m/d",$today-86400 * $i); echo "<option value=$menu>$menu</option> \n"; } echo "</select>"; ?>
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
同じページへ渡すのであればPOSTよりGETのが書きやすいかもしれないです。main.phpの先頭でプルダウンが変更された時とそうでないときの判定が必要になります。 ----- ページの先頭 ----- <?php if(isset($_GET['sendday'])) { //日付を受け取る $sendday = $_GET['sendday']; //SQL用に日付を加工 $sqlday = addslashes(date('Y/m/d',$sendday)); //DB接続・選択処理 //SQL作成 //SQL実行 } //自身のスクリプト名 $self = $_SERVER['SCRIPT_NAME']; ?> html記述開始 <!DOCTYPE ~ で、javascript記述ですがプルダウンのoptionのvalueにジャンプしたいURLとそのURLに渡したい値をパラメータでつけてやって飛ばすようにします。 <SCRIPT LANGUAGE="JavaScript"> <!-- function Jump() { //valueを取得する url = f.elements['pulldown'].options[f.elements['pulldown'].selectedIndex].value if(url != "-") { //指定ページへジャンプ location.href = url; } } // --> </SCRIPT> html記述 <body> ~~~ ジャンプ後プルダウン部分は表示しないのであれば <?php //ジャンプする前 if(!isset($_GET['sendday'])) { ?> <form name="f"> <select name="pulldown" onChange="Jump();"> <option value="-" >日付を選択</option> <?php $limit=30; for($i=0;$i<$limit;$i++) { //今日から30日間 $day = mktime (0, 0, 0, date("m"), date("d")+$i, date("y")); $strday = date('Y/m/d', $day); ?> <option value="<?php echo $self ?>?sendday=<?php echo $day ?>"><?php echo $strday ?></option> <?php } ?> </select> </form> <?php } //ジャンプした後 else { ?> SQLを<?php echo $sqlday ?>で抽出した結果をここに記述 <?php } ?> </body> こんな感じではないでしょうか。
その他の回答 (4)
- hrm_mmm
- ベストアンサー率63% (292/459)
location.href では、フォームデータを渡さないので、 <select name="pulldown" onChange="this.form.submit()" > でいけると思うけど。 JavaScript offの時は動作しないので、submitボタンも置いておく必要はあります。
お礼
上手くいきました! シンプルなので、今回はこれで行きたいと思います。 ありがとうございました!
- gogo-tea
- ベストアンサー率75% (25/33)
javascriptですね。 同じようなことをやっていた方が参考URLに書かれています。
補足
ありがとうございます。 ただ、別ページに飛ばしたいわけではなく、同ページに更新をかけるような感じになるので、以下のようにやってみました。 が、PHPが処理される前に、同ページ(main.php)に飛ぶだけ(ただ更新されるだけ)で、ブラウザには何も反映されないようです。 <SCRIPT LANGUAGE="JavaScript"> <!-- function Jump() { location.href = 'main.php'; } // --> </SCRIPT> <select name="pulldown" onChange='Jump();'>
- ssecnirp
- ベストアンサー率0% (0/1)
やりたいことがイマイチよく判らないのですが・・・。 新しい変数に渡したいだけなら <? $today=time(); $limit=30; //データをPOSTで受取新しい変数へ $new_hensu = $_POST["puldown"]; echo "<FORM METHOD='POST' ACTION='$SERVER[PHP_SELF]'>"; echo "<select name=puldown>"; $menu=$today; for($i=0; $i<=$limit; $i++){ $menu = date("Y-m-d", $today - 86400 * $i); echo "<option value=$menu>$menu</option> \n"; } echo "</select>"; echo "<input type='submit' value='Go!'>"; echo "<form>"; echo "<br>"; echo "$new_hensu"; ?> こんな感じ?
補足
ご回答ありがとうございます。 やりたいことは、単に選択された日付で、テーブルのデータを抽出してブラウザに返したいだけです。 SQL以降はできているので、あとは日付選択で日付を変数に渡すところだけなのです。 日付を選択したと同時にサブミットさせたいのですが、何か良い方法はありますでしょうか? javascriptとか使わないと、PHPだけだと無理でしょうかね?
- gogo-tea
- ベストアンサー率75% (25/33)
書かれたソースを実行するとエラーがでるのですが・・・。 ----- 日付選択側php ----- <body> <form name="form1" method="post" action="getdate.php" target="_blank"> <select name="pulldown"> <?php $limit=30; for($i=0;$i<$limit;$i++) { //今日から30日分 $day = mktime (0, 0, 0, date("m"), date("d")+$i, date("y")); $strday = date('Y/m/d', $day); ?> <option value="<?php echo $day ?>"><?php echo $strday ?></option> <?php } ?> </select> <br> <br> <input type="submit" name="Submit" value="送信"> </form> </body> ----- 受け取り側php ----- <?php $getdate = $_POST['pulldown']; $viewdate = date('Y/m/d', $getdate); echo $viewdate; ?> 上記のような感じでできるかと思います。 渡す時は整形する前の形で渡して受け取った側で整形してやるのが簡単で良いかと思います。
補足
書いたソースを実行するとエラーがでるのは、見やすさを優先して全角スペースを入れて投稿してしまったためだと思います。 すいません。。 ご回答ありがとうございました! ただ、日付を選択したと同時にサブミットさせたいのですが、何か良い方法はありますでしょうか?
お礼
何度もありがとうございます! 今回は、簡単なコード修正で済むのでANo.4さんのやり方で行くことにしましたが、貴重な手法をお教えいただき、大変感謝しています。 ぜひ、今後に役立たせていただきたいと思います。 何かありましたら、またよろしくご教授くださいませ。