我正在尝试使用 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 函数。
感谢您的帮助!
最佳答案
一些可能对您有帮助的信息...
- 您应该检查 POST 参数是否存在以及它们是否不为空。如果是这种情况,则查询可以返回所有行。我想这就是你的意思:
If the dates are null input fields, the table should display all rows and data.
- 我不明白您为什么要使用
intval()
函数。看来您的日期格式为 yyyy-mm-dd。intval()
将尽力从中获取有效数字。这可能会将“2015-02-01”转换为“2015”,因为intval()
不会管理破折号。如果您对日期使用格式 yyyy-mm-dd,查询将正常工作。 可能的解决方案:
$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/