※ ChatGPTを利用し、要約された質問です(原文:PHPで日付の範囲検索)
PHPで日付の範囲検索を実装する方法
このQ&Aのポイント
PHPを使って日付の範囲検索を実装する方法について解説します。
セレクトフォームを使って日付を選択し、SELECT文で該当する日時を取得することができます。
必要な年、月、日の範囲をセレクトフォームで選択し、検索ボタンを押すと該当する日付が表示されます。
PHPを使って日付の範囲検索を実装しています。日付をセレクトフォームで選択し、該当する日時をSELECT文で記述するという流れです。イメージは以下のような感じですが、大体合っていますか?
<? php
if (!empty(filter_input(INPUT_POST, 'day'))) {
$day = filter_input(INPUT_POST, 'day');
・・・・
SELECT 文
・・・・
?>
<html>
<div class="search">
<form method="post">
<select name="year">
<?php for ($i=2000; $i <= 2021; $i++) {
$year .= '<option value="'.$i.'">'.$i.'年</option>';
} ?>
</select>
<select name="month">
<?php for ($i=1; $i <= 12; $i++) {
$month .= '<option value="'.$i.'">'.$i.'月</option>';
} ?>
</select>
<select name="day">
<?php for ($i=1; $i <= 31; $i++) {
$day .= '<option value="'.$i.'">'.$i.'日</option>';
} ?>
</select>
<input type="hidden" name="search" value="<?php echo $_POST['year'].'-'. $_POST['month'].'-'. $_POST['date']; ?>">
<input type="submit" value="検索">
</form>
</div>
</html>
補足
回答ありがとうございます。訂正しました。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>