0

こんにちは私は列を持つ「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();

}

?>
4

2 に答える 2

2

MySQL で LIMIT 句を使用します。PHP で現在の結果行を追跡し、次のクエリで使用するリンクを介して変数を渡します。

MySQL ドキュメント (http://dev.mysql.com/doc/refman/5.1/en/select.html) から:

LIMIT 句を使用して、SELECT ステートメントによって返される行数を制限できます。LIMIT は 1 つまたは 2 つの数値引数を取り、両方とも非負の整数定数でなければなりません (準備済みステートメントを使用する場合を除く)。

2 つの引数がある場合、最初の引数は返す最初の行のオフセットを指定し、2 番目の引数は返す行の最大数を指定します。最初の行のオフセットは 0 (1 ではない)

于 2012-06-25T22:46:19.437 に答える
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>

これにより、一度に 1 つの結果が取得され、現在のページに応じて結果がオフセットされます。これを行うときに行う唯一の重要なことは、結果を何らかの順序で並べ替えて、各クエリが結果を同じ順序にすることです。たとえば、ID ASC で並べ替えます (私の例による)。

于 2012-06-25T22:48:57.630 に答える