我的数据库中存储的事件格式为2016-12-05,即2016年12月5日。
我正在使用HTML 5个月的选择器,因此用户可以查看特定月份内的所有活动。
我的问题是如何编辑sql以便它能识别出如果他们选择2016年12月就应该选择上述日期。
HTLM代码:
<form method="post" name="Month" id="Month">
<input type="month" name="month" id="month"/>
<input type="submit" value="Select"/>
PHP代码:
$month = $_POST['month'];
if (isset($_POST['month'])){
$sql = "SELECT * FROM training WHERE groupName='$group' && sessDate='$month' ORDER BY sessdate ASC";
$training_query = mysqli_query($db_conx, $sql);
}
如果我摆脱了月份选择器的东西,它一切正常,$group
建立在页面的更高位置。 sessDate
在数据库中存储为date
。
如果我将其删除,则会显示所有已创建的事件。
我想我可能需要使用ajax或其他东西,因为当我点击时选择页面明显刷新并且月份选择器再次为空。我对ajax和java脚本的了解非常差,所以任何帮助都会非常感激。
答案 0 :(得分:0)
尝试使用prepared statements而不是将变量传递给查询。如果$month
是数字(例如11)或月份名称(11月),则需要在查询中使用MONTH()
或MONTHNAME()
。例如SELECT * FROM training WHERE...MONTHNAME(sessDate)=...
。
答案 1 :(得分:0)
这个脚本看到了更好的日子。这里有几件事:
在您的html代码中,您将共享元素的ID和名称。不好。
您在验证是否已设置之前分配$month
。
您说您的日期是'Y-m-d'商店,但在您的查询中,您似乎只搜索了一个月
假设$sessDate
应格式化为Y-m-d以匹配您在数据库中的内容
<?php
$date = new DateTime()//get current Date
$bottomDate = $date->format('Y').$sessDate.'01 00:00:00'; //Set to absolute beginning of month
$topDate = $date->format('Y').$sessDate.'31 23:59:59'; //Set to absolute end of month, with no month having more than 31 days
$sql = "SELECT * FROM training WHERE groupName='$group' && sessdate >= '$bottomDate' AND sessdate <= '$topDate' ORDER BY sessdate ASC";
?>
答案 2 :(得分:-1)
如果您在浏览器控制台上检查月份元素;
document.getElementById("month").value
它应该给你类似'2016-06'的东西。所以你有过滤像
这样的记录"SELECT * FROM training WHERE groupName='$group' && sessDate='".substr($month,0,7) ."' ORDER BY sessdate ASC