【问题标题】:Pagination onOn search result with PHP only仅使用 PHP 对搜索结果进行分页
【发布时间】:2018-05-28 01:12:24
【问题描述】:

我是一名 PHP 学生,正在开发我的第一个应用程序。我需要使用下面的代码在搜索结果上添加分页。我不能使用数据表或其他插件,因为我很难将操作按钮和我的数据放在表上。

如果你知道一些不那么难实现的简单方法会很有帮助。

我正在使用来自此开发的示例:how to search and filter with php

if(isset($_POST['search']))
{
    $valueToSearch = $_POST['valueToSearch'];
    // search in all table columns
    // using concat mysql function
    $query = "SELECT * FROM `users` WHERE CONCAT(`id`, `fname`, `lname`, `age`) LIKE '%".$valueToSearch."%'";
    $search_result = filterTable($query);

}
 else {
    $query = "SELECT * FROM `users`";
    $search_result = filterTable($query);
}

// function to connect and execute the query
function filterTable($query)
{
    $connect = mysqli_connect("localhost", "root", "", "test_db");
    $filter_Result = mysqli_query($connect, $query);
    return $filter_Result;
}

?>

<!DOCTYPE html>
<html>
    <head>
        <title>PHP HTML TABLE DATA SEARCH</title>
        <style>
            table,tr,th,td
            {
                border: 1px solid black;
            }
        </style>
    </head>
    <body>

        <form action="php_html_table_data_filter.php" method="post">
            <input type="text" name="valueToSearch" placeholder="Value To Search"><br><br>
            <input type="submit" name="search" value="Filter"><br><br>

            <table>
                <tr>
                    <th>Id</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Age</th>
                </tr>

      <!-- populate table from mysql database -->
                <?php while($row = mysqli_fetch_array($search_result)):?>
                <tr>
                    <td><?php echo $row['id'];?></td>
                    <td><?php echo $row['fname'];?></td>
                    <td><?php echo $row['lname'];?></td>
                    <td><?php echo $row['age'];?></td>
                </tr>
                <?php endwhile;?>
            </table>
        </form>

    </body>
</html>

【问题讨论】:

  • 在请求中传递两个参数,例如 offsetlimit,并在查询结束时像 limit offset,limit 这样在查询中使用它

标签: php mysql search html-table pagination


【解决方案1】:

下面的例子可以很好地满足要求:

mysql_connect("localhost","wellho","wawawawa");
mysql_select_db("wellho");

$perpage = 10;
$html = "";
$startat = $_REQUEST[page] * $perpage;
$limlim = "%".$_REQUEST[look4]."%";

$q = mysql_query("select count(entry_id) from mt_entry where entry_title like '$limlim'");
$row = mysql_fetch_array($q);
$havesome = $row[0];
$pages = floor(($row[0]-1)  / $perpage) +1 ;

$q = mysql_query("select * from mt_entry where entry_title like '$limlim' order by entry_id desc limit $startat,$perpage");

while ($row = mysql_fetch_assoc($q)) {
        $text = strip_tags($row[entry_text]);
        $text = substr($text,0,300);
        $html .= "<dt>$row[entry_id] - <a href=/mouth/$row[entry_id]_.html target=pix>$row[entry_title]</a></dt>";
        $html .= "<dd>$text ....<br><br></dd>";
        };

$lynx = "Please choose the next page you want to view:";
for ($k=0; $k<$pages; $k++) {
        if ($k != $_REQUEST[page]) {
         $lynx .= " <a href=$PHP_SELF"."?page=$k&look4=".urlencode(stripslashes($_REQUEST[look4])).">".($k+1)."</a>";
        } else {
         $lynx .= " <b>--".($k+1)."--</b>";
        }
}
if ($pages < 2) {
        $lynx = "All results shown on this page";
}
if ($havesome == 0) {
        $lynx = "Sorry - no titles matched. Please change your search string";
        }
?>
<html><head>
<title>Showing blog entries</title>
<body>
<h2>Search titles on "The Horse's Mouth"</h2>
<form>Search only for titles including ... <input name=look4
value="<?= htmlspecialchars(stripslashes($_REQUEST[look4])) ?>">
(Please leave box empty to select all titles)<br>
<input type=submit></form><br>
<h2>Here are the entries you selected - page <?= $_REQUEST[page]+1 ?>:</h2><br>
<?= $html ?>
<?= $lynx ?>
</body>

【讨论】:

    【解决方案2】:

    您应该使用limit and offset 对结果进行分页。

    <?php
    
    ...
    
    // If no 'page' parameter is found, default to 1
    $currentPage = isset($_GET['page']) ? $_GET['page'] : 1;
    // Results per page
    $limit = 10;
    // Offset = (page - 1) * limit. (page 1 = 0, page 2 = 10, etc...)
    $offset = ($currentPage - 1) * $limit;
    
    if(isset($_POST['search']))
    {
        $valueToSearch = $_POST['valueToSearch'];
        // search in all table columns
        // using concat mysql function
        $query = "SELECT * FROM `users` WHERE CONCAT(`id`, `fname`, `lname`, `age`) LIKE '%".$valueToSearch."%' LIMIT $limit OFFSET $offset";
        $search_result = filterTable($query);
    
    }
     else {
        $query = "SELECT * FROM `users` LIMIT $limit OFFSET $offset";
        $search_result = filterTable($query);
    }
    
    // function to connect and execute the query
    function filterTable($query)
    {
        $connect = mysqli_connect("localhost", "root", "", "test_db");
        $filter_Result = mysqli_query($connect, $query);
        return $filter_Result;
    }
    
    ?>
    
    <!DOCTYPE html>
    <html>
        <head>
            <title>PHP HTML TABLE DATA SEARCH</title>
            <style>
                table,tr,th,td
                {
                    border: 1px solid black;
                }
            </style>
        </head>
        <body>
    
            <form action="php_html_table_data_filter.php" method="post">
                <input type="text" name="valueToSearch" placeholder="Value To Search"><br><br>
                <input type="submit" name="search" value="Filter"><br><br>
    
                <table>
                    <tr>
                        <th>Id</th>
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>Age</th>
                    </tr>
    
          <!-- populate table from mysql database -->
                    <?php while($row = mysqli_fetch_array($search_result)):?>
                    <tr>
                        <td><?php echo $row['id'];?></td>
                        <td><?php echo $row['fname'];?></td>
                        <td><?php echo $row['lname'];?></td>
                        <td><?php echo $row['age'];?></td>
                    </tr>
                    <?php endwhile;?>
                </table>
            </form>
    
            <a href="php_html_table_data_filter.php?page=<?php echo $page-- ?>">Previous</a>
            <a href="php_html_table_data_filter.php?page=<?php echo $page++ ?>">Next</a>
    
        </body>
    </html>
    

    PS:在前面的例子中我没有检查页面是第一个还是最后一个,你应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2015-06-10
      • 2019-06-15
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多