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

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

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

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

0回答

495閲覧

PHP 日にち検索の作成

mjxoxo

総合スコア6

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

2クリップ

投稿2020/12/03 08:56

こんにちは。
php初学者です。

今回”2020-12-03”というような文字列を登録日としてDBのカラム(varchara)に用意しているで状態で、
スタート日とエンド日をプルダウン選択式にしユーザーに選択させ、
最終的にはスタート日の年、月、日。エンド日の年、月、日を検索buttonでPOSTし、期間内かの判定をなんとか行い、期間内であれば表示。
を行いたいと考えています。

見た目としては
【2020 年 12 月 3 日】 ~ 【2020 年 12 月 3 日】(※数字部分はプルダウンをご想像頂けばと思います。)

以下、それぞれのブックを
【左】~【右】と表現させて頂きます

下記はスタート日(【左】) の中身をネットで検索したものです。
(消してしまっていいのか不明な記述が幾つか残ってしまっているではありますが、一旦期待した通りに動いています。)

ご回答頂ける方は一目してお判りになるかと思いますが、
選択された月に応じた月末日と、選択された年に応じて閏年の有無を判定し、
ON CHANGEでリダイレクト(※用語の使い方を間違えていたらすみません。)され反映される仕様になっているものと捉えています。

これを同ページ上に【右】として仮にコピーをして、全ての変数名等を【左】のものと別になるよう書き換えた所、
見た目は期待通りになり、それぞれのブロックとしては月末日判定も閏年判定も問題なく動くようになったのですが、
当然、【左】の値を変更すると【右】はリダイレクトされ【2020 年 12 月 3 日】に戻ってしまい、
反対に【右】の値を変更すると【左】はリダイレクトされ【2020 年 12 月 3 日】に戻ってしまう状況です。

$_SESSION['']に都度6つの値を格納して反映させようと長時間格闘したのですが、上手く動きません。
お判りになる方お知恵をお貸し頂けると幸いです。

<?php // 初期化処理 ================================================================ $InternalEncoding = 'UTF-8'; mb_internal_encoding($InternalEncoding); $MySelf = basename($_SERVER['SCRIPT_NAME']); /** * 共通HTMLヘッダ * @global string $HtmlHeader */ $HtmlHeader =<<< EOD EOD; /** * 共通HTMLフッタ * @global string $HtmlFooter */ $HtmlFooter =<<< EOD EOD; // サブルーチン ============================================================== /** * 閏年かどうか判定する * @param int $year 西暦年 * @return bool TRUE:閏年である/FALSE:平年である */ function isleap($year) { $ret = FALSE; if ($year % 4 == 0) $ret = TRUE; if ($year % 100 == 0) $ret = FALSE; if ($year % 400 == 0) $ret = TRUE; return $ret; } /** * 指定した月の日数を返す * @param int $year 西暦年 * @param int $month 月 * @return int 日数/FALSE:引数の異常 */ function getDaysInMonth($year, $month) { static $days = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ($month < 1 || $month > 12) return FALSE; $days[2] = isleap($year) ? 29 : 28; //閏年の判定 return $days[$month]; } /** * HTML BODYを作成する * @param bool $mode TRUE=プルダウン/FALSE=表示 * @param int $year,$month,$day 年,月,日 * @return string HTML BODY */ function makeCommonBody($mode, $year, $month, $day) { global $MySelf; $outstr = ''; //--プルダウンメニュー if ($mode) { $name = 'exec'; //--年 $outstr .=<<< EOD <select name="year" onChange="submit();"> EOD; for ($y = 2020; $y <= $year; $y++) { $selected = ($y == $year) ? 'selected' : ''; $outstr .=<<< EOD <option value="{$y}" {$selected}>{$y}</option> EOD; } $outstr .=<<< EOD </select>年 EOD; //--月 $outstr .=<<< EOD <select name="month" onChange="submit();"> EOD; for ($m = 1; $m <= 12; $m++) { $selected = ($m == $month) ? 'selected' : ''; $outstr .=<<< EOD <option value="{$m}" {$selected}>{$m}</option> EOD; } $outstr .=<<< EOD </select>月 EOD; //--日 $dd = getDaysInMonth($year, $month); $outstr .=<<< EOD <select name="day" onChange="submit();"> EOD; for ($d = 1; $d <= $dd; $d++) { $selected = ($d == $day) ? 'selected' : ''; $outstr .=<<< EOD <option value="{$d}" {$selected}>{$d}</option> EOD; } $outstr .=<<< EOD </select>日 EOD; //--年月日を表示 } else { $name = 'display'; $outstr .=<<< EOD {$year}-{$month}-{$day} <input type="hidden" name="year" value="{$year}" /> <input type="hidden" name="month" value="{$month}" /> <input type="hidden" name="day" value="{$day}" /> EOD; } //--月が1以上9以下だった場合、検索値の先頭に0をつける。 if($month >=1 && $month <=9 ) { $month = "0".$month; } //--日が1以上9以下だった場合、検索値の先頭に0をつける。 if($day >=1 && $day <=9 ) { $day = "0".$day; } $body =<<< EOD <h3>▼登録年月日を選択してください</h3> <form name="MyForm" method="POST" action="$MySelf"> {$outstr} </form> <form name="MyForm" method="POST" action="user_r_date_search.php"> <input type="hidden" name="r_date" value="{$year}-{$month}-{$day}"> <input type="submit" class="btn btn-success" value="検索"> </form> EOD; return $body; } // メイン・プログラム ====================================================== $mode = ! isset($_POST['exec']); //プルダウン or 表示 $year = isset($_POST['year']) ? $_POST['year'] : (int)date('Y'); $month = isset($_POST['month']) ? $_POST['month'] : (int)date('m'); $day = isset($_POST['day']) ? $_POST['day'] : (int)date('d'); $HtmlBody = makeCommonBody($mode, $year, $month, $day); // 表示処理 echo $HtmlHeader; echo $HtmlBody; echo $HtmlFooter; ?>

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

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

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

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

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

FKM

2020/12/03 09:10

日付計算のスクリプト部分を提示してもらっていいですか。
mjxoxo

2020/12/03 10:15

FKM 様 有難う御座います。 ユーザーが選択した期間内を計算したり、DBから取り出す部分でしょうか(違っていたらすみません。) もしそれであれば、ここでいう【左】と【右】ブロックが正しく選択可能になってからと思い手を付けていない状況です。
FKM

2020/12/03 12:09

onChange="submit();というスクリプトが仕込まれているからです。スクリプトはJavaScriptです。
m.ts10806

2020/12/03 14:09

提示のコードにはどこにもSESSIONに関する記述がないようですが
mjxoxo

2020/12/04 05:05

FKM 様 有難う御座います。 そのあたりを重点的にもう一度調べてみます。
mjxoxo

2020/12/04 09:00 編集

m.ts10806 様 ご指摘有難う御座います。 文章中にありますように全く上手くいっていないので載せていませんでした。 $_SESSION[’year1’] = $year; $_SESSION[’month1’] = $month $_SESSION[’day1’] = $day --------------------------------------------------- として <option value="{$y}" {$selected}>{$y}</option> <option value="{$m}" {$selected}>{$m}</option> <option value="{$d}" {$selected}>{$d}</option> 其々に <?php if(!$_SESSION[`●●`]){ 元々のスクリプトで表示されてたであろう値; }else{ $_SESSION[`●●`]; }?> ※●●にはyear1やmonth1,day1を其々入力 --------------------------------------------------- のようなものを挟もうと様々試しましたが失敗しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問