![](/img/trans.png)
[英]This is the best way to create a range filter in SQL with php IF statement?
[英]Date range filter using php variables and SQL statement
我正在嘗試使用MySQL表的“到”和“自”日期范圍過濾器為表創建過濾器。 我無法獲取所選日期來查詢信息。
如果選擇了日期,則僅顯示數據。 如果日期為空輸入字段,則該表應顯示所有行和數據。
表:
| Username | Full Name | Manager | Review Date | Total Score |
|-------------------------------------------------------------|
| sjohn | John Smith| John Dow | 2015-01-31 | 80% |
| sjane | Jane Smith| John Dow | 2015-02-01 | 80% |
| jmike | Mike Dow | Jane Dow | 2015-02-02 | 75% |
| dmia | Mia Dow | Rob Smith| 2015-02-10 | 90% |
如果我創建帶有輸入字段的表單,我想使用“審閱日期”列按“ fromDate”和“ toDate”日期查詢表。
問題:由於某種原因,變量沒有存儲或通過SQL語句傳遞。
<form action="eerevuiew.php" method="POST">
<label for="from">From</label>
<input type="text" id="datepicker" name="fromDate"/>
<label for="to">to</label>
<input type="text" id="datepicker2" name="toDate"/>
<input name="" type="submit" />
</form>
<?php
$min = intval($_POST['fromDate']);
$max = intval($_POST['toDate']);
?>
<?php
$con = mysqli_connect('localhost','root','123456','employeescore');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"employeescore");
$sql="SELECT * FROM vwscore WHERE reviewdate BETWEEN '".$min."' AND '".$max."'";
$result = mysqli_query($con,$sql);
?>
<?php
echo "<table border='1'>
<tr>
<th>Username</th>
<th>Full Name</th>
<th>Manager</th>
<th>Review Date</th>
<th>Total Score</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['display_name'] . "</td>";
echo "<td>" . $row['manager'] . "</td>";
echo "<td>" . $row['reviewdate'] . "</td>";
echo "<td>" . $row['total_score'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
我為datepicker使用jQuery函數 。
感謝你的幫助!
一些可以幫助您的信息...
如果日期為空輸入字段,則該表應顯示所有行和數據。
intval()
函數。 您的日期似乎格式為yyyy-mm-dd 。 intval()
會盡力從中獲取有效數字。 這可能會將'2015-02-01'轉換為'2015',因為intval()
無法管理破折號。 如果對日期使用格式yyyy-mm-dd ,則查詢將正常工作。 可能的解決方案:
$sql = "SELECT * FROM vwscore"; // Would display all rows if(isset($_POST['fromDate']) && !empty($_POST['fromDate']) && isset($_POST['toDate']) && !empty($_POST['toDate'])){ // if both dates are set and not empty... $sql .= " WHERE reviewdate BETWEEN '".$_POST['fromDate']."' AND '".$_POST['toDate']."'"; // ...filter dates } $result = mysqli_query($con,$sql);
重要說明:請記住,即使您使用日期選擇器,也強烈建議您轉義用戶輸入( mysqli_real_escape_string()
應該這樣做)。
我能夠配置我的代碼。 我只是按照提供的鏈接回答了。 不過,我會的(mysqli_real_escape_string()添加到我的編碼, 答復問題
再次感謝大家的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.