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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5917閲覧

プルダウンメニューで年月日を入力し,その値を受け取れるようにしたい

P_Beginner

総合スコア99

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/07/05 10:34

編集2018/07/05 11:15

HTML,PHP,JavaScript

プルダウンメニューで年月日を入力し,その値を受け取れるようにしたいです.
しかし,どうもうまくいかないのでダメなところを指摘して改善したいです。
条件として
(1) 存在する年月日のみが選択できること(=2月30日,4月31日などは選択できないこと)
(2) 閏年が考慮されていること(=2月が28日までのものと29までのものが存在)
(3) 現在までの年月日のみが選択できること(=未来は選択できないこと)
(4) 補足:送信ボタンを押した後に,自分自身に帰ってくる場合(action="index.php")に押下した値がリセットされずに残っているとなお良い

実際に自分で考えてみて,下のようになりました.
bodyタグを含め,その中身を貼ります.
PHP,JavaScript,CSSは同じファイルに記述するものとします.

条件分岐は(1)〜(3)を考慮しようと付けたものです.

イメージ的にはyear,month,dayに現在年月日を,
selectYear,selectMonth,selectDayに選択年月日を入れてプログラムを組んだつもりです.

HTML

1<body> 2<center> 3<body bgcolor onLoad="dateFunc()"> 4 <img src="LOGO.png" alt=""> 5 <h2>見出し</h2> 6 <?php 7 date_default_timezone_set('Asia/Tokyo'); 8 $year=filter_input(INPUT_GET,'year')?:date('Y'); 9 $month=filter_input(INPUT_GET,'month')?:date('n'); 10 $day=filter_input(INPUT_GET,'day')?:date('j'); 11 ?> 12 <form name="selectDate" method="get"> 13 <select name="selectYear"> 14 <?php 15 for($i=2015;$i<=date('Y');$i++){ 16 $selected=$i==$year?"selected":""; 17 print "<option value=\"{$i}\"{$selected}>{$i}</option>"; 18 } 19 ?> 20 </select> 年 21 <select name="selectMonth"> 22 </select> 月 23 <select name="selectDay"> 24 </select> 日 25 26 <script type="text/javascript"> 27 var year='<?php echo $year; ?>'; 28 var month='<?php echo $month; ?>'; 29 var day='<?php echo $day; ?>'; 30 function dateFunc(){ 31 var select1 = document.forms.selectDate.selectYear; 32 var select2 = document.forms.selectDate.selectMonth; 33 var select3 = document.forms.selectDate.selectDay; 34 35 select2.options.length=0; 36 select3.options.length=0; 37 38 if(select1.options[select1.selectedIndex].value==year){ 39 for(i=1;i<=month;i++){ 40 select2.options[i-1] = new Option(i); 41 } 42 } 43 else{ 44 for(i=1;i<=12;i++){ 45 select2.options[i-1] = new Option(i); 46 } 47 } 48 49 if(select1.options[select1.selectedIndex].value==year||select2.options[select2.selectedIndex].value==month){ 50 for(i=1;i<=day;i++) 51 select3.options[i-1] = new Option(i); 52 } 53 if(select2.options[select2.selectedIndex].value==4||select2.options[select2.selectedIndex].value==6||select2.options[select2.selectedIndex].value==9||select2.options[select2.selectedIndex].value==11){ 54 for(i=1;i<=30;i++) 55 select3.options[i-1] = new Option(i); 56 } 57 else if (select2.options[select2.selectedIndex].value==2){ 58 if((select1.options[select1.selectedIndex].value%4==0&&select1.options[select1.selectedIndex].value%100!=0)||select1.options[select1.selectedIndex].value%400==0){ 59 for(i=1;i<=29;i++) 60 select3.options[i-1] = new Option(i); 61 } 62 else{ 63 for(i=1;i<=28;i++) 64 select3.options[i-1] = new Option(i); 65 } 66 } 67 else{ 68 for(i=1;i<=31;i++) 69 select3.options[i-1] = new Option(i); 70 } 71 } 72</script> 73<input type="submit" value="送信"> 74</form> 75</center> 76</body> 77

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

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

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

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

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

m.ts10806

2018/07/05 10:37

インデントちゃんとつけてください。バグの温床となりえます。
guest

回答2

0

(1) 存在する年月日のみが選択できること(=2月30日,4月31日などは選択できないこと)

(2) 閏年が考慮されていること(=2月が28日までのものと29までのものが存在)
(3) 現在までの年月日のみが選択できること(=未来は選択できないこと)

全体的にできないことは無いですが、相当めんどくさい上に
UIはクソになりますがだいじょうぶですか?

2/30を選ばせないためには、日付は年と月が確定してからじゃないと選べない
ようにしなくてはいけません。
また日付を選んだあとに年や月を変更できないようにする必要があります。
(特定の日付だけしぼることもできるけど)

上記を満たせば閏年や未来日は大した障害にはなりません。

考え方を逆転させ、すべてを選んだときに、有効な日付だったときだけ
送信ボタンを押せるようにするようなインタフェースのほうが
まっとうだと思いますし、別に存在しない日付を送ったからと言って
受け取った側がエラーを返せば済むので、あまり無駄なフィルタのために
変な挙動をさせるのはユーザーのフラストレーションにしかならないので
やめたほうが良いと思います

投稿2018/07/05 10:56

yambejp

総合スコア114572

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

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

0

ベストアンサー

JQueryのdetepickerを使えば見栄えもいいし数行で書けると思います。
勉強のために日付入力を実装したいなら話は別ですが。
参考
http://rufas.manyoldmoon.com/blog/1403
http://www.webdesign-fan.com/jquery-ui-datepicker

投稿2018/07/05 12:45

satocha

総合スコア336

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問