我有一个显示用户活动的页面,我已经构建了一个表单,用户可以按日期过滤此表单。
这是表格
<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 ");
然而,这没有任何表现,任何人都可以帮忙吗?
答案 0 :(得分: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
。
答案 1 :(得分: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。
答案 2 :(得分:0)
将正确的日期格式传递给DB:
$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_ *函数。