PHP分页包含搜索功能和订购

时间:2012-11-06 12:08:13

标签: php mysql pagination

任何人都知道一个好地方或一个很好的教程如何设置我正在寻找的分页?

在你生气之前,我在这里发布了数百行,让我快速解释一下我想要实现的目标,以及我用来更好地解释我的情况的代码。

如果您只想分页或只想搜索,则以下代码有效:
 1.进入主页面,分页工作正常。点击第1页,第2页等,您将得到您期望的结果  2.使用搜索,它可以工作,但这会在1页中无限制地提供所有记录。我可以设置一个限制,但分页仍然不起作用。

我只是不知道如何获取搜索变量并将其添加到分页中。

是否有可能有一个网址:search = Hello + World?orderby = custforename + custsurname?page = 3 ..我认为这是......这样的事情,'?嵌套获取变量?'叫什么名字?对于高级分页教程,任何人都知道一个好地方吗?

<小时/> 我在我的主页上使用此代码:                            

<?php
    if(isset($_POST['search']))
    {
        $search = $_POST['search'];
        $search = ltrim($search, " ");
        $terms = explode(" ", $search);
        $customerlistquery = "
                            SELECT *
                            FROM customer
                            LEFT JOIN company
                            ON customer.compid=company.compid
                            WHERE
                            ";
        $i = 0;
        foreach ($terms as $each) 
        {
            if ($i++ > 0) 
            $customerlistquery .= ' OR ';

            $customerlistquery .= "concat(custsurname, custforename, custmidname, custpostal, custphone1, custphone2, custfax, custnamecode, datemodified, modifiedby) LIKE '%$each%' ";
        }
        $customerlistquery .= " ORDER BY $orderby ASC";
    }
    else
    {
        $page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
        $startpoint = ($page * $limit) - $limit;
        $customerlistquery = "  
                SELECT *
                FROM customer
                LEFT JOIN company
                ON customer.compid=company.compid
                ORDER BY $orderby ASC 
                LIMIT {$startpoint}, {$limit}
                ";
        echo pagination("customer
                LEFT JOIN company
                ON customer.compid=company.compid
                ORDER BY $orderby ASC",$limit,$page);       
    }
?>


$result=mysql_query($itemslistquery) or die("query fout " . mysql_error() );

最后是pagination.php代码:

<?php
    function pagination($query, $per_page = 10,$page = 1, $url = '?'){        
        $query = "SELECT COUNT(*) as `num` FROM {$query}";
        $row = mysql_fetch_array(mysql_query($query));
        $total = $row['num'];
        $adjacents = "2"; 

        $page = ($page == 0 ? 1 : $page);  
        $start = ($page - 1) * $per_page;                               

        $prev = $page - 1;                          
        $next = $page + 1;
        $lastpage = ceil($total/$per_page);
        $lpm1 = $lastpage - 1;

        $pagination = "";
        if($lastpage > 1)
        {   
            $pagination .= "<ul class='pagination'>";
                    $pagination .= "<li class='details'>Page $page of $lastpage</li>";
            if ($lastpage < 7 + ($adjacents * 2))
            {   
                for ($counter = 1; $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
            }
            elseif($lastpage > 5 + ($adjacents * 2))
            {
                if($page < 1 + ($adjacents * 2))     
                {
                    for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                    $pagination.= "<li class='dot'>...</li>";
                    $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                    $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
                }
                elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
                {
                    $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                    $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                    $pagination.= "<li class='dot'>...</li>";
                    for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                    $pagination.= "<li class='dot'>..</li>";
                    $pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                    $pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";      
                }
                else
                {
                    $pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                    $pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                    $pagination.= "<li class='dot'>..</li>";
                    for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            $pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                }
            }

            if ($page < $counter - 1){ 
                $pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
                $pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
            }else{
                $pagination.= "<li><a class='current'>Next</a></li>";
                $pagination.= "<li><a class='current'>Last</a></li>";
            }
            $pagination.= "</ul>\n";      
        }


        return $pagination;
    } 
?>

1 个答案:

答案 0 :(得分:1)

如果你想用GET传递多个变量,你必须像这样使用它:

URL VAR1 = X&安培; VAR2 = Y&安培; VAR3 = Z

在PHP中你会像这样恢复它们:

$var1=$_GET['var1'];
$var2=$_GET['var2'];
$var3=$_GET['var3'];

关于你的'paginator'问题,我通常只进行1次查询,然后在客户端使用javascript对其进行分页,这样我就可以在不等待服务器回答的情况下更改页面。

如果您只想使用PHP,则应在查询中设置“LIMIT x,y”,其中x是页面的第一个元素,y是要在一个页面中显示的元素数。例如,如果您要显示50个元素的页面:

$x=50*($pagenumber-1); //the index of the 1st element is 0
$y=50;
$query="SELECT * FROM table LIMIT $x,$y";

这样的事应该可以正常工作。