用户单击下一个分页页面或页面刷新后如何保存复选框状态并将值发布到页面?

Posted

技术标签:

【中文标题】用户单击下一个分页页面或页面刷新后如何保存复选框状态并将值发布到页面?【英文标题】:How to save checkbox state and post values to page after user clicks next pagination page or on page refresh? 【发布时间】:2015-06-01 13:36:43 【问题描述】:

在页面刷新后保存选中复选框的状态并发布这些复选框的值的最佳方法是什么?在这种情况下,我有多个复选框来过滤来自 mysql 数据库的结果。选中一个框后,它会更新我的查询并显示结果。我遇到的问题是我现在正在添加分页。当用户单击以转到下一页结果时,选中的复选框取消选中,并且 php 没有读取任何已发布的内容,并且查询运行时没有包含在查询中的复选框的值。

即使在页面重新加载或用户单击转到下一组分页结果后,如何保存选中的复选框并将这些值发布到我的查询中?

这里是html表单:

<form id="form" method="post" action="">

<input type="checkbox" name="2kandunder" id="2kandunder" onchange="$('#form').submit();" class="checkbox" id="2kandunder" <?=(isset($_POST['2kandunder'])?' checked':'')?>/>

<input type="checkbox" name="2kto4k" id="2kandunder" class="checkbox" onchange="$('#form').submit();" <?=(isset($_POST['2kto4k'])?' checked':'')?>/>   

<input type="checkbox" name="4kandup" id="4kandup" class="checkbox" onchange="$('#form').submit();" <?=(isset($_POST['4kandup'])?' checked':'')?>/> 

</form>

PHP 将复选框值发布到字符串中,然后放入查询中以过滤结果。

<?php
if (isset($_POST["2kandunder"])) 
$arguments[] = "AND `2kandunder` = 'yes'";

if (isset($_POST["2kto4k"])) 
$arguments[] = "AND `2kto4k` = 'yes'";

if (isset($_POST["4kandup"])) 
$arguments[] = "AND 4kandup = 'yes'";

if(!empty($arguments)) 
$str = implode($arguments);

?>

是否可以为此使用会话?

【问题讨论】:

试试这个:***.com/questions/3313595/… @makjal 我玩过那个例子,但对 javascript 或 jquery 太陌生了,我无法让它工作。也无法理解使用此方法如何在每次重新加载页面或用户单击下一个分页页面时发布选中的复选框? @MujahedAKAS 这是我发布的一个老问题,但从未真正解决。 ***.com/questions/28709000/… 我使用这个 javascript 来保持在页面重新加载时选中复选框的状态,但我不知道如何在每次页面重新加载时将此代码发布到我的 php 脚本中? @bg2982,现在可以工作了吗? 【参考方案1】:

是的,您可以通过会话来完成,在您的 php 脚本中执行此操作

if (isset($_POST["2kandunder"]))           
        
           $_SESSION["kandunder"]=TRUE;
        

并在您的 html 页面中在 submit(); 之后插入一个 php 脚本

<?php
     if (isset($_SESSION["kandunder"]) && ($_SESSION["kandunder"]))
     
       echo 'checked';
     
 ?>

不要忘记在两个页面上启动会话,并在工作完成后销毁/取消设置会话。并对剩余的 2 个复选框应用相同的逻辑。

【讨论】:

感谢您的示例。我有点让它工作并看到它背后的逻辑。现在有2个问题。首先,进入下一个分页页面后复选框不会保持选中状态。这可能与这种方法有关吗?此外,一旦单击复选框,因为它存储在会话中,它将始终包含在查询中。因此,例如,如果用户想取消选中一个框,他们有没有办法通过取消选中该框来杀死该会话变量?首先,我需要先检查该框,然后再进行其他操作? 告诉我一件事,用户是否需要在每次选中/取消选中复选框时点击提交按钮? 不,没有提交按钮 那你需要通过AJAX,通过onchange()事件来实现。 感谢您的帮助。我刚刚在评论中标记了您,并带有指向我发布的旧问题的链接。我能够让该脚本保存复选框状态,但我无法弄清楚如何将其发布到创建要包含到我的查询中的字符串的 php 脚本中。也许你可以帮忙?

以上是关于用户单击下一个分页页面或页面刷新后如何保存复选框状态并将值发布到页面?的主要内容,如果未能解决你的问题,请参考以下文章

单击保存按钮后或以固定时间间隔如何自动刷新交互式网格?

如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?

Bootstrap-vue 分页导航不像教程中那样工作(单击页面时刷新)

单击锚点后如何刷新页面并加载到顶部,忽略锚点并重置回顶部?

页面刷新后保留选择复选标记

在PHP中怎么实现新增数据,刷新表格,而不刷新整个页面。