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


Choose results by date filter PHP and MySQL

我有一个页面(members.php)将日期发布到另一个页面上(results.php)。使用下面的代码,我可以成功地从members页面中获取"to"answers"from"变量。

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

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

如果日期为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);
}

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

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

如果较大的日期是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,则此查询将返回所有大于dateOne且低于当年可用最高日期的数据(在我们的情况下,是2015年21月31日)。

它不一定要创建一个新的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注入,或者更好的做法是使用准备好的语句。

SELECT * FROM sales WHERE build_date BETWEEN '$start_date' AND '$end_date';