php - 使用 php 变量和 SQL 语句的日期范围过滤器

标签 php jquery mysql sql variables

我正在尝试使用 MySQL 表的“至”和“自”日期范围过滤器为表创建过滤器。我无法获取所选日期来查询信息。

仅在选择日期时显示数据。如果日期是空输入字段,表格应显示所有行和数据。

表格:

    | Username | Full Name | Manager  | Review Date | Total Score |
    |-------------------------------------------------------------|
    | sjohn    | John Smith| John Dow | 2015-01-31  |    80%      |
    | sjane    | Jane Smith| John Dow | 2015-02-01  |    80%      |
    | jmike    | Mike Dow  | Jane Dow | 2015-02-02  |    75%      |
    | dmia     | Mia Dow   | Rob Smith| 2015-02-10  |    90%      |

如果我创建一个带有输入字段的表单,我想使用“查看日期”列按“fromDate”和“toDate”日期查询表。

问题:由于某种原因,变量没有存储,也没有通过 SQL 语句传递。

<form action="eerevuiew.php" method="POST">
<label for="from">From</label> 
<input type="text" id="datepicker" name="fromDate"/> 
<label for="to">to</label> 
<input type="text" id="datepicker2" name="toDate"/> 
<input name="" type="submit" /> 
</form>

<?php
$min = intval($_POST['fromDate']);
$max = intval($_POST['toDate']);
?> 

<?php

$con = mysqli_connect('localhost','root','123456','employeescore');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"employeescore");
$sql="SELECT * FROM vwscore WHERE reviewdate BETWEEN '".$min."' AND '".$max."'";
$result = mysqli_query($con,$sql);
?>



<?php
echo "<table border='1'>
<tr>
<th>Username</th>
<th>Full Name</th>
<th>Manager</th>
<th>Review Date</th>
<th>Total Score</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['display_name'] . "</td>";
echo "<td>" . $row['manager'] . "</td>";
echo "<td>" . $row['reviewdate'] . "</td>";
echo "<td>" . $row['total_score'] . "</td>";
echo "</tr>";
}
echo "</table>"; 
?>

我正在为日期选择器使用 jQuery 函数

感谢您的帮助!

最佳答案

一些可能对您有帮助的信息...

  1. 您应该检查 POST 参数是否存在以及它们是否不为空。如果是这种情况,则查询可以返回所有行。我想这就是你的意思:

If the dates are null input fields, the table should display all rows and data.

  1. 我不明白您为什么要使用 intval() 函数。看来您的日期格式为 yyyy-mm-ddintval() 将尽力从中获取有效数字。这可能会将“2015-02-01”转换为“2015”,因为 intval() 不会管理破折号。如果您对日期使用格式 yyyy-mm-dd,查询将正常工作。
  2. 可能的解决方案:

    $sql = "SELECT * FROM vwscore"; // Would display all rows
    if(isset($_POST['fromDate']) && !empty($_POST['fromDate']) && isset($_POST['toDate']) && !empty($_POST['toDate'])){ // if both dates are set and not empty...
        $sql .= " WHERE reviewdate BETWEEN '".$_POST['fromDate']."' AND '".$_POST['toDate']."'"; // ...filter dates
    }
    $result = mysqli_query($con,$sql);
    

重要提示:请注意,即使您使用日期选择器,也强烈建议转义用户输入(mysqli_real_escape_string() 应该这样做)。

关于php - 使用 php 变量和 SQL 语句的日期范围过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592863/

相关文章:

java - 使用 Hibernate 表示表关系是个好主意吗?

使用索引优化 Mysql 查询

mysql - 用相应组的最低元素的属性更新每个组的属性

jquery - SlickGrid JQuery 插件 - 将数据从一个电子表格复制到同一网页上的第二个电子表格

jQuery:随机报价脚本在用户点击时更新? document.write 问题

java - PHP JavaBridge 找不到 Java 类 Ubuntu 12.0.4 精确 PHP 5.3 Tomcat7

javascript - 验证数据库中的电子邮件地址

javascript - HTML/CSS : Focus a paragraph

php - 对于每个循环和 fancybox

php - 数据库 Codeigniter 4 中的图像不显示