0

私はphpの初心者です。このphpコードで得られた結果をHTMLページで視覚化します。結果をページ分割し、検索を1ページあたり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はエントリ6ではなくエントリ0から始まります。

このコードの結果:

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...

$ 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に設定します。

また、変数を文字列に入れる方法にいくつかのエラーがあります。変数を文字列に結合する方法は2つあります。次のように、二重引用符と中括弧のいずれかを使用できます。

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

または、次のように一重引用符または二重引用符を使用して、ピリオドと連結することができます。

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

クエリを追加するときのforeachループ、および結果を出力する場所のさらに下で、この問題が発生します。

于 2012-05-13T08:50:51.060 に答える
0

ページネーションは、私たちのほとんどが何年にもわたって解決しようとしてきた問題です。

これを行うために独自のライブラリを構築することはできますが、ほぼ間違いなく車輪を再発明することになり、いくつかの特殊なケースを見つけたり処理したりしない可能性があります。

フレームワークを使用している場合は、組み込みのページネーターを使用することをお勧めします。そうでない場合は、PEAR パッケージであるhttp://pear.php.net/package/Pagerのようなものを使用して調べることができます。

于 2012-05-13T08:57:20.033 に答える