您好我的分页系统遇到问题,如果我从mysql表中列出结果它工作正常,但万一如果我在SQL查询中添加一些条件,如“AND”这个列“AND”其他列脚本在第一页上正确显示结果,当我选择第二页而不是显示26的结果的第二部分时,它开始一个新的分页,它显示从开始没有在查询中添加的contions的所有内容。以下是查询分页的代码:
//This gets all the other information from the form
$ciudad=$_POST['ciudad'];
$tipo=$_POST['tipo'];
$con=mysqli_connect();
// Check connection
$sql = "SELECT * FROM cursos WHERE 1";
if (!empty($ciudad)) {
$sql .= " AND ciudad = '$ciudad' ";
}
if (!empty($tipo)) {
$sql .= " AND tipo= '$tipo' ";
}
if (!$result = mysqli_query($con,$sql))
{
die("Error: " . mysqli_error($con));
}
$per_page =25;//define how many games for a page
$count = mysqli_num_rows($result);
$pages = ceil($count/$per_page);
if(!isset($_GET['page']) || $_GET['page']=="") {
$page="1";
} else {
$page=$_GET['page'];
}
$start = ($page - 1) * $per_page;
$sql = "SELECT * FROM cursos WHERE 1 LIMIT $start,$per_page";
?>
这是生成的页面链接的代码:
<?php
//Show page links
for ($i = 1; $i <= $pages; $i++)
{?>
<li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i;?>"><?php echo $i;?></a></li>
<?php
}
?>
答案 0 :(得分:1)
如果$ ciudad和$ tipo都不为空,那么执行时的查询将如下所示:
SELECT * FROM cursos WHERE 1 AND ciudad = '$ciudad' ORDER BY id DESC AND tipo= '$tipo' ORDER BY id DESC
如果我没弄错的话应该是这样的:
SELECT * FROM cursos WHERE 1 AND ciudad = '$ciudad' AND tipo= '$tipo' ORDER BY id DESC
我要做的就是改变这一点:
$sql = "SELECT * FROM cursos WHERE 1";
if (!empty($ciudad)) {
$sql .= " AND ciudad = '$ciudad' ORDER BY id DESC ";
}
if (!empty($tipo)) {
$sql .= " AND tipo= '$tipo' ORDER BY id DESC ";
}
这也是:
$sql = "SELECT * FROM cursos WHERE 1 ";
if (!empty($ciudad)) {
$sql .= "AND ciudad= '$ciudad' ";
if (!empty($tipo)) {
$sql .= "AND tipo= '$tipo' ";
}
$sql .= "ORDER BY id DESC ";
}
我还有一个链接,可以帮助你分页。
http://www.phpjabbers.com/php--mysql-select-data-and-split-on-pages-php25.html
答案 1 :(得分:1)
其中的两个问题:
$_POST
将为空)您可以在会话中存储额外的查询条件,或将其作为参数添加到“下一页链接”中,或将链接转换为提交表单(这可能是最佳选择)
<li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i.'&ciudad='.$ciudad.'&tipo='.$tipo; ?>"><?php echo $i;?></a></li>
如果您选择了链接解决方案,请不要忘记更改_POST
中的_GET
(如果第一个为空,请检查第二个,或使用$_REQUEST
)
我必须提到你的代码不是sql注入免费并且使用mysqli_prepare()可能值得花时间(用于安全性和性能)
编辑:所以,我们走了:
旁注:并不总是建议使用$_REQUEST
我注意到你在使用分页系统之前也执行了你的查询......
//This gets all the other information from the form
$ciudad=$_REQUEST['ciudad'];
$tipo=$_REQUEST['tipo'];
$con=mysqli_connect();
// Check connection
$sql = "SELECT * FROM cursos WHERE 1";
if (!empty($ciudad)) {
$sql .= " AND ciudad = '$ciudad' ";
}
if (!empty($tipo)) {
$sql .= " AND tipo= '$tipo' ";
}
// PAGINATION MOVED UP
$per_page =25;//define how many games for a page
$count = mysqli_num_rows($result);
$pages = ceil($count/$per_page);
if(empty($_GET['page'])) {
$page="1";
} else {
$page=$_GET['page'];
}
$start = ($page - 1) * $per_page;
$sql .= ' LIMIT '.$start.','.$per_page;
if (!$result = mysqli_query($con,$sql))
{
die("Error: " . mysqli_error($con));
}
//Show page links
for ($i = 1; $i <= $pages; $i++)
{?>
<li id="<?php echo $i;?>"><a href="search_cursos.php?page=<?php echo $i.'&ciudad='.$ciudad.'&tipo='.$tipo; ?>"><?php echo $i;?></a></li>
<?php
}
?>
答案 2 :(得分:0)
如果设置了城市和类型,那么您的SQL将有两个订单实例...您应该在if语句之后添加订单。