2012-05-13 20 views
0

私はPHPの初心者です。 私はこのPHPコードで得られた結果をHTMLページで視覚化しましたが、結果をページ区切りし、ページあたり6項目に制限したいと考えています。どのように私はこれを得ることができますか?次のように私のPHPコードは次のとおりです。このデータベースから得られた結果の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(); 

>

+3

MySQLの「制限」を読んでください。 – kapa

+1

古くからの新しいmysql_ *関数を使って新しいコードを書くのを止めてください。それらはもはや維持されず、コミュニティは[非推奨プロセス](http://goo.gl/KJveJ)を開始しました。代わりに、[準備完了ステートメント](http://goo.gl/vn8zQ)について学び、[PDO](http://php.net/pdo)または[MySQLi](http://php.net/)を使用する必要があります。 mysqli)。あなたが決定できない場合、[この記事](http://goo.gl/3gqF9)が選択に役立ちます。あなたが学びたい人は、[ここではかなり良いPDO関連のチュートリアルです](http://goo.gl/vFWnC)。 –

答えて

0

あなたはあなたのコードにページ変数を追加する必要がありますか?。 pは現在のページ番号である

foo.php?k=keywords%20here&p=1 

:これまでに最も簡単な方法は、ので、あなたのURLは次のようになります、あなたは、キーワードをつかん同じように、$ _GETを経由しています。

次に、検索結果に上限を設定して、6つだけ取得し、正しい6を設定する必要があります。

このステートメントは、指定されたページの最初のエントリから開始し、6つの結果を取得するようにSQLに指示します。あなたは$ _GET [「P」]というをチェックする必要があるかもしれません

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

:私たちは、このコードの結果の代わりにエントリー6.

のエントリ0で、そのページ1開始して、ページ番号から1を引きます$ pageNumに入れる前に整数であるため、文字列に6を掛けようとすると実行時の問題にならないようにします。

結果をページごとに変更したい場合は、 1ページあたりの結果の望ましい数、例あなたが別の変数と結果のご希望の数を設定することができます

$query .= ' LIMIT '.($numResults*($pageNum - 1)).' '.$numResults; 

その方法は、$ _GET [「N」]または似た何かを言うし、より良いコントロールを持っています。

EDIT:あなたはおそらく、エラーチェックを追加する必要があります

$pageNum = (is_numeric($_GET['p']) ? intval($_GET['p']) : 1); 

言うならばGET [P] GET [P]の整数値に数値、設定PAGENUMがあります。それ以外の場合は、pageNumを1に設定します。

また、変数を文字列に挿入する方法にはいくつかのエラーがあります。

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

それとも、シングルまたはダブルのいずれかの引用符を使用して、ピリオドで連結することができますので、好き::、あなたは二重引用符と中括弧、そのように使用することができますいずれかの文字列に変数を結合するには2つの方法があります

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

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

+0

私はその理由を理解していますが、上記のコードを修正する方法はわかりません。あなたは私のために親切にこれをすることができますか?あなたは私にとって大きな助けになるでしょう。 – user1391945

+0

'$ k = $ _GET ['k'];'の後に '$ pageNum = $ _GET ['p'];'を追加します。 foreachループの後に '$ query。= 'LIMIT'(6 *($ pageNum - 1))を追加してください。 6 ';その後、サイトにアクセスするたびに、 'foo.php?k = keywords%20here&p = 1'のように、URLにページ番号があることを確認してください。ページ番号のリンクやそのようなものを追加する必要がありますが、これはその背後にある基本的なフレームワークです。 –

+0

私は: 未定義インデックス:p $ pageNum = $ _GET ['p']; mysql_num_rows()は、パラメータ1がリソースであることを期待しています。ブール値を指定します。 $ numrows = mysql_num_rows($ query); – user1391945

0

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

これを行う独自のライブラリを作成することはできますが、ホイールを再発明することはほとんど間違いなく、特殊なケースのいくつかを見つけたり処理したりすることはできません。

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

関連する問題