我想在mysql数据库中搜索已在日期范围之间插入的产品列表。 假设我有一个名为product的表,其中包含:id,name,brand和datecreated,我可以在mysql中执行此操作:
select id, name, brand, datecreated
from product
where datecreated between '2013-09-12' and '2013-10-10'
order by datecreated desc;
这显然会在Mysql或php中返回所需的结果。
但是,我想在select语句中定义日期范围,并使用一个表单询问用户是否有来日期。不确定方法是什么?
<form action="?" method="">
<div id="dates">
<label for="searchdates">Enter your dates here:</label>
<br>
<label for="fromdate">From:<textarea id="fromdate" name="fromdate" rows="1" cols="5"></textarea></label>
<lablel for="todate">To:<textarea id="todate" name="todate" rows="1" cols="5"></textarea></label>
</div>
<div><input type="submit" value="Search"/></div>
</form>
所以我不确定的是如何将表单中用户定义的日期范围添加/插入到select语句中以在定义的日期范围内返回数据?
干杯 Volterony
答案 0 :(得分:1)
用户提交的值将以$_POST['fromdate']
和$_POST['todate']
,$_GET['fromdate']
和_$GET['todate']
的形式显示,具体取决于您上面的表单方法是post
或get
(如果有特定原因使用post
,我通常会推荐get
,例如想要为网页加书签。)
所以你处理这个的代码看起来像这样(假设$pdo
是你的数据库PDO对象):
$fromdate = new DateTime( $_POST['fromdate'] );
$todate = new DateTime( $_POST['todate'] );
$query = <<<SQL
SELECT id, name, brand, datecreated
FROM product
WHERE datecreated BETWEEN :fromdate AND :todate
ORDER BY datecreated desc
SQL;
$result = $pdo->prepare( $query );
$result->execute( array(
":fromdate" => $fromdate->format( "Y-m-d" ),
":todate" => $todate->format( "Y-m-d" );
));
$rows = $result->fetchAll( PDO::FETCH_ASSOC ):
$rows
现在包含表中符合指定条件的所有行的数组。
答案 1 :(得分:0)
确切的语法取决于您与数据库(MySQLi,PDO等)的交互方式。您基本上需要获取POSTed表单值,进行一些简单的验证以确保用户没有输入任何危险,然后将值插入查询中:
$from = mysqli_real_escape_string($_POST['fromdate']);
$to = mysqli_real_escape_string($_POST['todate']);
$sql = "select id, name, brand, datecreated from product where datecreated between '$from' and
'$to' order by datecreated desc";
表单上的操作将是您放置上述代码的页面 - 它可以是与表单相同的页面。在这种情况下,操作将为<?php echo basename($_SERVER['PHP_SELF']); ?>
,方法为POST
。