简体   繁体   English

使用PHP按日期过滤SQL结果

[英]Filter SQL results by date using PHP

I am getting data from an SQL table via PHP to populate an HTML table. 我通过PHP从SQL表中获取数据以填充HTML表。 This is how I do it: 我是这样做的:

<table class="posts">
        <?php 
        $respost = mysqli_query($link,"SELECT * FROM table WHERE post_author=$uid LIMIT 16 ");
        $row_count=0;
        $col_count=0;
        while($rowpost = mysqli_fetch_array($respost)) {
            if($row_count%4==0){
                echo "<tr>";
                $col_count=1;
            }?>
            <td>
            <?php
            $imageid = $rowpost['thumbnail_link'];
            <img src="<?php echo $imageid; ?>" alt="" class="img-responsive" height="220px" height="220px">
            <h3><?php echo $rowpost['post_title']; ?></h3>
            <h4><?php echo (substr($rowpost['post_excerpt'],0,30)); ?></h4>
            <h5><?php echo $rowpost['post_date']; ?></a></h5>
            </td>
            <?php 
            if($col_count%4==0){
                echo "</tr>";
            }
            $row_count++; 
            $col_count++; 
        }
        ?>
</table>

Now what I want to do is, to set a filter to this. 现在我想要做的是,为此设置一个过滤器。 I want to add two date selectors and when the user clicks the Filter button, the table should be populated only with posts posted within the two given dates. 我想添加两个日期选择器,当用户单击“过滤器”按钮时,表格应仅填充在两个给定日期内发布的帖子。

I thought of using a form for the date selector: 我想过为日期选择器使用一个表单:

<form name="filter" method="POST" action="team_as.php">
    SHOW POSTS FROM:
        <input type="date" name="sdate">
        <input type="date" name="edate">
        <input type="submit" name="submit" value="Filter">
</form>

PHP to handle that data: PHP来处理这些数据:

$edate = $_POST['edate'];
$sdate = $_POST['sdate'];
$filter = "AND $date < post_date > $edate";

I was wondering if there is a way to include this $filter in the $respost mysql query like this: 我想知道是否有办法在$respost mysql查询中包含这个$filter ,如下所示:

$respost = mysqli_query($link,"SELECT * FROM table WHERE post_author=$uid $filter LIMIT 16 ");

Also note that the $uid is taken from a previous page using the $_GET[] method. 另请注意, $uid是使用$_GET[]方法从上一页获取的。 So the this page's link looks like www.mysite.com/page?uid=66 . 所以这个页面的链接看起来像www.mysite.com/page?uid=66 So wondering if using POST and form to filter will work? 所以想知道使用POST和表单过滤是否有效?

In general if you do POST, its better to add uid as hidden field in youf second form in order to keep it. 一般情况下,如果你做POST,最好在你的第二种形式中添加uid作为隐藏字段以保持它。 Also use BETWEEN in your filter, so the code should look like this: 也可以在过滤器中使用BETWEEN,因此代码应如下所示:

    <form name="filter" method="POST" action="team_as.php">
        <input type="hidden" name="uid" value="<?php echo $uid; ?>">
        SHOW POSTS FROM:
        <input type="date" name="sdate">
        <input type="date" name="edate">
        <input type="submit" name="submit" value="Filter">
    </form>
    <?php
    if(isset($_POST['submit'])){
        $uid = $_POST['uid'];
        $edate = $_POST['edate'];
        $sdate = $_POST['sdate'];
        $filter = "AND DATE(post_date) BETWEEN '$sdate' AND '$edate'";
        $query = "SELECT * FROM table WHERE post_author=$uid $filter LIMIT 16 ";
        $respost = mysqli_query($link, $query);
    }else{
        $query = "SELECT * FROM table WHERE post_author=$uid LIMIT 16 ";
        $respost = mysqli_query($link, $query);            
    }
    ?>

Update: By the way, there is a small form 'hack' which allows you to use both GET and POST vars (insead of using hidden field), but is not a good practice at all, so I not recommend it: 更新:顺便说一句,有一个小形式'hack'允许你使用GET和POST vars(使用隐藏字段的内容),但根本不是一个好习惯,所以我不推荐它:

<form name="filter" method="POST" action="team_as.php?uid=<?php echo $uid; ?>">

when you submit this form, you will have both GET and POST arrays assigned, ie you will have uid as GET var, all others will be into POST array. 当你提交这个表单时,你将同时分配GET和POST数组,即你将uid作为GET var,所有其他人将进入POST数组。

You must add your url value in hidden field like this 您必须在隐藏字段中添加您的网址值,如下所示

if(isset($_GET['uid']))
{
  $uid=mysqli_real_escape_string($_GET['uid']);
}  
<form name="filter" method="POST" action="team_as.php">
SHOW POSTS FROM:
    <input type="date" name="sdate">
    <input type="date" name="edate">
    <input type="hidden" name="uid" value="<?php echo $uid; ?>">
    <input type="submit" name="submit" value="Filter">
</form>

You must add a variable for to output query 您必须为输出查询添加变量

 if(isset($_POST['submit']))
 {
  $uid=mysqli_real_escape_string($_POST['uid']);
  $edate = mysqli_real_escape_string($_POST['edate']);
  $sdate = mysqli_real_escape_string($_POST['sdate']);
 }
 $sql="SELECT * FROM table WHERE post_author='$uid'";
 if(isset($_POST['submit']))
  {
   $sql.= " AND $date < post_date > $edate";
  }  
 $respost = mysqli_query($link,$sql);

