我正在开发一个系统,我需要从MySql数据库中提取不同日期范围的数据。目前,我有一个从数组动态填充的选择下拉列表。我想要实现的目标"干净利落"当用户点击一个月时,它会使用该特定月份中的给定数据填充表格。虽然我实际上实现了这一点,但它需要在每个选定的月份执行查询。我想知道是否有一种更清洁的方式来解决这个问题。我已经对这个问题进行了一些研究,但由于我是PHP的新手,现在只是在程序上而且没有太多OOP,我还没有找到更多的附加信息,并希望得到一些输入。到目前为止,这是我的代码。谢谢大家的帮助。如果需要其他信息,请告诉我。
这也将改为准备好的陈述。
<form action="" method="post">
<select name='months' >
<option value='default'>Select a month</option>
<?php
$months = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December");
foreach($months as $currentMonth) {
?>
<option value=<?php echo $currentMonth; ?>><?php echo $currentMonth; ?></option>;
<?php
}
?>
</select>
<button class='btn btn-primary' type="submit" name="submitMonth">submit</button>
</form>
<table class="table table-hover">
<thead>
<tr>
<th>Sales Rep</th>
<th>Rep ID</th>
<th>Business Name</th>
<th>Package</th>
<th>Status</th>
<th>Date Submitted</th>
</tr>
</thead>
<?php
if(isset($_SESSION['user_id'])) {
$user_id = $_SESSION['user_id'];
if(isset($_POST['submitMonth'])) {
if($_POST['months'] == 'January') {
$query = "SELECT *
FROM table
WHERE MONTH(date) = 1 AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
$result = mysqli_query($connection, $query);
}
if($_POST['months'] == 'February') {
$query = "SELECT *
FROM table
WHERE MONTH(date) = 2 AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
$result = mysqli_query($connection, $query);
}
}
while($row = mysqli_fetch_assoc($result)) {
$referalBus= $row['business'];
$repId = $row['id'];
$package = $row['pack'];
$status = $row['status'];
$date = $row['date'];
if(mysqli_num_rows($result) > 0) {
echo "<tr>";
echo "<td></td>";
echo "<td>$repId</td>";
echo "<td>$referalBus</td>";
echo "<td>$package</td>";
echo "<td>$status</td>";
echo "<td>$date</td>";
}
}
}
?>
</table>
答案 0 :(得分:0)
您可以将其更改为直接使用参数:
$query = "SELECT *
FROM table
WHERE DATE_FORMAT(date, '%M') = ".$_POST['months']." AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
答案 1 :(得分:0)
您不必每个月手动创建一个IF语句。你可以使用Mysql的DATE_FORMAT()函数。
if(isset($_POST['submitMonth'])) {
$query = "SELECT *
FROM table
WHERE DATE_FORMAT(date, "%M") = '".$_POST['months']."' AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
$result = mysqli_query($connection, $query);
}
答案 2 :(得分:0)
我建议动态构建您的查询条件列表;像(伪代码):
query = "blah blah WHERE YEAR(`date`) = YEAR(NOW()) AND MONTH(`date`) IN ("
for each month
query.append("month's number") //Actually, need some "when to comma" logic here too
query.append(")");
我对php的认识几乎局限于我看到的人在这里发布的内容;但我认为甚至可能有一些&#34;爆炸&#34;你可以用来代替循环的方法。
答案 3 :(得分:0)
假设您无法更改数据库结构,我将在每个月应用每个选项中的数字值
for(var $i=0; $i<=$months.length; $i++ ) {
?>
<option value=<? echo '$i+1' ?>><?php echo $months[$i]; ?></option>;
<?php
}
?>
然后简单查询看起来像
$query = "SELECT * FROM table WHERE MONTH(date) = ". $_POST['months'] ." AND YEAR(date) = YEAR(NOW()) && user_id = $user_id";
$result = mysqli_query($connection, $query);
}
答案 4 :(得分:0)
好的,所以我找到了一些东西并且有效。感谢所有反馈人员。以下是与预准备语句一起使用的代码。
<form action="" method="post">
<select name='months' >
<option value='default'>Select a month</option>
<?php
$months = array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December");
for($i=0; $i <= count($months); $i++ ) {
?>
<option value=<? echo $i ?>><?php echo $months[$i]; ?></option>;
<?php
}
?>
</select>
<button class='btn btn-primary' type="submit" name="submitMonth">submit</button>
</form>
<table class="table table-hover">
<thead>
<tr>
<th>Sales Rep</th>
<th>Rep ID</th>
<th>Business Name</th>
<th>Package</th>
<th>Status</th>
<th>Date Submitted</th>
</tr>
</thead>
<?php
if(isset($_SESSION['user_id'])) {
$user_id = $_SESSION['user_id'];
if(isset($_POST['submitMonth'])) {
$stmt = mysqli_prepare($connection, "SELECT id, name, business, phone, email, status, id, date, package
FROM table
WHERE MONTH(date) = ". $_POST['months'] ." AND YEAR(date) = YEAR(NOW()) && user_id = ?");
mysqli_stmt_bind_param($stmt, 's', $user_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $user_id, $name, $business, $phone, $email, $status, $id, $date, $package);
mysqli_stmt_store_result($stmt);
while(mysqli_stmt_fetch($stmt)) {
if(mysqli_stmt_num_rows($stmt) > 0) {
echo "<tr>";
echo "<td></td>";
echo "<td>$id</td>";
echo "<td>$business</td>";
echo "<td>$package</td>";
echo "<td>$status</td>";
echo "<td>$date</td>";
}
}
}
}
?>
</table>