PHP - 现有日期的SQL动态下拉列表(月)

时间:2017-12-20 14:28:17

标签: php jquery html sql date

目标

根据数据库中的现有日期创建月份的动态下拉列表。

数据库

enter image description here

现有用户界面

enter image description here

现有代码(UI)

<div class="col-lg-5 col-md-6 col-sm-6 prod-filter" align="right">
 <font size="4.5" color=""><span class="fa fa-calendar-o fa-1x"></span>
        <b>Year & Month: </b>
    </font>
  <select class="selectpicker" id="selectyear" data-width="100px">
    <?php
      $sqlquery = "SELECT DISTINCT year(MonthYear) as MonthYear FROM dateDatabase";
      $sqltran = mysqli_query($conn, $sqlquery)or die(mysqli_error($conn));
      while ($rowList = mysqli_fetch_array($sqltran)) {
        echo "<option value='".$rowList["MonthYear"]."'>" .$rowList["MonthYear"]. "</option>";
      }
    ?>
  </select>
    <select class="selectpicker" id="selectmonth" data-width="120px">
    <option value="01">January</option>
    <option value="02">February</option>
    <option value="03">March</option>
    <option value="04">April</option>
    <option value="05">May</option>
    <option value="06">June</option>
    <option value="07">July</option>
    <option value="08">August</option>
    <option value="09">September</option>
    <option value="10">October</option>
    <option value="11">November</option>
    <option value="12">December</option>
  </select>

现有用户界面说明

现有用户界面仅具有现有年份的动态下拉,但不包含月份,因为月份是硬编码的,如现有代码所示。数据库包含2016年,2017年和2018年的日期,如现有UI图像所示,只有那些年份会被提示进入下拉列表。

所需的用户界面

enter image description here

所需的用户界面说明

所需的用户界面将具有现有月份的动态下拉列表。例如,如数据库图像所示,2018只有前2个月的数据,即1月和2月,因此在选择2018年下拉后,月份下拉应该只显示一月和二月。

另一个例子,如果2017年只有月,三月,七月,八月,十月和十二月的数据,用户将只能选择2017年后的那几个月。

试过代码

<!-- Time period selection -->
        <div class="col-lg-5 col-md-6 col-sm-6 prod-filter" align="right">
         <font size="4.5" color=""><span class="fa fa-calendar-o fa-1x"></span><!-- icon for "Select your department" -->
                <b>Time Period: </b><!-- name of dropdownlist -->
            </font>
          <select class="selectpicker" id="selectyear" data-width="100px">
            <?php
              $sqlquery = "SELECT DISTINCT year(MonthYear) as MonthYear FROM dateDatabase";
              $sqltran = mysqli_query($conn, $sqlquery)or die(mysqli_error($conn));
              while ($rowList = mysqli_fetch_array($sqltran)) {
                echo "<option value='".$rowList["MonthYear"]."'>" .$rowList["MonthYear"]. "</option>";
              }
            ?>
          </select>
            <select class="selectpicker" id="selectmonth" data-width="120px">
            <?php
              $sqlquery = "SELECT DISTINCT DATENAME (month, (MonthYear)) as MonthYear FROM dateDatabase WHERE EXISTS(SELECT month(MonthYear) FROM dateDatabase)";
              $sqltran = mysqli_query($conn, $sqlquery)or die(mysqli_error($conn));
              while ($rowList = mysqli_fetch_array($sqltran)) {
                echo "<option value='".$rowList["MonthYear"]."'>" .$rowList["MonthYear"]. "</option>";
              }
            ?>
          </select>
        </div>

我尝试写了不同但它没有产生现有的月份。它仍然产生了数月的所有月份。所以我想在DATENAME中添加生成名称,但只显示“Nothing Select”

enter image description here

2 个答案:

答案 0 :(得分:1)

您的错误在您的查询中。 DATENAME是MSSQL函数,而不是Mysql。请尝试MONTH()和MONTHNAME()。例如:

<?php
  $sqlquery = "SELECT DISTINCT MONTH(MonthYear) as MonthNumber,  MONTHNAME(MonthYear) as MonthName FROM dateDatabase";
  $sqltran = mysqli_query($conn, $sqlquery)or die(mysqli_error($conn));
  while ($rowList = mysqli_fetch_array($sqltran)) {
    echo "<option value='".$rowList["MonthNumber"]."'>" .$rowList["MonthName"]. "</option>";

  }
?>

答案 1 :(得分:1)

年份选择值.change()向数据库发送ajax请求并选择所选年份的数据库。

$('#selectyear').on('change', function () {
    $.post('demo.php', {year: $(this).val()}, function (data) {
        var response = JSON.parse(data);
        $('#selectmonth').empty();
        $.each(response, function(key, value) {
            $('#selectmonth')
                .append($("<option></option>")
                    .attr("value",value)
                    .text(value));
        });
    })
})

然后在你的PHP中

<?php 
include "dbconnection.php"; 
$year = trim($_POST['year']); 

$sql = "SELECT * FROM dateDatabase WHERE YEAR(MonthYear) = $year"; 

$months = []; 

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
       $months[] = date('F', strtotime($row['MonthYear'])); 
    }
} else {
    $months[] = "0 result";
}
echo json_encode($months);
?>
相关问题