使用php变量和SQL语句的日期范围过滤器
我正在尝试使用MySQL表的“to”和“From”日期范围过滤器为表创建一个过滤器。我无法获取所选日期以查询信息 仅在选择日期时显示数据。如果日期为空输入字段,则该表应显示所有行和数据 表:使用php变量和SQL语句的日期范围过滤器,php,jquery,mysql,sql,variables,Php,Jquery,Mysql,Sql,Variables,我正在尝试使用MySQL表的“to”和“From”日期范围过滤器为表创建一个过滤器。我无法获取所选日期以查询信息 仅在选择日期时显示数据。如果日期为空输入字段,则该表应显示所有行和数据 表: | Username | Full Name | Manager | Review Date | Total Score | |-------------------------------------------------------------| | sjohn | J
| 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% |
如果我创建一个带有输入字段的表单,我希望使用Review Date列按“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函数
谢谢你的帮助 一些可能对您有帮助的信息
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\u real\u escape\u string()
)。我可以配置代码。我只是从提供的链接中找到了答案。但是,我会将(mysqli_real_escape_string()添加到我的编码中。
再次感谢大家的帮助。在最小值和最大值中得到的值是什么?在SQL中使用这些值之前,不应该信任用户输入并使用转义方法!您好,输入的值来自a数据采集器。例如2015-01-01和2015-02-01。只有在我从日历日期采集器中选择这些值时,我希望这有意义。thanksI了解这一点,但打印时,$min和$max中的实际值是什么?yyyy-mm-dd。它看起来与格式匹配。很抱歉不清楚。行“mysqli\u select\u db($con,“employeescore”);”是不必要的,因为employeescore是在mysqli\u connect中定义的。请参阅