如何从这个数据库中获取结果的php分页

时间:2012-05-13 08:39:40

标签: php mysql pagination

我是php的初学者。 我在我的html页面中可视化使用此php代码获得的结果,现在我想对结果进行分页并将搜索限制为每页6项。我怎么能得到这个?我的php代码如下:

<?php
$k = $_GET['k'];
$terms = explode(" ", $k);
$query = "SELECT * FROM table_name WHERE ";

$i = 0;
foreach ($terms as $each){
    $i++;
    if ($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";
}

// connect
mysql_connect("hostname","databaseUser","databasePassword");
mysql_select_db("databaseName");

$query = mysql_query($query);
$numrows = mysql_num_rows($query);

echo "<p><strong>Totale: {$numrows} risultati trovati</strong></p></br>";

if ($numrows > 0){

    while ($row = mysql_fetch_assoc($query)){
    $id = $row['id'];
    $title = $row['title'];
    $description = $row['description'];
    $keywords = $row['keywords'];
    $link = $row['link'];
    $date = $row['date'];
    $caption = $row['caption'];

    echo "<h4><a href='$link'>$title</a></h4>";
    echo "<em>$description</em></br></br>";
    echo "$caption</br>";
    echo "$link</br></br>";
    echo "<em>$date</em></br></br>";

    }

}
else
    echo "NO result found  for \"<p><strong>$k</strong></p>\"";

// disconnect
mysql_close();

&GT;

2 个答案:

答案 0 :(得分:0)

您需要在代码中添加页面变量。最简单的方法是通过$ _GET,就像你抓住关键字一样,所以你的网址应该是这样的:

foo.php?k=keywords%20here&p=1

其中p是当前页码。

然后你只需要为你的搜索结果添加一个限制,这样你就可以获得6,并且只需要6。像这样:

$query .= ' LIMIT '.(6*($pageNum - 1)).' 6';

此语句告诉SQL从给定页面的第一个条目开始,并获取6个结果。我们从页码中减去1,以便第1页从条目0而不是条目6开始。

此代码的结果:

page | statement  | Rows Grabbed
---------------------------------
1    | LIMIT 0 6  | 1-6
2    | LIMIT 6 6  | 7-12
3    | LIMIT 12 6 | 13-18
---------------------------------
and so on...

在将$ _GET ['p']放入$ pageNum之前,您可能需要检查$ _GET ['p']是否为整数,这样您就不会遇到尝试将字符串乘以6的运行时问题。

如果您想要更改每页的结果,只需将该语句中的6更换为每页所需的结果数,例如

$query .= ' LIMIT '.($numResults*($pageNum - 1)).' '.$numResults;

这样你可以用另一个变量设置你想要的结果数,比如$ _GET ['n']或类似的东西,并且可以更好地控制。

编辑:

您应该添加错误检查:

$pageNum = (is_numeric($_GET['p']) ? intval($_GET['p']) : 1);

表示如果GET [p]是数字,则将pageNum设置为GET [p]的整数值。否则,将pageNum设置为1。

此外,您将变量放入字符串的方式有一些错误。有两种方法可以将变量连接到字符串中,您可以使用双引号和花括号,如下所示:

$string = "this string has {$variable} in it";

或者您可以使用单引号或双引号连接句点,如下所示:

$string = 'this string has ' . $variable . " in it";

在附加查询时,foreach循环中存在此问题,并且在输出结果的位置也会出现此问题。

答案 1 :(得分:0)

分页是我们大多数人多年来试图解决的问题。

你可以建立自己的库来做这件事,但你几乎肯定会重新发明轮子,可能不会发现/处理一些特殊情况。

如果您正在使用框架我建议使用内置的分页器,如果没有,您可以使用http://pear.php.net/package/Pager这样的PEAR包。