我正在将数据库中的月份和年份列表显示在下拉菜单中:
$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
这显然不太理想。关键是在结果页面上我需要显示所选月份的结果。所以,我需要查询字符串来查询数据库。
答案 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