You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

每次点击后赋值不同PHP值:修改Cookie后SQL查询结果未更新如何解决

问题核心原因

  1. PHP属于服务端语言,相关代码仅会在页面首次加载/刷新请求服务端时执行,你通过JS修改浏览器本地Cookie的操作,并没有触发页面重新向服务端发起请求,PHP不会重新执行SQL查询,因此前端渲染的结果不会更新。
  2. 你设置Cookie的代码存在格式问题:gautasId = 中间的空格会导致最终生成的Cookie键名自带前导空格,PHP中$_COOKIE['gautasId']无法匹配到该Cookie,只能匹配到$_COOKIE[' gautasId'],也会导致取值异常。
  3. 如果设置Cookie的页面路径和PHP查询页面路径不一致,默认Cookie仅在当前路径下生效,也会导致PHP读取不到正确的Cookie值。
  4. 直接将Cookie值拼接进SQL语句,存在严重的SQL注入漏洞,极易被攻击拖库。

解决方法

方案1:修改Cookie后刷新页面(实现成本最低)

修改JS的setValue方法,修复Cookie格式、添加全局生效路径,修改完成后主动刷新页面触发PHP重新执行查询:

function setValue(id) {
  // 去掉键值中间的空格,添加path=/保证全站路径都能读取到该Cookie
  document.cookie = "gautasId=" + id + "; path=/";
  // 刷新页面触发服务端重新渲染
  location.reload();
}

方案2:AJAX异步更新(无刷新,用户体验更好)

如果不想刷新页面,可以在修改Cookie后,发起AJAX请求到后端接口拉取最新的查询结果,然后通过JS动态替换页面表格内容即可。

安全修复建议

务必将SQL拼接改为预处理语句,避免SQL注入风险:

if(isset($_COOKIE['gautasId'])) {
  // 预处理SQL
  $stmt = $conn->prepare("SELECT sa.id, sa.aprasymas, sa.poreikiai, sa.miestas, s.statusas FROM svajoniu_aprasymas sa join svajoniu_statusai s on s.id = sa.statusas where sa.senolio_id = ?");
  // 绑定参数,i代表参数为整数类型
  $stmt->bind_param("i", $_COOKIE['gautasId']);
  $stmt->execute();
  $wishes = $stmt->get_result();
}

内容的提问来源于stack exchange,提问作者user122222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:27:04