0

我是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();

?>

4

2 回答 2

0

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

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 之前检查它是否为整数,这样您就不会在尝试将字符串乘以 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 循环中存在此问题,并且在您输出结果的位置更远。

于 2012-05-13T08:50:51.060 回答
0

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

您可以构建自己的库来执行此操作,但您几乎肯定会重新发明轮子,并且可能无法发现/处理某些特殊情况。

如果您使用的是框架,我建议您使用内置的分页器,否则您可以考虑使用类似http://pear.php.net/package/Pager的 PEAR 包。

于 2012-05-13T08:57:20.033 回答