簡體   English   中英

使用分頁搜索PHP / MySQL

[英]Search PHP/MySQL with Pagination

我編寫了以下代碼來搜索表的行:

<div class="container mx-auto">
    <!--Add class table-responsive for responsive table -->
    <div class="row">
        <div class="col-md-6">
            <form method="post">
            <div class="input-group">
                <input type="text" class="form-control" placeholder="Search for..." name="searchValue">
                <span class="input-group-btn">
                    <button class="btn btn-secondary" name='search' type="submit"><i class="fa fa-search"></i></button>
                </span>
            </div>
            </form>
        </div>
    </div>

    <table class="table mx-auto" id="'table">
        <thead>
        <tr>
            <th>Name</th>
            <th>Surname</th>
            <th>Email</th>
            <th>Phone</th>
            <th>Company</th>
            <th>More</th>

        </tr>
        </thead>
        <tbody>
        <?php
        $page_max = 8;
        if (isset($_POST['search'])){
            $search = $_POST['searchValue'];

            $entriesInDatabase = $database->getData("SELECT count(id) FROM customers WHERE name LIKE '%$search%'");
            $numberOfPages = ceil($entriesInDatabase['count(id)']/$page_max);
            $numberOfRecords = $page_max;
            if(isset($_GET['page'])) {
                $page = $_GET['page'];
                $start = $page * $page_max;
            }
            else{
                $page = 0;
                $start = $page * $page_max;

            }
            $customers = $database->getUsers("SELECT * FROM customers WHERE name LIKE '%$search%' LIMIT $start, $numberOfRecords");
        }
        else{
            $entriesInDatabase = $database->getData("SELECT count(id) FROM customers");
            $numberOfPages = ceil($entriesInDatabase['count(id)']/$page_max);
            $numberOfRecords = $page_max;
            if(isset($_GET['page'])) {
                $page = $_GET['page'];
                $start = $page * $page_max;
            }
            else{
                $page = 0;
                $start = $page * $page_max;

            }
            $customers = $database->getUsers("SELECT * FROM customers LIMIT $start, $numberOfRecords");
        }





        foreach($customers as $customer){
            $name = $customer ['name'];
            $surname = $customer['surname'];
            $email = $customer['email'];
            $phone = $customer['phone'];
            $company = $customer['company'];
            $id = $customer['id'];
            echo "<tr>
                    <td>$name</td>
                    <td>$surname</td>
                    <td>$email</td>
                    <td>$phone</td>
                    <td>$company</td>
                    <td><a href='customerInfo.php?id=$id' class='btn btn-sm btn-info'><i class='fa fa-info'></i></a></td>



                  </tr>";
        }
        ?>
</tbody>
</table>
    <ul class="pagination">
<?php

if(isset($_GET['page']) && $_GET['page'] > 0){
    $previous = $_GET['page'] - 1;
    echo '<li class="page-item"><a class="page-link" href="?page='. $previous.'">Previous</a></li>';
}


for($i = 0; $i < $numberOfPages; $i++){
    echo '<li class="page-item"><a class="page-link" href="?page='. $i . '">'. $i. '</a></li>';
}
    if(isset($_GET['page']) && $_GET['page'] < $numberOfPages - 1){
        $page = $_GET['page'];
        $next = $page + 1;
        echo '<li class="page-item"><a class="page-link" href="?page='.$next.'">Next</a></li> ';
    }
    elseif(!isset($_GET['page'])){
        echo '<li class="page-item"><a class="page-link" href="?page=1">Next</a></li> ';
    }
?>



    </ul>
</div>

當我在第0頁上時,搜索工作正常,但是當我在第2頁上時,除了搜索“ A”時,我只能在該頁面上搜索記錄(我認為這是由於查詢的限制)它返回7頁,但是如果我單擊第二頁,它將不會加載搜索結果,但會加載第2頁上的客戶主列表。

誰能幫我解決這些問題?

首先:清理您的輸入。 在數據庫查詢中使用POST或GET可能非常非常危險。

第二: DRY ,您可能只用一半的代碼即可完成此操作。

之所以“失去”搜索,是因為您的分頁不會覆蓋搜索字詞。

將其添加到分頁中的鏈接,然后從POST切換到GET:

<?php
$searchString = '';
if($_GET['searchValue']){
    $searchString = '&searchValue=' . $_GET['searchValue'];
} 

if(isset($_GET['page']) && $_GET['page'] > 0){
    $previous = $_GET['page'] - 1;
echo '<li class="page-item"><a class="page-link" href="?page='. $previous.$searchString.'">Previous</a></li>';
}
// more code
'... href="?page='.$i.$searchString'" ...'

'... href="?page='.$next.$searchString'" ...'

請注意,我使用$_GET['searchValue']而不是POST。 在大多數情況下,使用POST進行搜索沒有任何優勢(相反,如果您使用GET,則可以在Google Analytics(分析)f.ex中進行跟蹤)。 因此,請確保將表單方法更改為get和if (isset($_POST['search'])){改為$_GET['searchValue'] 如果您堅持使用POST,則可以使用$_REQUEST ,其中包含GET和POST中的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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