目标
根据数据库中的现有日期创建月份的动态下拉列表。
数据库
现有用户界面
现有代码(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图像所示,只有那些年份会被提示进入下拉列表。
所需的用户界面
所需的用户界面说明
所需的用户界面将具有现有月份的动态下拉列表。例如,如数据库图像所示,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”
答案 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);
?>