【发布时间】:2020-08-12 19:23:05
【问题描述】:
我想显示数据库中的一些产品,并使用分页和复选框进行过滤。我的分页工作正常。当我单击复选框并按“提交”时,我确实会在第一页上得到过滤结果。但是,当我移至第二页或任何其他页面时,复选框会自动变为未选中状态,并且过滤会丢失。 这是我的 HTML 代码:
<form action="" method="get">
<input type="checkbox" name="brand[]" value="iPhone">iPhone<br>
<input type="checkbox" name="brand[]" value="iPad">iPad<br>
<input type="checkbox" name="brand[]" value="Samsung">Samsung<br>
<input type="checkbox" name="brand[]" value="Huawei">Huawei<br>
<input type="submit" name="submit" value="Submit">
</form>
<?php include 'display_products.php';?>
我的分页是这样的:
for ($page=1;$page<=$number_of_pages;$page++) {
if ($page == $page_active) {
echo '<a class="page-number this-active" href="index.php?page=' . $page . '">' . $page . '</a> ';
} else {
echo '<a class="page-number" href="index.php?page=' . $page . '">' . $page . '</a> ';
}
}
为了应用过滤,我使用了 IF 语句:
if (isset($_GET['brand'])) {
$filter = implode('","',$_GET['brand']);
$sql='SELECT * FROM products WHERE brand IN ("' . $filter . '") LIMIT ' . $this_page_first_result . ',' . $results_per_page;
$result = mysqli_query($conn, $sql);
while($row = $result->fetch_assoc()) {
echo '<div><h3>' . $row['title'] . '</h3><img src="' . $row['image'] . '"<h4>' . $row['price']. '</h4></div>';
}
} //else display all products from the table of the database
我假设当我转到下一页时,我的复选框未被选中,这个 $_GET['brand'] 变为空并且“else”语句被激活。我试图为这个问题找到解决方案,但其中一些没有效果,有些对我来说太难理解(我是初学者)。您能否简单地解释一下如何保持复选框处于选中状态以及如何在所有页面中保持过滤?我看到了诸如“使用会话”或“将数据保留在 url”之类的想法,但我不知道如何实现它。因此,如果您更具体,我将非常感激。非常感谢!
【问题讨论】:
-
您能否分享更多代码,包括您的分页..
-
您应该将用户过滤选项存储在 $_SESSION 中并在每个帖子中更新它们
-
您的 SQL 查询对 SQL 注入开放,最好修复它。分页的代码在哪里?为什么不将所有复选框的 ID 添加到分页 URL 中?
-
我已经添加了我的分页代码,谢谢
-
现在我正在学习如何进行过滤和分页。达到目标后,我肯定会进行 SQL 注入。关于添加到 URL 的 ID,恐怕我不知道它是如何工作的。如果你能多说一点,那就太好了
标签: php database checkbox pagination filtering