【发布时间】:2019-08-13 10:08:52
【问题描述】:
我正在我的移动网站中创建一个商店和消息系统,在我通过刷新浏览器刷新它之后一切正常。
我的问题是,当我刷新消息页面并转到我的商店页面时,它会在 php mysql 脚本中加载,但如果我更改商店的过滤器并使用 jquery 重新加载内容,它不会显示。如果我刷新整个页面并尝试更改商店的过滤器,那一切都会像魅力一样。
只有第一次访问页面,jquery刷新页面后才生效。
我用 jquery 尝试了多个重新加载 div 脚本,但都给出了同样的问题。我还尝试在我的脚本部分中回显测试。只有当其余部分也在工作时才会回显(因此重新加载的 div 中的所有 php 都消失了)
我使用的重新加载脚本:
$("#ShopScriptsReload").load(" #ShopScriptsReload > *");
php mysql:
$sql = "SELECT * FROM shop ORDER BY id DESC";
$result = $conn->query($sql);
我使用 cookie 来更改过滤器。因此,cookie 是用 javascript 设置的,它会转换为(小编辑:cookie 是用硬编码的变量设置的):
if (empty($_COOKIE["setFilterCookie"])){$_COOKIE["setFilterCookie"]="1";}
$fltr = $_COOKIE["setFilterCookie"];
if ((empty($fltr) or ($fltr == 1)))
{$WhereFltr = "";}
elseif ($fltr == 2)
{$WhereFltr = "WHERE tag='digitaal'";}
elseif ($fltr == 3)
{$WhereFltr = "WHERE tag='pins'";}
elseif ($fltr == 4)
{$WhereFltr = "WHERE tag='fysiek'";}
$sql = "SELECT * FROM shop WHERE filter='$fltr' ORDER BY id DESC";
$result = $conn->query($sql);
我已经尝试过以下方法:从 dom 中删除以前的页面,删除缓存,尝试删除重新加载部分并使用 GET 方法(这很有效,但这不是我想要的)。
好吧,一切正常,无需完全刷新。
提前谢谢你们 :)
【问题讨论】:
-
“我使用 cookie 来更改过滤器。所以会话是用 javascript 设置的” - cookie 不是会话。当您第一次加载该页面时,该 cookie 是否已经设置?如果不是,那么您如何期望这会起作用? 检查在 PHP 端,如果您的脚本确实收到了该 cookie 值 - 如果没有,请不要将 WHERE 子句添加到查询中……
-
顺便说一句,这当然不应该在任何地方的生产中使用,而不是像现在这样,因为它例如对 SQL 注入开放。
-
嘿,感谢您的快速回复,很抱歉我在这两种情况下都指的是 cookie。如果 WHERe 案例消失了,它仍然会做同样的事情,我不认为 cookie 是问题所在。你是什么意思对 SQL 注入开放?我对此很陌生。因为您不通过输入一些关键字进行过滤。我正在过滤带有已传递给 cookie 的设置变量的按钮。这仍然对 SQL 注入开放吗?我认为这只是来自用户的输入? cookie 在页面打开时设置。I
-
当你在客户端设置cookie时,它只会在下一个请求时对PHP可用。 “我正在过滤带有 cookie 设置变量的按钮。这仍然对 SQL 注入开放吗?” - 当然是。我可以向您的脚本发送我想要的任何随机数据,我什至不必使用任何可以称为“浏览器”的东西。
-
但是我如何防止这种情况发生(SQL 注入)?是的,我知道。但是通过刷新 div 我也刷新了该 div 中的 PHP 部分,我的意思是它在完全刷新后才起作用,而不是当我第一次进入该页面时?顺便感谢您的快速回复!