0

我有一个显示用户活动的页面,我建立了一个表单,用户可以在其中按日期过滤。

这是表格

<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 ");

但是,这什么也没显示,有人可以帮忙吗?

4

3 回答 3

2

您发布的日期格式不适合数据库使用。在 DB 中使用之前,您需要对其进行转换。

$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.

于 2013-11-14T19:51:46.290 回答
0

将正确的日期格式传递给数据库:

$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_* 函数。

于 2013-11-14T19:50:04.977 回答
0

您需要将其转换为日期,例如:

$result=mysql_query("SELECT * FROM member WHERE personID=$user AND created BETWEEN DATE('$from') AND DATE('$to')") or die(mysql_error());

从网站:

为了在将 BETWEEN 与日期或时间值一起使用时获得最佳结果,请使用 CAST() 将值显式转换为所需的数据类型。示例:如果将 DATETIME 与两个 DATE 值进行比较,请将 DATE 值转换为 DATETIME 值。如果在与 DATE 的比较中使用字符串常量(例如 '2001-1-1'),请将字符串转换为 DATE。

于 2013-11-14T19:47:14.153 回答