簡體   English   中英

使用php變量和SQL語句的日期范圍過濾器

[英]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函數

感謝你的幫助!

一些可以幫助您的信息...

  1. 您應該檢查POST參數是否存在,或者是否不為空。 如果是這種情況,則查詢可以返回所有行。 我認為這是您的意思:

如果日期為空輸入字段,則該表應顯示所有行和數據。

  1. 我不明白為什么您使用intval()函數。 您的日期似乎格式為yyyy-mm-dd intval()會盡力從中獲取有效數字。 這可能會將'2015-02-01'轉換為'2015',因為intval()無法管理破折號。 如果對日期使用格式yyyy-mm-dd ,則查詢將正常工作。
  2. 可能的解決方案:

     $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM