如何在网址中传递月份和年份

时间:2017-06-01 19:37:45

标签: php

我正在将数据库中的月份和年份列表显示在下拉菜单中:

$stmt = $link->prepare("SELECT `b_date` FROM `summary` GROUP BY YEAR(`b_date`), MONTH(`b_date`)");
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
    while($row = $result->fetch_assoc()) {
        $month = date('F Y', strtotime($row['b_date']));
        echo "<option value='{$month}'>{$month}</option>";
    }
}

当用户点击某个选项时,它会重定向到另一个页面,如:

mypage.com/results.php?date=

问题在于我不知道将值设置为什么。在当前代码中,生成的url看起来像:

php?date=April%202017

这显然不太理想。关键是在结果页面上我需要显示所选月份的结果。所以,我需要查询字符串来查询数据库。

3 个答案:

答案 0 :(得分:1)

你可以选择像05-2017这样的值:

while($row = $result->fetch_assoc()) {
    $month = date('m-Y', strtotime($row['b_date']));
    echo "<option value='{$month}'>{$month}</option>";
}

然后使用DateTime对象获取它:

$date = DateTime::createFromFormat('m-Y', $_GET['date']);

然后您可以将此对象格式化为您想要的任何格式:

$formated_date = $date->format('Y-m-d');

您可以选择其他格式,但我认为您理解我的想法。

UPD。要在本月执行所有记录,请尝试使用以下代码:

$date = DateTime::createFromFormat('m-Y', $_GET['date']);
$stmt = $link->prepare("SELECT * FROM `summary` WHERE YEAR(`b_date`) = :year AND MONTH(`b_date`) = :month");
$stmt->bindParam(':month', $date->format('m'));
$stmt->bindParam(':year', $date->format('Y'));
$stmt->execute();
$result = $stmt->get_result();

我认为它有效但可能需要修复。

答案 1 :(得分:0)

像这样改变(使用urlencode()): -

$month = date('m-Y', strtotime($row['b_date']));
echo "<option value='".urlencode($month)."'>{$month}</option>";

现在在下一页上查看$_GET['date'],看看它是否正常?

如果它以m-Y等格式正确显示,则将其与-分开,现在分别获得月份和年份。在您的查询中或任何您想要的地方使用它们。

查询需要像: -

$_GET['date'] = '04-2017';

$date_array = explode('-',$_GET['date']);

$month = $date_array[0];
$year  = $date_array[1];

"SELECT * FROM summary WHERE MONTH(<you date column name>) = $month";

答案 2 :(得分:0)

你可以用select(postgres,mysql ...)

格式化数据

选择TO_CHAR(&#39; MM-YYYY&#39;,b_date)AS formated_date FROM summary GROUP BY TO_CHAR(&#39; MM-YYYY&#39;, b_date