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

Php 使用表单选择日期范围内的数据,php,html,mysql,sql,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中返回

我想在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语句中用一个表单定义日期范围,该表单要求用户输入to和from日期。也不确定该方法是什么

    <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

确切的语法取决于您与数据库(MySQLi、PDO等)的交互方式。基本上,您需要获取发布的表单值,执行一些简单的验证以确保用户没有输入任何危险的内容,然后将这些值插入查询:

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

表单上的操作将是您将上述代码放在其中的任何页面-它可以是与表单相同的页面。在这种情况下,操作将是
,方法将是
POST

用户提交的值将作为
$\u POST['fromdate']
$\u POST['todate']
$\u GET['fromdate']
$GET['todate']
,取决于您上面的表单方法是
post
还是
get
(我通常建议
post
,以防使用
get
有特定的原因,比如想将页面添加书签)

因此,处理此问题的代码可能如下所示(假设
$pdo
是数据库pdo对象):

$fromdate=新的日期时间($_POST['fromdate']);
$todate=新的日期时间($_POST['todate']);
$query=$fromdate->格式(“Y-m-d”),
“:todate”=>$todate->格式(“Y-m-d”);
));
$rows=$result->fetchAll(PDO::FETCH_ASSOC):

$rows
现在包含表中所有符合指定条件的行的数组。

感谢您对这个问题的回答danmullen。现在已经解释过了,我可以看到需要什么了,所以我将尝试一下。谢谢你的帮助。尼克,谢谢你的回复。在这种特殊情况下,我不使用PDO,但是,当我将来使用PDO时,您的示例将证明非常有用。在任何一种情况下,您都希望在将日期与查询一起使用之前正确格式化日期@您接受的danmullen的答案只有在用户以“Y-m-d”格式提交日期时才有效,当用户以更常见的格式(如“n/d/Y”)输入日期时,答案将失效。
$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 ):