繁体   English   中英

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

[英]how to get events from data base depending on month selected

我的事件以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脚本的了解很差,所以任何帮助将不胜感激。

尝试使用准备好的语句,而不是将变量传递给查询。 如果$month是数字(例如11)或月份的名称(11月),则需要在查询中使用MONTH()MONTHNAME() 例如SELECT * FROM training WHERE...MONTHNAME(sessDate)=...

该脚本的日子更好了。 这里有两件事:在HTML代码中,您正在共享元素的ID和名称。 不好。 您需要先分配$month然后再验证是否已设置。 您说您的日期存储为“ Ymd”,但在查询中似乎只是在搜索一个月

假设$sessDate格式应为Ymd以匹配数据库中的内容

      <?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";


       ?>

如果在浏览器控制台上检查月份元素;

document.getElementById("month").value

它应该会给您类似“ 2016-06”的信息。因此,您需要对记录进行过滤

"SELECT * FROM training WHERE groupName='$group' && sessDate='".substr($month,0,7) ."' ORDER BY sessdate ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM