您好我有一个名为'BookPage'的表,其中包含列:'PageText'
我已经在“PageText”列上设置了搜索功能(请参阅下面的代码)。现在,当用户搜索关键字时,所有结果页面都会一个接一个地显示。
如果我可以通过点击某种“下一步”按钮链接在各个页面上显示每个页面文字,他们会移动到下一页。
form.php的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search</title>
<link href="default.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<?php
// include MySQL-processing classes
require_once 'mysql.php';
try{
// connect to MySQL
$db=new MySQL(array('host'=>'','user'=>'','password'=>'','database'=>''));
$searchterm=$db->escapeString($_GET['searchterm']);
$result=$db->query("SELECT * FROM BookPage WHERE (PageText) like \"%$searchterm%\" ");
if(!$result->countRows()){
echo '<div class="maincontainer"><h2>No results were found. Go back and try a new search.</h2></div>'."n";
}
else{
// display search results
echo '<div class="maincontainer"><h2>Your search criteria
returned '.$result->countRows().' results.</h2>'."n";
while($row=$result->fetchRow()){
echo '<div class="rowcontainer"><p><strong>Book Id:
</strong>'.$row['BookId'].'<p><p><strong>Page Id:
</strong>'.$row['PageId'].'</p><p><strong>Page Text:
</strong>'.$row['PageText'].'</p></div>'."n";
}
}
echo '</div>';
}
catch(Exception $e){
echo $e->getMessage();
exit();
}
?>
</body>
</html>
嗨,请看下面的修改后的代码无法正常工作,你能让我知道我哪里出错了。
修改后的代码
<?php
// include MySQL-processing classes
require_once 'mysql.php';
try{
// connect to MySQL
$db=new MySQL(array('host'=>'',''=>'','password'=>'','database'=>''));
//page
if (isset($_GET['page'])) {
$page_no = $_GET['page'];
$next_pg = $page_no + 1;
} else {
$page_no = 0;
$next_pg = 1;
}
$searchterm=$db->escapeString($_GET['searchterm']);
$result=$db->query("SELECT * FROM BookPage WHERE (PageText) like \"%$searchterm%\" ORDER BY BookId ASC LIMIT 0, $page_no");
if(!$result->countRows()){
echo '<div class="maincontainer"><h2>No results were found. Go back and try a new search.</h2></div>'."n";
}
else{
// display search results
echo '<div class="maincontainer"><h2>Your search criteria returned '.$result->countRows().' results.</h2>'."n";
while($row=$result->fetchRow()){
$searchvalue = implode('<span style="color:green;font-weight:800;background-color:yellow;">'.$_GET['searchterm'].'</span>',explode($_GET['searchterm'],$row['PageText']));
echo '<div class="rowcontainer"><p><strong>Book Id:
</strong>'.$row['BookId'].'<p><p><strong>Page Id:
</strong>'.$row['PageId'].'</p><p><strong>Page Text:
</strong>'.$searchvalue.'</p></div>'."n";
}
}
echo '</div>';
}
catch(Exception $e){
echo $e->getMessage();
exit();
}
?>
答案 0 :(得分:2)
您在MySQL中使用LIMIT子句。跟踪您在PHP中使用的结果行,并通过您的链接传递变量以在下一个查询中使用。
来自MySQL文档(http://dev.mysql.com/doc/refman/5.1/en/select.html):
LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负整数常量(使用预准备语句时除外)。
使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(不是1)
答案 1 :(得分:2)
您可以尝试将查询更改为:
if (isset($_GET['page'])) {
$page_no = $_GET['page'];
$next_pg = $page_no + 1;
} else {
$page_no = 0;
$next_pg = 1;
}
$result=$db->query("SELECT * FROM BookPage WHERE (PageText) like \"%$searchterm%\" ORDER BY id ASC LIMIT 1, $page_no");
然后插入如下链接:
<a href="thispage.php?page=<?php echo $next_pg; ?>">Next page</a>
这样做的目的是一次获得一个结果并根据您所在的页面偏移结果。执行此操作时唯一重要的事情是按顺序排序结果,以便每个查询以相同的顺序放置结果。例如,按ID ASC排序(根据我的例子)。