【问题标题】:PHP- Prevent page from loading more than once per requestPHP-防止页面在每个请求中多次加载
【发布时间】:2014-10-02 22:42:13
【问题描述】:

在我的脚本中,我向 mysql 中插入了一些数据:

$query = "INSERT INTO recent_queries (`type`, `fetched`, `expires`) VALUES ('$type', '$fetched', '$expires')";
$mysqli->query($query);

它工作正常。一个新行被添加到数据库中。每次我刷新页面时,都会添加一行。但是,如果我复制 URL,打开一个新选项卡,将 URL 粘贴到地址栏中并转到该页面,则会添加两行新行。

有时我注意到为一页加载添加了三到四行,但很难确定何时会发生这种情况。随着新选项卡的打开,它总是插入两个新行,因此很容易确定。

为什么页面可能会被多次加载,我该如何防止这种情况发生?

【问题讨论】:

  • 似乎您可能没有使用条件语句或使用标头进行重定向(成功后),以避免不必要的代码执行。
  • 另外,听起来您正在使用 GET 方法。您可以将受影响的列设置为UNIQUE - 显示更多代码;很难给出明确的答案。

标签: php


【解决方案1】:

任何时候 HTTP 请求更改服务器上的信息时,它都应该是 POST、PUT 或 DELETE(通常是 POST)。这通常是避免这个问题的方法。

您可能还想研究 PDO 以避免 SQL 注入攻击。

【讨论】:

    【解决方案2】:

    通常使用 isset($_POST) 来避免这种情况,你也可以尝试创建一个变量

    $affectedRows = $mysqli->affected_rows;
    

    将值存储在会话变量或其他东西中,或者另一个很长的方法是创建一个临时 txt 文件并在每次插入之前检查 file_exists 是否存在。 if($affectedRows > 0 )

     {
     //Do what you want to do
     }else
    
     {
            Reinsert the Data
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多