我有一个显示用户活动的页面,我构建了一个表单,用户可以在其中按日期过滤。
这是表格
<form action='filter_activity.php' method='get'>
From: <input type='text' name='from' value='dd/mm/yyyy'>
To: <input type='text' name='to' value='dd/mm/yyyy'>
<input type='submit' value='Filter'>
这是filter_activity.php
页面:
$from=$_GET["from"];
$to=$_GET["to"];
$result=mysql_query("SELECT * FROM member WHERE personID=$user AND created between $from and $to ");
然而,这什么也没显示,有人能帮忙吗?
您发布的日期格式无效,无法用于数据库。您需要在数据库中使用之前转换它们。
$from = DateTime::createFromFormat('d/m/Y', $_GET['from']);
$to = DateTime::createFromFormat('d/m/Y', $_GET['to']);
$sql = "
SELECT *
FROM member
WHERE personID = $user AND created BETWEEN '%s' AND '%s'
";
$sql = sprintf($sql, $from->format('Y-m-d'), $to->format('Y-m-d'));
另外,您应该检查$_GET
键是否存在,然后检查$from
和$to
是否是 DateTime 对象,而不是 false
.
您需要将其
转换为:
$result=mysql_query("SELECT * FROM member WHERE personID=$user AND created BETWEEN DATE('$from') AND DATE('$to')") or die(mysql_error());
从网站 :
为了在将 BETWEEN 与日期或时间值一起使用时获得最佳结果,请使用 CAST() 显式将值转换为所需的数据类型。示例:如果您将一个日期时间与两个日期时间进行比较日期值,将日期值转换为日期时间值。如果在与 DATE 进行比较时使用字符串常量(如"2001-1-1"),将字符串强制转换为 DATE。
将正确的日期格式传递给数据库:
$from = date('Y-m-d', strtotime(str_replace('/', '-', $_GET["from"])));
$to = date('Y-m-d', strtotime(str_replace('/', '-', $_GET["to"])));
$result = mysql_query("SELECT * FROM member WHERE personID=$user AND created BETWEEN '$from' AND '$to'");
真正考虑更改表单中的格式。我会使用日期选择器,年/月/日下拉列表或 javascript。
另外,请阅读有关引用,SQL注入等的其他评论。 并摆脱mysql_*功能。