2012-10-17 37 views
0

这已经过去了一个月,我真的搞砸了试图将php分页代码整合到我的搜索脚本。提到大多数的教程谷歌搜索,但徒劳无功。任何帮助将非常感激。在这里,我去...需要一个分页PHP代码来整合我的搜索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."; 
} 
    } 
?> 
+0

我看到一些问题,但它们与分页无关:SQL注入,使用旧的mysql *函数,混合布局与数据层... –

+0

@LucM - PHP编码很新颖。你能否列出任何错误或警告,并请建议更换?非常感谢 – unanswerable

+1

这应该有所帮助:http://www.designplace.org/scripts.php?page=1&c_id=25 – twodayslate

回答

2

除了吕克·M在他的评论中提到的问题(你应该在继续之前一定解决),你几乎没有。

你需要考虑几点,真的:每页显示多少条记录,以及你在哪个页面上。这些将决定你需要检索和显示的记录。那么,你如何去做这件事?

第一点在您的代码中已经通过在SQL查询中使用LIMIT子句进行了说明。第二点稍微复杂一点。您需要一种识别您所在页面的方法。这可能是通过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 . ";"; 

OFFSETLIMIT沿SQL子句基本上说“从结果编号x开始选择这么多记录”。您偏移$currentPage - 1,因为第一页不需要偏移量,第二页只需要第一页上显示的很多记录的偏移量,等等。

要为分页数据创建导航,您需要找出结果集中有多少条记录,这可以通过PHP的count($array)函数完成。然后,找到页面的数量,只需使用类似于:

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

其中$array是来自SQL查询的数据集。 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设计模式。

希望这会帮助你。