- ベストアンサー
PHPで日付の範囲検索を実装する方法
- PHPを使って日付の範囲検索を実装する方法について解説します。
- セレクトフォームを使って日付を選択し、SELECT文で該当する日時を取得することができます。
- 必要な年、月、日の範囲をセレクトフォームで選択し、検索ボタンを押すと該当する日付が表示されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
もうひとつ。 PHPの分野ではありませんが、HTML5であれば<input type="date">を使って日付専用の入力ができますし、カレンダー機能が使えます。 ただ、カレンダーはすべてのブラウザが対応しているかどうかわからないのと、デザインや使い方がブラウザによって違うので、使用環境で確認してみてください。 http://www.htmq.com/html5/input_type_date.shtml
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
inputタグにtype="date"というものがあるので、それを利用した方がよいのではないですか。 https://developer.mozilla.org/ja/docs/Web/HTML/Element/input/date それ以外では特に問題はないとは思います。 HTMLにどのように表現するか、よりかはそのあとどのように処理するか(PHP側ロジック)なので。
- dell_OK
- ベストアンサー率13% (766/5720)
大体合っていると言えば合っているような気はします。 気になる点があるのであげてみます。 1.<select>~</select>の中で$yearなどに<option>~</option>を結合していますが表示していません。 結合せずにそのままechoするか、 私の普段のやり方だと先に結合しておいて、 <html>内ではechoだけにして見やすくします。 <?php $year = ''; for ($i = 2000; $i <= 2021; ++$i) { $year .= '<option value="'.$i.'">'.$i.'年</option>'; } $month = ''; for ($i = 1; $i <= 12; ++$i) { $month .= '<option value="'.$i.'">'.$i.'月</option>'; } $day = ''; for ($i = 1; $i <= 31; ++$i) { $day .= '<option value="'.$i.'">'.$i.'日</option>'; } ?> <html> ~ <select name="year"><?php echo $year; ?></select> <select name="month"><?php echo $month; ?></select> <select name="day"><?php echo $day; ?></select> ~ </html> 2.<input type="hidden" name="search" value="<?php echo $_POST['year'].'-'. $_POST['month'].'-'. $_POST['date']; ?>"> $_POST['date']の「date」はここにしか登場しませんが、「day」の誤りのような気がします。
補足
回答ありがとうございます。訂正しました。SQL文の部分をどのように修正すればいいですか? if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['year'])) { $year = filter_input(INPUT_POST, 'year'); try { // 該当する日付をSELECT文で検索する $sql = 'SELECT * FROM timecard WHERE date = ?'; $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $year, PDO::PARAM_STR); $stmt->execute(); //全て取得するのでfetchALLでレコードを取得する $result = $stmt->fetchALL(); // phpmyadminには、2021-10-03の形式で保存されているので、2021の部分だけを抽出して$yearと比較する。 if(count($result) > 0 && $year === substr($result['date'], 0, 4)) { $msg[] = ('指定の出退勤の記録は以下の通りです。'); }else { $err_msg[] = ('指定の出退勤の記録はありません。'); } } catch (PDOException $e) { $err_msg[] = '出退勤の記録を取得できませんでした。'; } } } <div class="search"> <form method="post"> <?php for ($i=2000; $i <= 2021; $i++) { $year .= '<option value="'.$i.'">'.$i.'年</option>'; } ?> <input type="hidden" name="year" value="<?php $year;?>"> <select name="year">'.<?php echo $year;?> .'</select> <input type="submit" value="検索する"> </form> </div>