当我在PHP中单击第2页时,查询恢复为未经过滤



当结果未过滤时,分页效果很好。但是,一旦您在复选框中选中了某些内容,然后转到第2页,查询将更改回原始查询,并通过未过滤查询重定向到页面。

这是我的代码:

<?php
    require("functions.php");
    require_once './class.PaginationLinks.php';
    $dbconn = dbconn();
    $printTable = true;
    $page = 1;
    if(isset($_POST["submit"])){
        if(isset($_POST["Kitchen"])){
          $arguments1[] = "Kitchen";
        }
        if (isset($_POST["Common_CR"])) {
          $arguments1[] = "Common CR";
        }
        if (isset($_POST["CR_per_room"])) {
            $arguments1[] = "CR per room";
        }
        if (isset($_POST["WiFi"])) {
          $arguments1[] = "WiFi";
        }
        if (isset($_POST["Lobby"])) {
            $arguments1[] = "Lobby";
        }
        if (isset($_POST["Laundry_Area"])) {
            $arguments1[] = "Laundry Area ";
        }
        if (isset($_POST["Fire_Extinguisher"])) {
            $arguments1[] = "Fire Extinguisher";
        }
        if (isset($_POST["Water_Pump"])) {
            $arguments1[] = "Water Pump";
        }
        if (isset($_POST["Dirty_Kitchen"])) {
          $arguments1[] = "Dirty Kitchen";
        }
        if (isset($_POST["Television"])) {
            $arguments1[] = "Television";
        }
        if (isset($_POST["Emergency_Lights"])) {
            $arguments1[] = "Emergency Lights";
        }
        if (isset($_POST["Canteen"])) {
            $arguments1[] = "Canteen";
        }
        if (isset($_POST["Water_Dispenser"])) {
            $arguments1[] = "Water Cooler";
        }
        if (isset($_POST["Rooftop_Gazebo"])) {
          $arguments1[] = "Rooftop Gazebo";
        }
        if(!empty($_POST['loc'])){
            $selectedRadio = $_POST['loc'];
            if($selectedRadio == "dorm"){
                $area = "dorm.location = 'dormArea'";
            }
            elseif($selectedRadio=="banwa"){
                $area = "dorm.location = 'banwa'";
            }
            else{}
        }

        if(!empty($arguments1) && empty($selectedRadio)) { 
            $size = count($arguments1);
            $query = "SELECT dorm.DormId, dorm.DormName, CONCAT(address.StreetName,', ', address.Barangay),owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address,owner
                WHERE dorm.AddressId = address.AddressId
                AND dorm.OwnerId = owner.OwnerId
                AND dorm.DormId IN (SELECT all_facilities.DormId
                FROM all_facilities
                WHERE all_facilities.facilityName IN ('".implode("','",$arguments1)."')
                GROUP BY all_facilities.DormId
                HAVING COUNT(all_facilities.facilityNo)>= $size)";
                unset($arguments1);
        }
        elseif (!empty($arguments1) && !empty($selectedRadio)) {
            echo "both checkbox and radio are not empty";
            $size = count($arguments1);
            $query = "SELECT dorm.DormId, dorm.DormName, CONCAT(address.StreetName,', ', address.Barangay),owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address,owner
                WHERE dorm.AddressId = address.AddressId
                AND dorm.OwnerId = owner.OwnerId
                AND $area
                AND dorm.DormId IN (SELECT all_facilities.DormId
                FROM all_facilities
                WHERE all_facilities.facilityName IN ('".implode("','",$arguments1)."')
                GROUP BY all_facilities.DormId
                HAVING COUNT(all_facilities.facilityNo)>= $size)";
                $selectedRadio='';
                unset($arguments1);
            }
        elseif(empty($arguments1) && !empty($selectedRadio)){
            echo "empty checkbox but RADIO IS ON!";
            $query = "SELECT dorm.DormId,dorm.DormName, CONCAT(address.streetName,', ',address.Barangay), owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address, owner
                WHERE dorm.AddressId = address.AddressId AND dorm.OwnerId = owner.OwnerId AND $area";
            $selectedRadio='';
        }
        else{
            echo "both empty";
            $query = "SELECT dorm.DormID, dorm.DormName, CONCAT(address.streetName,', ',address.Barangay), owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address, owner
                WHERE dorm.AddressId = address.AddressId AND dorm.OwnerId = owner.OwnerId";
        }
    }
    else{
        $query = "SELECT dorm.DormId,dorm.DormName, CONCAT(address.streetName,', ',address.Barangay), owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address, owner
                WHERE dorm.AddressId = address.AddressId AND dorm.OwnerId = owner.OwnerId";
    }
