使用表单选择日期范围内的数据

时间:2014-01-29 15:59:38

标签: php html mysql sql

我想在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

2 个答案:

答案 0 :(得分:1)

用户提交的值将以$_POST['fromdate']$_POST['todate']$_GET['fromdate']_$GET['todate']的形式显示,具体取决于您上面的表单方法是postget(如果有特定原因使用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