【发布时间】:2017-01-30 19:55:55
【问题描述】:
对不起,如果这是一个愚蠢的问题,但我在这方面还是个新手,并且在不断尝试和错误中学习。
我有以下分页脚本,它确实可以工作,但是当我单击“下一页”时,它不会在下一页显示最后 2 个产品。它只是停留在原始 3 的第一页。
- 数据库记录总数 5
-
限制设置为每页 3 个(用于测试目的)
<?php $dbhost = '*******'; $dbuser = '*******'; $dbpass = '*******'; $rec_limit = 3; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } mysql_select_db('********'); /* Get total number of records */ $sql = "SELECT count(id) FROM products "; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } $row = mysql_fetch_array($retval, MYSQL_NUM ); $rec_count = $row[0]; if( isset($_GET{'page'} ) ) { $page = $_GET{'page'} + 1; $offset = $rec_limit * $page ; }else { $page = 0; $offset = 0; } $left_rec = $rec_count - ($page * $rec_limit); $sql = "SELECT id, name, description, price ". "FROM products ". "LIMIT $offset, $rec_limit"; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product :{$row['name']} <br> ". "Description : {$row['description']} <br> ". "Price : {$row['price']} <br> ". "--------------------------------<br>"; } if( $page > 0 ) { $last = $page - 2; echo "<a href = \"$_PHP_SELF?page = $last\">Previous Page</a> |"; echo "<a href = \"$_PHP_SELF?page = $page\">Next Page</a>"; }else if( $page == 0 ) { echo "<a href = \"$_PHP_SELF?page = $page\">Next Page</a>"; }else if( $left_rec < $rec_limit ) { $last = $page - 2; echo "<a href = \"$_PHP_SELF?page = $last\">Last Page</a>"; } mysql_close($conn); ?>
【问题讨论】:
-
(1) MySQL 语法说:
LIMIT第一和OFFSET第二。查看程序中使用的变量,它们的位置似乎互换了。 (2)$offset在新页面时似乎没有改变。 (3) 逻辑正确后,请考虑立即切换到mysqli_或PDO准备好的查询,以编写不易受到SQL 注入攻击的脚本。
标签: php mysql pagination