【发布时间】:2018-08-17 07:25:00
【问题描述】:
我正在尝试为我的搜索结果创建分页。如果我放弃搜索功能(即不包括if (isset($_POST['submit-search'])) 和LIKE %search%),我可以创建一个工作分页,但是一旦我包括这些,如下面的代码所示,当我点击时我只会得到一个空白页下一页,好像 sql 术语没有保存在内存中。
<?php
if (isset($_POST['submit-search'])) {
$results_per_page = 2;
$search = mysqli_real_escape_string($conn, $_POST['search']);
$sql = "SELECT * FROM article WHERE a_title LIKE '%$search%' OR a_text LIKE '%$search%'";
$result = mysqli_query($conn, $sql);
$queryResult = mysqli_num_rows($result);
$number_of_pages = ceil($queryResult/$results_per_page);
// determine which page number visitor is currently on
if (!isset($_GET['page'])) {
$page = 1;
} else {
$page = $_GET['page'];
}
$this_page_first_result = ($page-1)*$results_per_page;
$sql = "SELECT * FROM article WHERE a_title LIKE '%$search%' OR a_text LIKE '%$search%'LIMIT ".$this_page_first_result.",".$results_per_page." ";
$result = mysqli_query($conn, $sql);
// echoing the search results
while ($row = mysqli_fetch_assoc($result)) {
echo "<h3>".$row['title']."</h3>
<p>".$row['text']."</p>";
}
// echoing the pagination
for ($page=1;$page<=$number_of_pages;$page++) {
echo "<li><a href='search_results.php?page=".$page."'>".$page."</a></li>";
}
}
?>
html
<form action="search_results.php" method="POST">
<input type="text" name="search"placeholder="Search">
<button type="submit" name="submit-search">go</button>
</form>
【问题讨论】:
-
我想你已经说明了问题。导航到下一页时,
search值是否作为 POST 重新提交?我一直在使用 GET 进行类似的搜索。解决了这个问题并让您共享一个指向您的结果的链接,使请求可移植。如果不再次提交,那么您将需要使用会话或其他东西来保持它。 -
当您转到下一页时,您并没有发布,它是一个简单的 url,只附加了一个页面变量。那么
$search是如何定义的呢?它不会把它保存在内存中,正确的。也许将其存储在用户会话中或作为 get 参数。 -
当您说“空白页”时,您是遇到错误还是只是表格没有结果?
-
只是没有结果^
标签: php html search mysqli pagination