我想知道如何使用用户输入作为搜索参数来实现分页。我理解没有用户输入的分页基础知识,并且没有麻烦这样做,当用户输入进来时它会让我感到困惑。我不知道如何使页码链接根据搜索的内容使用正确的查询。
例如基本想法:
HTML
<input type="text" name="id" placeholder="ID">
<input type="text" name="name" placeholder="Name">
<button id="btn_search">Search</button>
<div id="search_results"></div>
JS
$("#btn_search").on('click', function() {
$.ajax({
url: 'process.php',
type: 'POST',
data: {id: $("input[name=id]").val(), name: $("input[name=name]").val()},
success: function(result) {
$("#search_results").html(result);
}
});
});
PHP
// Grab submitted search parameters and store in variable
if (isset($_POST["id"]) && !empty($_POST["id"])) {
$id = $_POST["id"];
} else {
$id = null;
}
if (isset($_POST["name"]) && !empty($_POST["name"])) {
$name = $_POST["name"];
} else {
$name = null;
}
$count_query = "SELECT COUNT(*) FROM users";
// Code here to get total row count for pagination
$query = "SELECT * FROM users WHERE id = ? AND name = ?";
$stmt = $connection->prepare($query);
$stmt->bind_param('is', $id, $name);
$stmt->execute();
// Dump as table
我认为正确的方法是这样的:
<ul class="pagination">
<li><a href="paginate.php?id=<?php echo $id; ?>&name=<?php echo $name; ?>"></a></li>
<li><a href="paginate.php?id=<?php echo $id; ?>&name=<?php echo $name; ?>"></a></li>
</ul>
然后通过for循环为页码添加一个参数。
通过一些客户端输入验证来执行此操作是否安全?我有一个有效的方法吗?
编辑
Naveed的回答很有帮助,所以我将其标记为已回答。这篇文章:https://jadendreamer.wordpress.com/2012/11/20/php-tutorial-searching-and-pagination/帮助我理解了如何做到这一点。它已经陈旧但很好地解释了一切。我最终使用标签传回了查询参数。
答案 0 :(得分:1)
您需要在表单中设置隐藏的几个变量。
每页的记录数
记录偏移
然后你需要获得页数并在HTML中生成链接
在PHP文件中:
$return['total'] = $rs->num_rows;
$return['records']=$rs;
echo json_encode($return);
<ul>
<li><a href="#2" class="pagination">2</a></li>
<li><a href="#3" class="pagination">3</a></li>
</ul>
然后在JQuery中
$('a.pagination').click(function(){
var page = $(this).attr('href').replace('#', '');
// now here you need to get data from process.php and pass the page variables or calculate the offset like page 2 seems offset 21 to 40 based on limit
});