0

已经一个月了,尝试将 php 分页代码集成到我的搜索脚本中时,我真的搞砸了。参考了谷歌搜索的大部分教程,但徒劳无功。任何帮助将非常感激。我来啦...

<?php
 ob_start();
 session_start();
 $_GET['term'] = trim($_GET['term']);
 $output = preg_replace('!\s+!', ' ', $_GET['term']);
 if(empty($_GET['term'])|| preg_match("/^[@!#\$\^%&*()+=\-\[\]\\\';,\.\/\{\}\|\":<>\?\ _ ]+$/i", $_GET['term']) || $output== ' ' || $_GET['term']== "%24_GET%5B%27term%27%5D")
 {
 echo "<BR>";
 echo "<BR>";
 echo("Please enter a Valid Search term");
 }
 else
 {
    mysql_connect("localhost", "root", "root");
    mysql_select_db("search");
    $_GET['term'] = explode(' ', $_GET['term']);
    foreach($_GET['term'] AS $_GET['term'])
     {
     $_GET['term'] = trim($_GET['term']);
 $sql = mysql_query("SELECT DISTINCT * FROM searchengine WHERE pagecontent LIKE '%" . str_replace(' ', "%' AND pagecontent LIKE '%", $_GET['term'])."%' LIMIT 0,10");
   while($ser = mysql_fetch_array($sql)) {
       echo "<BR>";
        echo "<b><u><a href='$ser[pageurl]'>$ser[title]</a></u></b>";
        echo "<BR>";
        echo("<span class='style_block'>{$ser['pagecontent']}</span>");
        echo "<BR>";
        echo ("<a href='$ser[pageurl]'>$ser[pageurl]</a>");
        echo "<BR>";
        echo "<BR>";
       } 
    }
$count=mysql_num_rows($sql);
if($count==0)
{
 echo "<BR>";
 echo "<BR>";
echo "Sorry, No News material was found... Please refine your search criteria and try again.";
}
    }
?>
4

1 回答 1

2

除了 Luc M 在他的评论中提到的问题(你当然应该在继续之前解决),你几乎就在那里。

实际上,您需要考虑几点:每页显示多少条记录,以及您在哪个页面上。这些将规定您需要检索和显示的记录。那么,你怎么做呢?

LIMIT通过在 SQL 查询中使用子句,您的代码已经涵盖了第一点。第二点开始有点复杂。您需要一种识别您所在页面的方法。这可能最容易通过GET变量来识别,例如http://site.com/search.php?page=2. 现在,为了实现这一点,您需要以下内容:

$recordsPerPage = 10; // although you may want to have this as a GET or POST variable as well, so the user can decide
if(isset($_GET['page']) // this ensures a default value
{
    $currentPage = $_GET['page'];
}
else
{
    $currentPage = 1;
}

然后,对于您的 SQL 查询,您想要构建如下内容:

$query = "SELECT * FROM table_name LIMIT " . $recordsPerPage . " OFFSET " . ($currentPage - 1)*$recordsPerpage . ";";

SQL的OFFSET子句以及LIMIT基本上说“选择这么多记录,从结果编号 x 开始”。您偏移是$currentPage - 1因为第一页不想要偏移量,而第二页只想要第一页上显示的许多记录的偏移量,依此类推。

要为分页数据创建导航,您需要了解结果集中有多少条记录,这可以通过count($array)PHP 的函数来完成。然后,要查找页数,只需使用以下内容:

$numPages = ceil(count($array)/$recordsPerPage);

$arraySQL 查询中的数据集在哪里。该ceil()函数将结果向上舍入到下一个整数。

一旦你得到这个结果,你只需要输出每个页面的链接,这可以简单地通过一个for循环来完成:

for($i = 0; i < $numPages; i++)
{
    echo '<a href="/search.php?page="' . $i+1 . '>' . $i+1 . '</a>';
}

要创建第一页、上一页、下一页和最后一页链接,您需要执行以下操作:

$firstPage = 1;
$previousPage = $currentPage - 1; // you may want to check here or elsewhere to make sure you have no page zero
$nextPage = $currentPage + 1; // may also want to make sure you don't go past the last page
$lastPage = $numPages;

然后可以将这些值放入您生成的链接中。

再次,我将向您推荐 Luc M 的评论...这些需要修复,查看mysqli函数而不是您当前正在使用的现已弃用的mysql_*()函数,确保在使用之前清理任何用户输入的数据,并考虑查看 MVC 设计模式。

希望这会对您有所帮助。

于 2012-10-17T17:38:55.073 回答