0

1 か月が経ちましたが、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.";
}
    }
?>
4

1 に答える 1

2

Luc M が彼のコメントで言及した問題 (先に進む前に必ず解決する必要があります) を除けば、ほとんど問題はありません。

実際には、いくつかの点を考慮する必要があります。ページごとに表示するレコード数と、現在のページです。これらは、取得して表示する必要があるレコードを決定します。それで、あなたはこれについてどうしますか?

LIMIT最初のポイントは、SQL クエリで句を使用することで、コードで既にカバーされています。2 番目の点は、最初は少し複雑です。現在のページを識別する方法が必要です。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 . ";";

SQLのOFFSET節はLIMIT基本的に「結果番号xから始めて、この数のレコードを選択する」と言っています。最初のページはオフセット$currentPage - 1を必要とせず、2 番目のページは最初のページに表示されたレコード数のオフセットのみを必要とするため、オフセットします。

count($array)ページ分割されたデータのナビゲーションを作成するには、結果セットに含まれるレコードの数を確認する必要があります。これは、PHPの関数を使用して実行できます。次に、ページ数を見つけるには、次のようなものを使用します。

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

$arraySQL クエリからのデータセットはどこにありますか。この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 設計パターンを検討してください。

うまくいけば、これはあなたを助けるでしょう.

于 2012-10-17T17:38:55.073 に答える