if(isset($_POST['find'])){
    $key = $_POST['keyword'];
    $query = "SELECT dorm.DormId,dorm.DormName, CONCAT(address.streetName,', ',address.Barangay), owner.Name, dorm.HousingType, dorm.thumbnailpic
                FROM dorm, address, owner
                WHERE dorm.AddressId = address.AddressId AND dorm.OwnerId = owner.OwnerId AND dorm.DormId in (SELECT dorm.DormId 
                FROM dorm
                WHERE dorm.DormName LIKE '%$key%') ";
}

$result = mysqli_query($dbconn,$query);

if(mysqli_num_rows($result)==0){
    $printTable = false;
}   
?>
<!DOCTYPE html>
<html>
<head>  <title>DorMe</title> </head>
<style type="text/css">
    #pagination > li{
        display: inline-block;
    }
</style>
<body>
<form  method="post">
    <input type="text" name="keyword">
    <input type="submit" name="find" value="SEARCH">
</form>
<div id="header">
    <h1>Welcome to DorMe!</h1>
</div>
<?php
        $start = 0;
        $lim = 4;
        if(isset($_GET['page'])){
            $page = $_GET['page'];
            $start = ($page-1) * $lim;
        }
        else{
            $page = 1;
        }
        $countQuery = mysqli_affected_rows($dbconn);
        $countQuery = ceil($countQuery/$lim);
        $query = $query . " LIMIT $start, $lim";
        $res = mysqli_query($dbconn, $query);
 ?>

<div id="content">
    <div id="filter">
    <form method="post">
    <fieldset>
        <legend>Filter:</legend>
        <input type="checkbox" name="Kitchen">Kitchen
        <input type="checkbox" name="Common_CR">Common CR
        <input type="checkbox" name="CR_per_room">CR per room
        <input type="checkbox" name="WiFi">WiFi
        <input type="checkbox" name="Lobby">Lobby
        <input type="checkbox" name="Laundry_Area">Laundry Area
        <input type="checkbox" name="Fire_Extinguisher">Fire Extinguisher
        <input type="checkbox" name="Water_Pump">Water Pump
        <input type="checkbox" name="Dirty_Kitchen">Dirty Kitchen
        <input type="checkbox" name="Television">Television
        <input type="checkbox" name="Emergency_Lights">Emergency Lights
        <input type="checkbox" name="Canteen">Canteen
        <input type="checkbox" name="Water_Dispenser">Water Dispenser
        <input type="checkbox" name="Rooftop_Gazebo">Rooftop Gazebo
        <input type="radio" name="loc" value="dorm">Dorm Area
        <input type="radio" name="loc" value="banwa"> Banwa
        <input type="submit" name="submit" value="Filter">
    </fieldset>
    </form>
    </div>

    <div id="table">
    <?php 
    if(!$printTable){
        ?>
        <p>No results in database found!</p>
    <?php 
    }else{
        ?>
    <table border="1">
        <thead>
            <th>Picture</th>
            <th>Information</th>
        </thead>
        <?php
            while(list($DormId, $estName, $address,$owner,$housingType, $thumbnailpic)=mysqli_fetch_row($res)){
        ?>
        <tr>
            <td rowspan="4"><img src="<?=$thumbnailpic?>" style="max-width: 50%; max-height: 50%;"></td>
            <td><label>Establishment Name: </label><a href="viewdorm.php?ID=<?=$dormid?>"><?=$estName?></a></td>
        </tr>
        <tr>
            <td><label>Address: </label><?=$address?></td>
        </tr>
        <tr>
            <td><label>Owner: </label><?=$owner?></td>
        </tr>
        <tr>
            <td><label>Housing Type: </label><?=determine($housingType)?></td>
        </tr>
        <?php 
        } 
}   ?>
    </table>
    </div>
