0

php / mysqlリストがあり、たくさんのサムネイルを表示できます。

私の問題は、1ページに表示するには画像が多すぎることです。いくつかのページリンクまたは下部に何かを取得できるように分割したいですか?

のように:1、2、3、4、5、6、7、8または次と前...

現在のコードは次のとおりです。

<?php
    if ($db_found) {
        $SQL = "SELECT * FROM myTable";
        $result = mysql_query($SQL);

        while ($db_field = mysql_fetch_assoc($result)) {
            echo '<li>';
            echo '<div class="thumb"><img src="images/thumbnails/'.$db_field['image'].'" alt="" /></a></div>';
            echo '</li>';
        }
        mysql_close($db_handle);
    }
?>

ここにページリンクを追加するにはどうすればよいですか?

4

6 に答える 6

2

Jquery を使用するとはるかに簡単ですが、最初は PHP を使用することをお勧めします。JQuery コードを追加してすべてを取得するよりも、頭を開発することしかできません。いずれにせよ、PHP での簡単なページングは​​次のようになります。このコードを学習するための鍵は理解することです。それを開発し、独自の改善をいくつか追加します。この優れたサイトのクレジット : PHPGuide

 $per_page = 5; 
 $page = 1;

 if (isset($_GET['page'])) 
 {
  $page = intval($_GET['page']); 
  if($page < 1) $page = 1;
}


 $start_from = ($page - 1) * $per_page; 

 mysql_connect(..);
 mysql_select_db(..);

 $current_items = mysql_query( "SELECT * FROM `test` LIMIT $start_from, $per_page");
 if( mysql_num_rows($current_items) > 0)
 {
  while($item = mysql_fetch_assoc($current_items))
  {
    echo $item['text'], '<br/>';
  }
 }
 else
 {
  echo 'this page does not exists'; 
 }


 $total_rows = mysql_query("SELECT COUNT(*) FROM `test`");
 $total_rows = mysql_fetch_row($total_rows);
 $total_rows = $total_rows[0];

 $total_pages = $total_rows / $per_page;
 $total_pages = ceil($total_pages); # 19/5 = 3.8 ~=~ 4

 for($i = 1; $i  <= $total_pages; ++$i)
 {
  echo "<a href='?page=$i'>$i</a> &nbsp;&nbsp;";
 }

コードは非常に理解しやすく、非常にシンプルです。前後のページについては、このコードを取得した後に行う改善の 1 つです。

于 2012-05-24T13:00:35.263 に答える
1
<?php
    $per_page = 20;
    $start=0; 

    if(isset($_GET['pagenum']))
      {
      $pagenum=$_GET['pagenum'];
      $start=($pagenum*$per_page)
      }
    if ($db_found) {
        $SQL = "SELECT * FROM myTable  Limit $start , $per_page";
        $result = mysql_query($SQL);
        $count = mysql_num_rows($result);
        $pages = ceil($count/$per_page)
        while ($db_field = mysql_fetch_assoc($result)) {
            echo '<li>';
            echo '<div class="thumb"><img src="images/thumbnails/'.$db_field['image'].'" alt="" /></a></div>';
            echo '</li>';
        }
        mysql_close($db_handle);
    }

    //Create you links here 
    for($pagenum=1; $pagenum<=$pages; $pagenum++)
    {
     echo '<a href="'.$pagenum.'">'.$pagenum.'</a>';
    }
?>
于 2012-05-24T12:50:47.093 に答える
1

クエリを変更してパラメータを指定する必要があります。

この行で:

$SQL = "SELECT * FROM myTable";

このようなものを使用してください

jcho360> select * from actor limit 0,5;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
5 rows in set (0.00 sec)

jcho360> select * from actor limit 5,5;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|        6 | BETTE      | NICHOLSON | 2006-02-15 04:34:33 |
|        7 | GRACE      | MOSTEL    | 2006-02-15 04:34:33 |
|        8 | MATTHEW    | JOHANSSON | 2006-02-15 04:34:33 |
|        9 | JOE        | SWANK     | 2006-02-15 04:34:33 |
|       10 | CHRISTIAN  | GABLE     | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
5 rows in set (0.00 sec)

jcho360> select * from actor limit 10,5;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|       11 | ZERO       | CAGE      | 2006-02-15 04:34:33 |
|       12 | KARL       | BERRY     | 2006-02-15 04:34:33 |
|       13 | UMA        | WOOD      | 2006-02-15 04:34:33 |
|       14 | VIVIEN     | BERGEN    | 2006-02-15 04:34:33 |
|       15 | CUBA       | OLIVIER   | 2006-02-15 04:34:33 |

+----------+------------+-----------+---------------------+

次/戻るをクリックすると、クエリにパラメーターが渡され、ページネーションが作成されます

于 2012-05-24T12:59:51.020 に答える
1
  1. COUNT クエリを実行して、データベースにあるサムの数を確認します

  2. ページ数を計算します。

    $pageCount = ceil($numberOfThumbs / $thumbsPerPage)
    
  3. ページ番号を含むページごとに 1 つのリンクを作成する

  4. オフセットを計算します。

    $offset = ($page-1)*$thumbsPerPage
    
  5. クエリに追加limitします。

    SELECT * FROM myTable LIMIT $offset, $thumbsPerPage
    

http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

于 2012-05-24T13:00:01.520 に答える
0

おそらく、PEARのPagerクラスを使用できます か?

1)モジュールをhttp://pear.php.net/package/Pager/downloadからダウンロードするか、コマンドプロンプトで次のコマンドを実行します。

c:\ pear install Pager
2)上記をPEARインクルードディレクトリにコピーします。このディレクトリは「c:\ yourphpinstallationdirectory\Pear」であることが望ましいです。

3)実際のコードを見てみましょう-

require_once'Pager / Pager.php';
/*データベース接続コードをバイパスします...*/
$ sqlQuery = "SOME SQL QUERY";
$ result = mysql_query($ sqlQuery);
$ totalRows = mysql_num_rows($ result);

$ pager_options = array(
'モード'=>'スライディング'、
'perPage' => 10
'デルタ'=>4、
'totalItems' => $ totalRows、
);
$ pager = Pager :: factory($ pager_options);
エコー$pager->リンク;
于 2012-05-24T12:48:48.830 に答える
0

SQL のLIMIT句を使用して、クエリから返されるレコードの数を制限できます。次に、ページごとに LIMIT のオフセット パラメータを増やします。

PHP では、ページ リンクを生成し、どのページが要求されているかを PHP に伝えるクエリ文字列を追加する必要があります。この値にページあたりのレコード数を掛けると、LIMIT 句のオフセット値が得られます。

MySQL クエリから出力される結果の数を LIMIT することの欠点は、PHP で生成する必要があるページ リンクの数を計算できるように、レコードの総数を取得するために LIMITなしでクエリを実行する必要があることです。

ページ リンクをどのようにフォーマットするかを検討する必要があります。単純な前|次のリンクが必要ですか、それともより複雑な最初|前|n|n|n|n|次|最後が必要ですか。ユーザーの観点からは、最初/最後のページと特定のページ番号にスキップできることは便利だと常に感じていますが、それは本当に必要なものに依存します.

おそらく、これをすべて自動的に行う拡張機能/クラスが存在しますが、SQL クエリの作成に関しては、私は独自の方法をとっています。

于 2012-05-24T12:58:28.353 に答える