亲爱的朋友们,您好,
我的目标是在使用SQL_CALC_FOUND_ROWS和FOUND_ROWS时对我的数据库条目进行分页,因为我还有一个搜索功能
搜索结果在那里,我无法通过它们进行分页。
可能我的代码在这里对PHP专业人员来说是一团糟,请不要担心评论。任何帮助是极大的赞赏。我刚刚开始使用PHP,我也非常积极地成为Pro的一天。
为了使分页工作,我必须做什么,这样我才能在页面上有搜索功能的同时分页?
详情:
检查页面
获得搜索
搜索表单提交到同一页面
分页和搜索是为了统一工作
与SQL_CALC_FOUND_ROWS一起使用LIMIT
LIKE过滤搜索结果
准备好的陈述
while循环显示PDO fetch
FOUND_ROWS获取第一次查询的结果
- >结果是一个整数
最后一页是通过划分
来计算的
整数通过限制
使用if语句
连接
try {
$conn = new PDO($server, $user, $pass);
$conn -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// echo "success";
} catch (PDOException $e) {
echo "ERROR: " . $e -> getMessage();
}
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);
索引
if (!isset($_GET['page'])) { $page = 1;
} else { $page = $_GET['page']; }
if ($page < 1) { $page = 1;
} elseif ($page > $last_page) {
$page = $last_page; }
$search = $_GET['search'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="GET">
<input type="text" name="search" value="<?php $search ?>">
<input type="submit" value="search">
</form</body>
</html>
<?php
$start = 0;
$limit = 3;
$query = "
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_articles
WHERE
(art_headline LIKE '%{$search}%')
OR
(art_content LIKE '%{$search}%')
LIMIT $start, $limit
";
$stmt = $conn -> prepare($query);
$stmt -> execute();
while ($res = $stmt -> fetch(PDO::FETCH_ASSOC)) {
echo '<h1>'.$res['art_headline'].'</h1>'."\n";
echo '<p>'.$res['art_content'].'</p>';
echo '<b>'.$res['art_author'].'</b>'."\n";
echo '<span>'.date("d.m.Y", strtotime($res['art_datetime'])).'</span>'."\n\n";
echo '<b>'.$res['art_id'].'</b>'."\n";
}
$query = "
SELECT FOUND_ROWS() AS num FROM tbl_articles
";
$stmt = $conn -> prepare($query);
$stmt -> execute();
$max = $stmt -> fetch(PDO::FETCH_ASSOC);
var_dump($max[num]);
$total_pages = $max[num];
// $stmt = $conn -> query($query) -> fetchColumn();
$last_page = ceil($total_pages / $limit);
// loop through pages
echo "<div><nav>";
for ($i = 1; $i <= $last_page; $i++) {
if (
($i == 1)
||
($i == $last_page)
||
(
($i >= ($page - 2))
&&
($i <= ($page + 2))
)
) {
if ($last_i != ($i - 1)) {
$out .= " ... ";
}
if ($page == $i) { $out .= "["; }
$out .= "<a href=\"?page=$i&search=$search\">$i</a>";
if ($page == $i) { $out .= "] "; }
$out .= " ";
$last_i = $i;
$prev = $page - 1;
$prev_link = "<a href=\"?page=$prev&search=$search\">back</a>\n";
$next = $page + 1;
$next_link = "<a href=\"?page=$next&search=$search\">next</a>\n";
}
}
echo $prev_link;
echo $out;
echo $next_link;
echo "</nav></div>";
?>
PHP初学者非常感谢任何帮助。
答案 0 :(得分:1)
我们走了:
修复搜索结果显示我必须插入
if ($_GET['page'] > 1) {
$start = ($_GET['page'] - 1) * $limit;
}
$ start和$ limit变量之间的和第一个$ query
修复我刚刚插入的分页:
$page = $_GET['page'];
在脚本之上。