Фильтрация данных из базы данных при вводе datetimepicker с использованием MySQL, PHP и PDO - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь выполнить поиск по входу в два datetimepicker и отобразить результаты в таблицу, но когда я выбираю конкретную ярость даты, все данные отображаются. Я использую MySQL и PDO.

Вот мой код.

<?php
$date1 = date("Y-m-d", strtotime($_POST['date1']));
$date2 = date("Y-m-d", strtotime($_POST['date2']));

$db = new PDO('mysql:host=localhost;dbname=db_search;charset=utf8mb4', 
'root', '');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$sql = "select * from book";
$stmt = $db->prepare($sql);
$stmt->execute(); 
$row_count = $stmt->rowCount();
if($row_count > 0){
while($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<tr>
    <td><?php echo $row['ISBN']?></td>
    <td><?php echo $row['title']?></td>
    <td><?php echo $row['author']?></td>
    <td><?php echo date("m/d/Y", strtotime($row['date_published']))?></td>
</tr>
<?php
}
}else{
    echo '
    <tr>
        <td colspan = "4"><center>Record Not Found</center></td>
    </tr>
    ';
}
?>

1 Ответ

0 голосов
/ 17 сентября 2018

Вы фактически не включили условия даты в свой запрос, поэтому он по-прежнему возвращает все данные. Измените ваш запрос на

$sql = "select * from book where date_published between '" . min($date1, $date2) . "' and '" . max($date1, $date2) . "'";

Если вы знаете, что $date1 меньше $date2, вы можете упростить это до

$sql = "select * from book where date_published between '$date1' and '$date2'";

Обратите внимание, что ваш код широко открыт для SQL-инъекций, вы должны действительно использовать подготовленные операторы. См. этот вопрос для получения дополнительной информации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...