在我的网站上获取有关PHP查询的文章,例如
$sql - ("SELECT * FROM articles WHERE showing=0");
这里最重要的是显示= 0 我会解释为什么后者。
我正在考虑添加一个复选框,它将执行以下操作: 如果用户选中复选框,则会更改显示= 1 ,如果未选中显示= 0 。
我如何才能如此 1)它会记住用户是否已点击复选框。因此,每次用户访问网站时,复选框都会打开或关闭,具体取决于用户之前的操作。 2)刷新页面以显示新结果,例如显示= 0 更改为显示= 1 ?
答案 0 :(得分:1)
这要涵盖很多方面。对于第一部分,您将向复选框附加一个“onclick”处理程序,该处理程序触发对服务器的AJAX调用并通过新的复选框状态发送。服务器端脚本使用新复选框更新数据库。
至于记住数据库,这取决于您对待用户的方式。如果已注册,请将复选框状态存储在其用户信息中。如果他们只是joe-random未注册,您将需要使用cookie。
至于你的2),我不确定你的意思。您希望复选框在用户可能已打开的所有窗口中更新吗?或者只是更改他们点击它的窗口中的复选框?
答案 1 :(得分:0)
如果您完全关心性能,那么知道文章表格有多大,以及如何编制索引至关重要。如果文章表足够小,生成网页的其他步骤将超过两个查询(您可以并行化)的成本,只需生成两个列表,放入两个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。在这种情况下,您需要将AJAX调用添加到updateArticlesList函数。
另一方面,问题1是一个完全不同的问题。我将不得不假设您有一些方法可以在生成页面时知道当前用户是谁,否则尝试谈论“用户之前做过的事情”是毫无意义的。但是,使用上面的代码,您唯一需要做的就是为divs article0和article1设置可见性的初始值,以及复选框ckart的可见性。 AJAX涉及将用户设置保存回服务器的问题。你最好的办法是给服务器添加一个URL(我有更多的Django经验,所以我的第一直觉是urls.py条目,即使我知道这不适用于PHP)这样一个帖子后面的字符串“0”或“1”会将设置保存在用户的配置文件中。在下一页服务中,如果用户的文章可见性设置为0,则可以看到div article0,折叠了article1,并且未选中ckart。如果用户的文章可见性设置为1,则折叠article0,显示article1,并检查ckart。