php - 如何使用 php pdo 对搜索结果进行分页?
问题描述
我正在为搜索结果创建分页,在第一个加载页面上看起来都很好,但是当我点击分页链接时,它会显示一个白页(搜索页面但没有条目)。根本没有从我的数据中找到结果
这是 index.php 中的站点搜索框
<form action="search/" method="post">
<input type="text" name="search" placeholder="word..." required />
<input type="submit" name="submit_search" class="search-btn" value="" />
</form>
这是我的
htaccess
分页设置:
RewriteRule ^search/page/(.*)$ search.php?page=$1 [L,NC]
在浏览器上看起来不错。
这是我的搜索页面代码:
<?php
if(isset($_POST['submit_search']) && !empty($search)){
$search = htmlspecialchars(strip_tags($_POST['search']), ENT_QUOTES);
$perpage = intval("12");
$n_stmt = $pdo->prepare("SELECT * FROM posts");
$n_stmt->execute();
$total_posts = $n_stmt->rowCount();
$total_pages = ceil($total_posts/$perpage);
$page = !empty($_GET['page']) && intval($_GET['page']) ? (int) intval($_GET['page']) : intval("1");
if($page < intval("1")) $page = intval("1");
if($page > $total_pages) $page = $total_pages;
$limit = ($page - intval("1")) * $perpage;
$pages_to_show = intval("10");
$stmt = $pdo->prepare("SELECT * FROM posts WHERE title LIKE :search OR subject LIKE :search OR descriptions LIKE :search OR keywords LIKE :search ORDER BY created DESC LIMIT :limit, :perpage");
$stmt->bindValue(":search","%".$search."%", PDO::PARAM_STR);
$stmt->bindValue(":limit",$limit, PDO::PARAM_INT);
$stmt->bindValue(":perpage",$perpage, PDO::PARAM_INT);
if($stmt->execute()){
if($stmt->rowCount() > 0){
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){?>
<div class="news_box">
<a href="<?php echo htmlspecialchars($row['news_url']);?>/" title="<?php echo htmlspecialchars($row['title']);?>">
<div class="title"><h2><?php echo htmlspecialchars($row['title']);?></h2></div>
<div class="image">
<img src="images/posts/<?php echo htmlspecialchars($row['img']);?>" alt="<?php echo htmlspecialchars($row['title']);?>"/></div>
<div class="spot"><?php echo htmlspecialchars($row['subject']);?></div>
</a>
</div>
<?php
}
}
}
unset($stmt);
?>
这是我的分页部分:
<div class="pagination">
<?php if($page >1){?>
<a href="search/page/1/">First</a>
<a href="search/page/<?php echo $page - intval("1");?>">previous</a>
<?php } for($i = $page - $pages_to_show; $i < $page + $pages_to_show + 1; $i++){
if($i > 0 and $i <= $total_pages){
if($i == $page){?>
<a href="search/page/<?php echo intval($i);?>" class="active"><?php echo intval($i);?></a>
<?php }else{?>
<a href="search/page/<?php echo intval($i);?>"><?php echo $i;?></a>
<?php
}
}
?>
<?php } ?>
<?php if($page != $total_pages){?>
<a href="search/page/<?php echo $page + intval("1");?>">Next</a>
<a href="search/page/<?php echo $total_pages;?>">Last</a>
<?php } ?>
</div>
解决方案
推荐阅读
- java - 没有找到能够从类型 [java.lang.String] 转换为类型 [@Autowired @ManyToOne @JoinColumn com.papertrue.country.Country] 的转换器
- ionic-framework - 为什么离子中的WP rest API在模拟器中不起作用
- javascript - 在 Next.js 中,用户能够登陆 API 路由是否危险?
- jquery - 如何从 jquery 中的 json 格式对象填充 html 数据表
- postgresql - 为多对多关系创建唯一索引
- python - 我不能打破函数内部的 While 循环吗?
- javascript - BitBucket 管道显示 npm: command not found
- php - 引起问题后的空间。为什么?
- reset - Soft wdt Reset - ESP8266 / NodeMCU 使用步进电机
- amazon-web-services - 使用 s3 路径的子字符串进行分区