【问题标题】:Jquery reloads mysql insert only after first hard refreshJquery仅在第一次硬刷新后重新加载mysql插入
【发布时间】: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 部分,我的意思是它在完全刷新后才起作用,而不是当我第一次进入该页面时?顺便感谢您的快速回复!

标签: php jquery mysql mobile


【解决方案1】:

这里的问题是,当你刷新浏览器 只有服务器调用,但刷新JQuery是在客户端! 您可以为此目的使用 ajax,我将演示:

在 HTML 中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script
            src="https://code.jquery.com/jquery-3.4.1.min.js"
            integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
            crossorigin="anonymous">
    </script>
    <script type="text/javascript" src="./app.js"></script>
</head>
<body>
<select name="shop-criteria" class="shop-criteria">
    <option value="">all</option>
    <option value="2">digital</option>
    <option value="3">pins</option>
    <option value="4">fysiek</option>
</select>
</body>
</html>

在 JavaScript 中的文件 app.js

$(document).ready(function(){

    $(document).on('change', '.shop-criteria', function (e) {

        let fd = new FormData();
        let tag = $(this).val();
        fd.append('tag', tag);

        $.ajax({

            url: "shop.php",
            type: "POST",
            data: fd,
            processData: false,
            contentType: false,

            complete: function (results) {

                let response = JSON.parse(results.responseText);
                my_function.call(this, response);
            }




        });
    });


    function my_function(response) {
        console.log("response", response);
    }

});

在 PHP shop.php 中

 `<?php
  $tag = $_REQUEST['tag'];

  switch($tag) {

     case 2:
        $WhereFltr = "WHERE tag='digital'";
     break;

    case 3:
       $WhereFltr = "WHERE tag='pins'";
    break;

    case 4:
       $WhereFltr = "WHERE tag='fysiek'";
    break;

    default:
       $WhereFltr = "";
    break;
   }

   $sql = "SELECT * FROM shop WHERE filter='$fltr' ORDER BY id DESC";
   $result = $conn->query($sql);`

【讨论】:

  • 我已将脚本更改为您的示例,并且运行良好。感谢您的高级解释!
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多