按日期过滤器选择结果 PHP 和 MySQL

Choose results by date filter PHP and MySQL

我有一页 (members.php) post 与另一页 (results.php) 日期相同。使用下面的代码,我可以从会员页面成功获取 "to" 和 "from" 变量。

<?php echo $_POST["to"]; ?>
<?php echo $_POST["from"]; ?> 

我现在的问题是,如何创建查询(在 results.php 中)以便仅显示在上述变量中​​指定的日期的筛选结果?我还需要创建 sql 连接和 sql 查询吗?

您应该连接到数据库并比较这两个日期:

$dateOne = $_POST["from"];
$dateTwo = $_POST["to"];

如果 bigger date 是 0,那么你应该总是让它成为成功查询数据的最大日期:

if(empty($dateTwo))
{
    $dateTwo =  date("31-12-Y");
    //If $dateTwo is null, than it will be 31/12/2015 otherwise query will now work well 
}

那么你应该这样写sql查询:

"SELECT * FROM `table` where `dateOne` > '$dateOne' and `dateTwo` < '$dateTwo'";

在这种情况下,如果用户想要所有大于 dateOne 的日期但不检查 dateTwo,此查询将 return 所有大于 dateOne 且低于当年可用的最高日期的数据(在我们的例子中是2015 年 31 月 21 日)。

如果日期是 YYYY-mm-dd 格式,那么您可以按如下方式使用它,否则您需要更改格式。

您可以按以下方式操作:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
   die ('Can\'t use foo : ' . mysql_error());
}

//$from_date = $_POST['from_date'];
//$to_date = $_POST['to_date'];

$from_date = date("Y-m-d",strtotime('06/10/2015'));
$to_date = date("Y-m-d",strtotime('06/16/2015'));//$_POST['to_date'];

$query = "SELECT * FROM table WHERE from_date >= '".$from_date."' AND to_date <= '".$to_date."'";
// Perform Query
$result = mysql_query($query);

if (!$result) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $query;
    die($message);
}

while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

它不一定要创建一个新的 sql 连接,而只是一个新的查询(建议您已经连接到数据库)。在我看来,如果要显示两个日期之间的结果。

我不检查现有值或空值,因为日期已经给出。

所以:

<?php $start_date = $_POST["from"];
      $end_date   = $_POST["to"]; 

    //sql will be 
    $sql = "SELECT * FROM `your_table` WHERE `the_date_column` BETWEEN {$start_date} AND {$end_date}";
?> 

请使用 mysqli 或 PDO 连接层并尝试转义变量以防止 sql 注入或更好,使用准备好的语句。