Пагинация после поиска в php - PullRequest
0 голосов
/ 25 мая 2019

У меня есть кнопка поиска, которая используется для поиска в категории и таблице товаров.Поэтому я использую 2 раскрывающихся меню, когда страница загружается в первом раскрывающемся списке, где отображаются категории, а когда пользователь выбирает категорию во втором раскрывающемся списке, отображается продукт, который находится в этой категории.Также, когда страница загружается, запускается запрос по умолчанию, который показывает все продукты.Так что функция поиска работает хорошо.

Проблема в том, что я также использую нумерацию страниц.Перед поиском нумерация страниц работает нормально (15 записей на страницу), но после поиска, если я выбираю категорию и выполняю поиск, отображаются все записи этой категории, а при переходе на следующую страницу выполняется запрос по умолчанию и результат по умолчанию.Я хочу, чтобы он показал результат, который я искал.

<?php 
            $listperpage = 15;
            $c = $_POST['category'];
            $n = $_POST['product'];
            if(!empty($c)){
                $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c'";
                $result = mysql_query($query) or die (mysql_query());
            }
            else if(!empty($c) && !empty($n)){
                $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c' AND rank_name = '$n'";
                $result = mysql_query($query) or die (mysql_query());
            }else{
                $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category";
                $result = mysql_query($query) or die (mysql_query());
                echo "else one";
            }

            $result_num = mysql_num_rows($result);
            //total pages
            $pages = ceil($result_num/$listperpage);
            //which number the user is crrrently on 
            if (!isset($_GET['page'])) {
                $page = 1;
            } else{
                $page = $_GET['page'];
            }
            //sql limit starting number of results on th page
            $strt_limit_no = ($page - 1)*$listperpage;

            if(isset($_POST["search"])){
                $c = $_POST['category'];
                $n = $_POST['product'];

                if(empty($c)){
                    echo "<span class='form-error'>Select Category first!</span>";
                }
                else if(!empty($c) && !empty($n)){
                    $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c' AND rank_name = '$n' LIMIT ". $strt_limit_no .','. $listperpage;
                    $results =  mysql_query($queryn) or die (mysql_query());
                }
                else{
                    $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c' LIMIT ". $strt_limit_no .','. $listperpage;
                    $results =  mysql_query($queryn) or die (mysql_query());
                }
            }
            else{
                $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category LIMIT ". $strt_limit_no .','. $listperpage;
                $results = mysql_query($queryn) or die (mysql_query());
                echo "else end";
            }
        ?>
<script type="text/javascript">
    $(document).ready(function() {
        $("#category").on('click',function(){
            var category = $(this).val();
            if(category){
                //alert('3213');
                $.ajax({
                    type:'POST',
                    url:'process.php',
                    data:'category=' + category,
                    success:function(html){
                        $("#product").html(html);
                    }
                });
            }
        });
    });
</script>
<div align="center" class='maintabledivdaily' style='width:100%; padding: 20px 0 15px 0;' >
        <table border="1" cellpadding="5" cellspacing="2" width="80%" >
            <thead>
                <tr>
                    <th colspan="9" bgcolor="#CCCCCC">List of all Ranks</th>
                </tr>
                <tr>
                    <th>ID</th>
                    <th>Category</th>
                    <th>Product Name</th>
                </tr>
            </thead>
            <tbody>
                <?php while ($row = mysql_fetch_array($results)): ?>
                <tr></tr>
                <tr align="center" dir="rtl" style="font-style:">
                    <td><?php echo $row['id']; ?></td>
                    <td><?php echo $row['category']; ?></td>
                    <td><?php echo $row['product']; ?></td>
                </tr>
                <?php endwhile; ?>
            </tbody>
        </table>
        <br>
        <div class="pagination">
            <?php
            for ($page=1; $page <= $pages ; $page++) { 
                echo '<a style="color: #000000;
                        float: left;
                        padding: 8px 16px;
                        text-decoration: none;
                        "href="list.php?page='. $page .'">'. $page .'</a> ';
            }
            ?>
        </div>

1 Ответ

2 голосов
/ 25 мая 2019

Измените метод формы с поста, чтобы получить, где у вас есть выбор категории и кнопка поиска.

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

Получить категорию и другие опубликованные значения на конце сервера.

$c = $_GET['category'];
$n = $_GET['product'];

добавитьэти значения должны быть разбиты на страницы

<div class="pagination">
        <?php
        $cat = $prod = '';
        if(!empty($_GET['category'])){ $cat = '&category='.$_GET['category']; }
        if(!empty($_GET['product'])){ $prod = '&product='.$_GET['category']; }
        for ($page=1; $page <= $pages ; $page++) { 
            echo '<a style="color: #000000;
                    float: left;
                    padding: 8px 16px;
                    text-decoration: none;
                    "href="list.php?page='. $page. $cat. $prod .'">'. $page .'</a> ';
        }
        ?>
    </div>

Примечание. Если параметр 'page' не отправляется при поиске, задайте для страницы с именем страницу ввода.

<input type="hidden" name="page" value="<?php echo $page; ?>"

Второй подход заключается в следующем.что вы можете сохранить введенные значения в SESSION и очистить сеанс при нажатии новой кнопки. Очистить поиск.

Шаг 1: Добавить новую кнопку (Очистить поиск) помимо кнопки поиска.

Шаг 2: Сохранить опубликованную категорию и продукт в сеансе и использовать этот сеанс в запросах.И уничтожить сессию на кнопке очистки поиска.

        <?php
        $listperpage = 15;
        $_SESSION['category'] = $_POST['category'];
        $_SESSION['product'] = $_POST['product'];
        /** clear_search is the name of your clear search button */
        if(isset($_POST["clear_search"])){
            unset($_SESSION['category']);
            unset($_SESSION['product']);
        }
        if(!empty($_SESSION['category'])){
            $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = ". $_SESSION['category'];
            $result = mysql_query($query) or die (mysql_query());
        }
        else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
            $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = ". $_SESSION['product'];
            $result = mysql_query($query) or die (mysql_query());
        }else{
            $query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category";
            $result = mysql_query($query) or die (mysql_query());
            echo "else one";
        }

        $result_num = mysql_num_rows($result);
        //total pages
        $pages = ceil($result_num/$listperpage);
        //which number the user is crrrently on 
        if (!isset($_GET['page'])) {
            $page = 1;
        } else{
            $page = $_GET['page'];
        }
        //sql limit starting number of results on th page
        $strt_limit_no = ($page - 1)*$listperpage;

        if(isset($_POST["search"])){
            if(empty($_SESSION['category'])){
                echo "<span class='form-error'>Select Category first!</span>";
            }
            else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
                $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = " . $_SESSION['product'] . " LIMIT ". $strt_limit_no .','. $listperpage;
                $results =  mysql_query($queryn) or die (mysql_query());
            }
            else{
                $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " LIMIT ". $strt_limit_no .','. $listperpage;
                $results =  mysql_query($queryn) or die (mysql_query());
            }
        }
        else{
            $queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category LIMIT ". $strt_limit_no .','. $listperpage;
            $results = mysql_query($queryn) or die (mysql_query());
            echo "else end";
        }
    ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...