繁体   English   中英

PHP / MySQL:分页问题

[英]PHP/MySQL: Pagination issues

我正在尝试在我的代码中实现分页。 它不能很好地工作:

我想每页显示5个结果,但第一页显示所有内容。

2.当我单击页码时,出现错误:未定义索引:搜索。

非常感谢您的帮助!

首先,我搜索一个词,

<form method="post" action="AF12P.php">
    <input type="submit" name="submit" value="search">
    <input type="text" name="search" />
</form>

这是AF12P.php

<div id="wrapper">

    <div id="comments">

        <?php
        include('includes/db_AF.php'); //includes the db credentials
        include ('paginate.php'); //include paginate page
        $per_page = 5;         // number of results to show per page

        $connection = @new mysqli(HOSTNAME, MYSQLUSER, MYSQLPASS, MYSQLDB);
        if ($connection->connect_error) {
         die('Connect Error: ' . $connection->connect_error);
        }
        else {

        $search=$_POST["search"];


        $query="SELECT *, comment FROM comments AS c
        JOIN wordtable2 AS w
        ON c.w1 = w.w1
        WHERE word like '%$search%' 
        ORDER BY word DESC";                         // Run the query

        $resultx = mysqli_query($connection, $query);
        $total_results = mysqli_num_rows($resultx);
        $total_pages = ceil($total_results / $per_page);//total pages 


        $result_obj = '';
        $result_obj = $connection->query($query);            



if (isset($_GET['page'])) {
    $show_page = $_GET['page'];             
    if ($show_page > 0 && $show_page <= $total_pages) {
        $start = ($show_page - 1) * $per_page;
        $end = $start + $per_page;
    } else {

        $start = 0;              
        $end = $per_page;
    }

    } else {
     $start = 0;
    $end = $per_page;
    $show_page=0;
}
// display pagination
if(isset($_GET['page'])){
    $page = intval($_GET['page']);
}else{
     $page =0;
}

$tpages=$total_pages;
if ($page <= 0)
    $page = 1;



        while($result = $result_obj->fetch_array(MYSQLI_ASSOC)) {   
        $items[] = $result;
        }                               


        $reload = $_SERVER['PHP_SELF'] . "?tpages=" . $tpages;
            //echo '<div class="pagination"><ul>';
            if ($total_pages > 1) {
                        echo paginate($reload, $show_page, $total_pages);
                    }

        for ($i = $start; $i < $end; $i++) {
                        // make sure that PHP doesn't try to show results that don't exist
                        if ($i == $total_results) {
                            break;
                        }
            }
        foreach ($items as $item) {



            echo('<a href="AF11G.php?search='.$item['word'].'">'.$item['word'].'</a>');

            echo '<br />';
            echo $item['comment'];                  
            echo '<br />';



        }

        }
        ?>

    </div>

</div>

这是paginate.php {来源: http : //www.techumber.com/2012/08/simple-pagination-with-php-mysql.html }

function paginate($reload, $page, $tpages) {
    $adjacents = 2;
    $prevlabel = "&lsaquo; Prev";
    $nextlabel = "Next &rsaquo;";
    $out = "";
    // previous
    if ($page == 1) {
        $out.= "<span>" . $prevlabel . "</span>\n";
    } elseif ($page == 2) {
        $out.= "<li><a  href=\"" . $reload . "\">" . $prevlabel . "</a>\n</li>";
    } else {
        $out.= "<li><a  href=\"" . $reload . "&amp;page=" . ($page - 1) . "\">" . $prevlabel . "</a>\n</li>";
    }

    $pmin = ($page > $adjacents) ? ($page - $adjacents) : 1;
    $pmax = ($page < ($tpages - $adjacents)) ? ($page + $adjacents) : $tpages;
    for ($i = $pmin; $i <= $pmax; $i++) {
        if ($i == $page) {
            $out.= "<li  class=\"active\"><a href=''>" . $i . "</a></li>\n";
        } elseif ($i == 1) {
            $out.= "<li><a  href=\"" . $reload . "\">" . $i . "</a>\n</li>";
        } else {
            $out.= "<li><a  href=\"" . $reload . "&amp;page=" . $i . "\">" . $i . "</a>\n</li>";
        }
    }

    if ($page < ($tpages - $adjacents)) {
        $out.= "<a style='font-size:11px' href=\"" . $reload . "&amp;page=" . $tpages . "\">" . $tpages . "</a>\n";
    }
    // next
    if ($page < $tpages) {
        $out.= "<li><a  href=\"" . $reload . "&amp;page=" . ($page + 1) . "\">" . $nextlabel . "</a>\n</li>";
    } else {
        $out.= "<span style='font-size:11px'>" . $nextlabel . "</span>\n";
    }
    $out.= "";
    return $out;
}

它不应该是POST ,应该是GET因为您要通过url传递search ,这就是u获取未定义索引的原因,请尝试使用GET方法进行搜索

更改

  $search=$_POST["search"];

  $search=$_GET["search"];

在您的搜索中,您使用$ _POST来发布值。 请改用$ _GET并将所有值与下一个或上一个链接连接。 这应该解决问题

<form method="get" action="AF12P.php">
<input type="submit" name="submit" value="search">
<input type="text" name="search" />
 </form>

并在PHP页面上使用$ _GET而不是$ _POST

我建议您在mysql查询中使用LIMIT 因此,在单击页面后,将无多余行地加载它。 我的意思是更改您的查询,像这样:

$query="SELECT *, comment FROM comments AS c
        JOIN wordtable2 AS w
        ON c.w1 = w.w1
        WHERE word like '%$search%' 
        ORDER BY word DESC
        LIMIT $start_element,$page_limit";

$ page_limit =每页的项目数。

$ start_element =查询中的项目数,从中查询将受到限制。

暂无
暂无

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

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