0

我有一个 php/mysql 列表,我可以在其中显示很多缩略图。

我的问题是一页中显示的图像太多。我想把它分开,这样我就可以得到一些页面链接或底部的东西?

喜欢: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 进行简单的分页就是这样,学习这段代码的关键是理解:intval,LIMIT,mysql_num_rows,mysql_fetch_assoc,mysql_fetch_row,ceil,COUNT 在你学会每一个之后,代码会很容易理解,你可以开发它并添加一些您自己的改进。这个优秀网站的功劳: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;";
 }

该代码非常易于理解且非常简单。关于 prev 和 forward 页面,这是您在获得此代码后将要做的改进之一。

于 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. 每页创建一个包含页码的链接

  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 安装寻呼机
2) 将以上内容复制到您的 PEAR 包含目录,该目录最好是“c:\your php 安装目录\Pear”

3)现在看一些实际的代码 -

require_once '寻呼机/Pager.php';
/* 我们将绕过数据库连接代码... */
$sqlQuery = "一些 SQL 查询";
$result = mysql_query($sqlQuery);
$totalRows = mysql_num_rows($result);

$pager_options = 数组(
'模式' => '滑动',
'每页' => 10,
'三角洲' => 4,
'totalItems' => $totalRows,
);
$pager = Pager::factory($pager_options);
回声 $pager-> 链接;
于 2012-05-24T12:48:48.830 回答
0

您可以查看使用 SQL 的LIMIT子句来限制从查询返回的记录数。然后每页增加 LIMIT 中的 offset 参数。

在 PHP 中,您需要生成页面链接并附加一个查询字符串,该字符串告诉 PHP 正在请求哪个页面。将此值乘以每页的记录数,得到 LIMIT 子句的偏移值。

限制来自 MySQL 查询的结果数量的缺点是,您需要在没有LIMIT 的情况下运行查询来获取记录总数,以便您可以计算需要在 PHP 中生成多少页面链接。

您需要考虑如何设置页面链接的格式。您想要简单的上一个|下一个链接还是更复杂的第一个|上一个|n|n|n|n|next|last。从用户的角度来看,我总是觉得能够跳到第一页/最后一页和特定的页码很有用,但这取决于你真正需要什么。

那里可能有扩展/类可以自动为您完成这一切,但在构建 SQL 查询时我是一个自己动手的人。

于 2012-05-24T12:58:28.353 回答