按日期过滤器选择结果 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 注入或更好,使用准备好的语句。
我有一页 (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 注入或更好,使用准备好的语句。