I think it solves your problem 我认为它解决了你的问题

Complete Code With Date Filter 使用日期过滤器完成代码

<div class="table-responsive m-t-10">
                                    <form class="form-group" method='post' style="margin-bottom: -5px;">
                          Start Date <input class="form-group" type='date' class='dateFilter' name='dateFrom' value='<?php if(isset($_POST['dateFrom'])) echo $_POST['dateFrom']; ?>'>

                          End Date <input class="form-group" type='date' class='dateFilter' name='dateTo' value='<?php if(isset($_POST['dateTo'])) echo $_POST['dateTo']; ?>'>

                          <input type='submit' name='but_search' value='Search'>
                        </form> 
                                       <table id="myTable"  class="table table-bordered table-striped dataTable no-footer" role="grid">
                                            <!--<table class="display nowrap table table-hover table-striped table-bordered" cellspacing="0" width="100%">-->
                                            <thead>
                                                <tr>
                                                  <th>Date</th>
                                                  <th>Customer Name</th>
                                                  <th>Company</th>
                                                  <th>Userid</th>
                                                  <th>Address</th>
                                                  <th>Area</th>
                                                  <th>Contact</th>
                                                  <th style="display:none">Location</th>
                                                  <th style="display:none">Product Id</th>
                                                  <th>Software Id</th>
                                                  <th>Product Key</th>
                                                  <th>Validity</th>
                                                  <th>Unpaid Amount</th>
                                                  <th>Action</th>
                                                  <th>Enab/Disa</th>
                                                  <th >Delete</th>
                                                </tr>
                                            </thead>
                                            <tfoot style="display:none">
                                                <tr>
                                                    <th>Date</th>
                                                    <th>Name</th>
                                                    <th>Userid</th>
                                                    <th>Address</th>
                                                    <th>Area</th>
                                                    <th>Contact</th>
                                                    <th>Software</th>
                                                    <th>Location</th>
                                                    <th>Product Id</th>
                                                    <th>Validity</th>
                                                    <th>Unpaid Amount</th>
                                                    <th>Action</th>
                                                    <th>Enab/Disa</th>
                                                    <th>Delete</th>
                                                </tr>
                                            </tfoot>
                                            <tbody>
                                            <?php
                                          $ses = $_SESSION["userid"];
                                          $result = mysqli_query($con, "select id from cmp_user where userid='$ses'");
                                          while ($res = mysqli_fetch_array($result)) {
                                              $uid =$res['id'];
                                          }
                                          ?>

                                                    <?php
                                                     $dateFrom = date('Y-m-d', strtotime($_POST['dateFrom']));
                                                     $dateTo = date('Y-m-d', strtotime($_POST['dateTo']));
                                                    $result= mysqli_query($con, "select * from cmp_customer");
                                                    while ($res = mysqli_fetch_array($result)) {
                                                        if (date('Y-m-d', strtotime($res['date']))>$dateFrom && date('Y-m-d', strtotime($res['date'])) < $dateTo) {
                                                            ?>
                                                        echo "<tr>"; ?>
                                                    <td><?php echo $res["date"]; ?></td>
                                                    <td><?php echo $res["c_name"]; ?></td>
                                                    <td><?php echo $res["company"]; ?></td>
                                                    <td><?php echo $res["userid"]; ?></td>
                                                    <td><?php echo substr($res["address"], 0, 15); ?></td>
                                                    <td><?php echo substr($res["zipcode"], 0, 15); ?></td>
                                                    <td><?php echo $res["contact"]; ?></td>
                                                    <td style="display:none"><?php echo $res["location"]; ?></td>
                                                    <td style="display:none"><?php echo substr($res["productid"], 0, 15); ?></td>
                                                    <td><?php echo substr($res["softwareid"], 0, 15); ?></td>
                                                    <td><?php echo substr($res["productkey"], 0, 15); ?></td>
                                                    <td><?php echo $res["Validity"]; ?></td>
                                                    <td><?php echo $res["unpaidamt"]; ?></td>
                                                    <td><A class='btn btn-outline-success btn-sm' href="update_customer.php?id=<?php echo $res['id']; ?>">Edit</A></td>
                                                    <?php if ($res["status"] == 1) {
                                                                ?>
                                                         <td> <a class='btn btn-success btn-sm' onclick="return confirm('Are you sure want Disable this Customer ?')" href="customerstatusdisable.php?userid=<?php echo $res['userid']; ?>">Enable
                                                        </a></td>
                                                        <?php
                                                            } else { ?>
                                                     <td><a class='btn btn-danger btn-sm' onclick="return confirm('Are you sure want Enable this Customer ?')" href="customerstatus.php?userid=<?php echo $res['userid']; ?>">Disable
                                                        </a></td>

                                                         <?php } ?>
                                                    <td><a class='btn btn-outline-danger btn-sm' onclick="return confirm('Are you sure want delete this Customer ?')" href="delete_customer.php?id=<?php echo $res['id']; ?>">Delete
                                                        <i class="fa fa-trash" title="Delete" ></i></a></td>
                                                  <?php echo "</tr>";
                                                        }
                                                    } ?>


                                            </tbody>
                                        </table>
                                    </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM