如何根据所选月份从数据库中获取事件

时间:2016-06-10 18:25:04

标签: javascript php jquery ajax mysqli

我的数据库中存储的事件格式为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脚本的了解非常差,所以任何帮助都会非常感激。

3 个答案:

答案 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