<!-- PAGINATION QUERY -->
     <ul id = "pagination">
     <?php 
//   if($filt != 1){
     if($countQuery > 1){
        if($page>1){    ?>
            <li><a href="?page=<?php echo ($page-1)?>">&laquo;</a></li>
     <?php  }  
            for($x = 1; $x <= $countQuery; $x++){
            if($x == $page){   ?>
                <li><a class="current" href="?page=<?php echo $x?>"><?=$x?></a></li>
     <?php
            }
            else{   ?>
                <li><a href="?page=<?php echo $x?>"><?=$x?></a></li>
 <?php      }   
        }
        if($page!=$countQuery){ ?>
            <li><a href="?page=<?php echo ($page+1)?>">&raquo;</a></li>
<?php   }
    } elseif ($countQuery < 1) { 
             ?>
             <p> No match found! </p>
             <?php } ?>
     </ul>
</div>
<?php
mysqli_close($dbconn);
?>
</body>
</html>

...一旦您在复选框中选中某些内容,然后转到第2页,查询将更改回原始查询,并用未过滤的查询重定向到页面。

问题是由于post方法。请参阅此处,

<form method="post">
              ^^^^ <== see the post method here
<fieldset>
    <legend>Filter:</legend>
    <input type="checkbox" name="Kitchen">Kitchen
    ...
</fieldset>
</form>

击中分页链接并转到第2页时,$_POST数据将不会保留。更好的是,将GET方法用于您的表格,例如:

<form method="get">
    ...
</form>

随后,您必须使用$_GET Superglobal处理表单元素,而不是$_POST

if(isset($_GET["submit"])){
    if(isset($_GET["Kitchen"])){
      $arguments1[] = "Kitchen";
    }
    if (isset($_GET["Common_CR"])) {
      $arguments1[] = "Common CR";
    }
    ...
}

最后,您必须使用URL的查询部分才能正确显示分页链接。因此,您的分页链接代码应该是这样的:

<ul id = "pagination">
<?php 
    parse_str($_SERVER["QUERY_STRING"], $url_array);
    unset($url_array['page']);
    $url = http_build_query($url_array);
    // if($filt != 1){
    if($countQuery > 1){
        if($page > 1){ ?>
            <li><a href="?page=<?php echo ($page-1); ?><?php echo isset($url) && !empty($url) ? "&" . $url : ""; ?>">&laquo;</a></li>
        <?php  
        }  
        for($x = 1; $x <= $countQuery; $x++){
            if($x == $page){ ?>
                <li><a class="current" href="?page=<?php echo $x; ?><?php echo isset($url) && !empty($url) ? "&" . $url : ""; ?>"><?=$x?></a></li>
            <?php
            }else{ ?>
                <li><a href="?page=<?php echo $x; ?><?php echo isset($url) && !empty($url) ? "&" . $url : ""; ?>"><?=$x?></a></li>
            <?php      
            }   
        }
        if($page!=$countQuery){ ?>
            <li><a href="?page=<?php echo ($page+1); ?><?php echo isset($url) && !empty($url) ? "&" . $url : ""; ?>">&raquo;</a></li>
        <?php   
        }
    } elseif ($countQuery < 1) { ?>
        <p> No match found! </p>
    <?php 
    } 
?>
</ul>   

最新更新