按日期筛选结果PHP和MySQL
问题描述:
我有一个页面(members.php)将日期发布到另一个页面(results.php)。使用下面的代码,我可以成功地从成员页面获取“to”和“from”变量。按日期筛选结果PHP和MySQL
<?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大的所有数据,并且低于当前可用的最高日期(在我们的案例中是31/21/2015)。
答
它不一定是创建一个新的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注入或更好,使用准备好的语句。
是否要在两个日期之间显示结果 –
是的,但据我所知,我必须创建一个全新的SQL连接! – Leonidas