【问题标题】:How to use Check box to change MySql query in real time?如何使用复选框实时更改 MySql 查询?
【发布时间】:2011-12-17 22:30:45
【问题描述】:

在我的网站上获取带有 PHP 查询的文章,例如

$sql - ("SELECT * FROM articles WHERE showing=0");

这里最重要的是showing=0我会在后面解释为什么。

我正在考虑添加一个 复选框,它将执行以下操作: 如果用户选中复选框,它将更改 showing=1,如果未选中 showing=0

我如何做到1)它会记住用户是否点击了复选框。因此,每次用户访问网站时,复选框的开启或关闭取决于用户之前的操作。 2) 刷新页面以显示新结果,例如,如果 showing=0 更改为 showing=1

【问题讨论】:

    标签: php mysql ajax checkbox


    【解决方案1】:

    要涵盖的内容很多。对于第一部分,您需要将“onclick”处理程序附加到复选框,它会触发对服务器的 AJAX 调用并发送新的复选框状态。服务器端脚本使用新复选框更新数据库。

    至于记住数据库,这取决于您如何对待用户。如果他们已注册,请将复选框状态存储在其用户信息中的某处。如果它们只是 joe-random 未注册的,则需要使用 cookie。

    至于您的 2),我不确定您的意思。您希望复选框在用户可能打开的所有窗口中更新吗?或者只是更改他们点击的窗口中的复选框?

    【讨论】:

    • 不不,第二个是关于根据复选框的状态显示来自数据库的不同信息。
    【解决方案2】:

    如果您完全关心性能,那么了解articles 表的大小以及它是如何编入索引的 非常重要。如果文章表足够小以至于生成网页的其他步骤超过了两个查询的成本(您可以并行化),只需生成两个列表,放入两个 div,然后编写客户端 JavaScript 以显示仅当复选框被选中或未选中时才指定 div。类似的东西

    <script type="text/javascript">
        function updateArticlesList() {
            var box = document.getElementById("ckart");
            if (box.checked) {
                document.getElementById("article0").style.visibility = "collapse";
                document.getElementById("article1").style.visibility = "visible";
            } else {
                document.getElementById("article0").style.visibility = "visible";
                document.getElementById("article1").style.visibility = "collapse";
            }
        }
    </script>
    <input id="ckart" type="checkbox" onclick="updateArticlesList()">Switch articles list</input>
    

    至少应该处理问题 2。如果文章表很大并且查询速度很慢,则必须走完全不同的路线,并且只有在用户实际单击复选框时才填写缺少的 div。在这种情况下,您需要在 updateArticlesList 函数中添加 AJAX 调用。

    另一方面,问题 1 是一个完全不同的问题。我将不得不假设您在生成页面时有某种方法可以知道当前用户是谁,否则尝试谈论“用户以前做过什么”是没有意义的。但是,使用上面的代码,您唯一需要做的就是设置 div article0 和 article1 的可见性的初始值,以及复选框 ckart 的可见性。 AJAX 涉及将用户设置保存回服务器的问题。最好的办法是向服务器添加一个 URL(我有更多的 Django 经验,所以我的第一直觉是 urls.py 条目,即使我知道这不适用于 PHP),这样字符串的回发“0”或“1”使设置保存在用户的配置文件中。在下一页服务中,如果用户的文章可见性设置为 0,则 div article0 可见,article1 折叠,ckart 未选中。如果用户的文章可见性设置为 1,则文章 0 折叠,文章 1 可见,并且勾选了 ckart。

    【讨论】:

    • 我不认为一次加载两个 div 是一个好主意,但我也不擅长 ajax,有没有办法在没有 ajax 帮助的情况下做到这一点?说页面刷新?太棒了
    猜你喜欢
    • 2011-09-19
    • 2018-07-24
    • 2011-01-23
    • 2012-11-25
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多