質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3185閲覧

phpで生年月日のセレクトを結合したい

m-iwai

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/17 07:43

応募フォームを現在作成しており、生年月日を取得したいと思っています。

phpで年(1960〜2005)、月(1〜12)、日(1〜31)のselectをそれぞれ作り、それらの値をまた別の変数($birthday)で統合して出力したいのですが、その値が20061332で固定されてしまい、selectを変更しても変わりません。

どうやら2005+1,12+1,31+1が合わさって20061332として値が取得されているようで、$birthdayにそれぞれのselectで決定した値を反映させるにはどのようにしたらよろしいでしょうか。

<div class="formSection"> <p>生年月日</p> <select> <option value="">-</option> <?php for ($year = 1960; $year <= 2005; $year ++) { echo "<option >{$year}</option>"; } ?> </select> 年 <select> <option value="">-</option> <?php for ($month = 1; $month <= 12; $month ++) { echo "<option >{$month}</option>"; } ?> </select> 月 <select> <option value="">-</option> <?php for ($day = 1; $day <= 31; $day ++) { echo "<option >{$day}</option>"; } ?> </select> 日 <?php $birthday = $year.$month.$day; echo "<input name='生年月日' value='{$birthday}'>"; ?> </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2019/05/17 08:26

このフォームは最終的にsubmitするんですか?
m-iwai

2019/05/17 08:29

最終的にsubimitします。 また別のphpと組み合わせてメール送信する予定です。
guest

回答2

0

ベストアンサー

PHP

1<?php 2 $birthday = $year.$month.$day; 3 echo "<input name='生年月日' value='{$birthday}'>"; 4?>

このコードに到達したときの $year, $month, $day は、それぞれ上の方にある for の処理の終了後の値がそのまま使われています。

ですから、$year は 2005 の一つ先で 2006、 $month は 13、$day は32 になりますね。

select で決定した値は、この時点ではまだ決まっていませんから、ここで $birthday を入れていること自体が誤りです。

こういう場合は JavaScript を使って、それぞれの select の値が変更されたときのイベントで、生年月日のインプットフォームの値を更新しましょう。

投稿2019/05/17 07:54

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m-iwai

2019/05/17 08:08 編集

非常にわかりやすいご回答いただきありがとうございます! なるほど、forの処理後の値だからそれぞれ2006,13,32なのですか。 このままではselectで決定した値が更新されないのですね。 Javascriptも必要なのですね。。まだphpもJavascriptも覚えたてで、よろしければ具体的にどのように記述すれば良いかご教授願えますでしょうか? お教え頂けますと非常に助かります。
tacsheaven

2019/05/17 08:18 編集

JavaScript で、それぞれの select の変更が起きたイベントが発生したときに対応するイベントハンドラを呼び出さねばなりません。(これは <select> の onchange イベントを定義してやる) で、そのイベントの中で、それぞれの select の値を取り出し(document.getElementsByName などを使う)、それを文字列として結合したうえで、生年月日のところに値を設定してやります。 PHP は画面を「表示するまで」に動き終わってしまうので、そのあとのユーザーの操作に追随する部分は、PHP で書いても意味がありません。(画面をリロードすれば反映されるでしょうが、ユーザーが年を決定したらリロード、では使い勝手が悪いでしょうね)
m-iwai

2019/05/17 08:35

ご丁寧に教えていただきありがとうございます! それぞれのselectの変更に対応するイベントハンドラ... その中でそれぞれのselectの値を取り出すのですね。 非常に参考になりました! まだまだ初心者も初心者ですが、javascriptも含めてチャレンジしてみようと思います。
guest

0

PHPを前提としているならサブミットしてやればよいのでは?

PHP

1<?PHP 2$year =filter_input(INPUT_POST,"year"); 3$month=filter_input(INPUT_POST,"month"); 4$day =filter_input(INPUT_POST,"day"); 5 6$opt["year"]=""; 7for ($y = 1960; $y <= 2005; $y ++) { 8 $selected=$year==$y?" selected":""; 9 $opt["year"].="<option valuie=\"{$y}\"{$selected}>{$y}</option>"; 10} 11$opt_month=""; 12for ($m = 1; $m <= 12; $m ++) { 13 $selected=$month==$m?" selected":""; 14 $m2=substr("0".$m,-2); 15 $opt_month.="<option value=\"{$m2}\"{$selected}>{$m}</option>"; 16} 17$opt_day=""; 18for ($d = 1; $d <= 31; $d ++) { 19 $selected=$day==$d?" selected":""; 20 $d2=substr("0".$d,-2); 21 $opt_day.="<option value=\"{$d2}\"{$selected}>{$d}</option>"; 22} 23 24$birthday = $year.$month.$day; 25$h_birthday = htmlspecialchars($birthday); 26print <<<eof 27<form method="post"> 28<p>生年月日</p> 29<select name="year"> 30<option value="">-</option> 31{$opt["year"]} 32</select> 年 33<select name="month"> 34<option value="">-</option> 35{$opt_month} 36</select> 月 37<select name="day"> 38<option value="">-</option> 39{$opt_day} 40</select> 日 41<input name='生年月日' value='{$h_birthday}'> 42<input type="submit" value="send"> 43</form> 44eof;

投稿2019/05/17 08:13

yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m-iwai

2019/05/17 08:42

最終的にはsubmitするんですが、submitしても$birthdayの値が変わらなくて困っていたところです。 詳細なコードありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問