我的搜索有一个简单的分页脚本,但我遇到了一些麻烦。
当我更改页面时,查询返回初始定义。 类似的东西:
定义:Select * from a;
搜索:Select * from a where a.id = 1;
然后当我转到第二页时,查询就是:Select * from a;
再次。
代码:我有一个表单,其中包含一些搜索字段,然后是脚本:
$sqlCount_pre = "SELECT COUNT('*') FROM a ";
$sqlCount_pre .= " INNER JOIN b ON a.id = b.id ";
if( sizeof( $where ) ){
$sqlCount_pre .= ' WHERE '.implode( ' AND ',$where );
}
$max = 2;
$sqlCount = mysql_query($sqlCount_pre);
$sqlResult = ceil(mysql_result($sqlCount, 0) / $max);
$pg = (isset($_GET["pg"])) ? (int)$_GET["pg"] : 1 ;
$start = ($pg - 1) * $max;
$sqlQuery = "SELECT a.* FROM a ";
$sqlQuery .= " INNER JOIN b ON a.id = b.id ";
if( sizeof( $where ) ){
$sqlQuery .= ' WHERE '.implode( ' AND ',$where );
$sqlQuery .= " LIMIT $start, $max";
}else{
$sqlQuery .= " LIMIT $start, $max";
}
$sql = mysql_query($sqlQuery) or die(mysql_error());
然后我在页面中显示结果。 之后我把页面链接,如下代码所示:
<?php
if($sqlResult > 1 && $pg<= $sqlResult){
for($i=1; $i<=$sqlResult; $i++){
echo "<a href='?pg=$i'>$i</a> ";
}
}
?>
此代码中是否有错误或缺失?
答案 0 :(得分:0)
is_int()doc是here
$pg = (isset($_GET["pg"]) && is_int($_GET["pg"])) ? (int)$_GET["pg"] : 1 ;
当然,没有理由(int)...因为我们已经将$ _GET [“pg”]建立为int,所以类型转换没有实际意义。
$pg = (isset($_GET["pg"]) && is_int($_GET["pg"]) && $_GET["pg"] > 0) ? $_GET["pg"] : 1 ;
如果
,则返回1$_GET["pg"]
返回一串数字,如“42”。对于替代和is_numeric以及两者的描述和比较,请查看此article。
如果GET返回一个字符串
pg_escape_string($_GET["pg"])
pg_escape_string doc
回到原来的问题。更改页面时,不会执行限制。因此,不设置偏移量和最大值。看一下你点击第二页时执行的查询。你正确计算偏移量了吗?
你只是在
中指定$ pg echo "<a href='?pg=$i'>$i</a> ";
你必须输入搜索词以将其传递给$ where数组。如果不这样做,计数将为0,这就是内爆不会发生的原因。
多个变量here
答案 1 :(得分:0)
将搜索表单与分页结合使用时,需要将搜索参数嵌入到分页链接中。
<?php
if($sqlResult > 1 && $pg<= $sqlResult){
$query = $_GET;
for($i=1; $i<=$sqlResult; $i++){
$query['pg'] = $i;
echo "<a href='?" . http_build_query($query) ."'>$i</a> ";
}
}
?>
上面的代码会将当前查询字符串中的所有内容都包含在内,并在构建分页链接时添加适用的pg
属性。
- 编辑 -
将POST搜索表单与分页相结合有点奇怪。你可以做几件事:
使用javascript填充隐藏的&#34;页面&#34;单击其中一个分页链接时表单中的字段,然后重新提交表单,例如:
$('.pagination-link').on('click', function() {
$('#page').val($(this).html()); //where you have a hidden field #page
$('$searchform').submit();
});
或强>
将表单方法更改为GET,并使用我上面发布的示例