【问题标题】:PHP keeps Inserting on refreshingPHP不断插入刷新
【发布时间】:2017-02-03 18:52:44
【问题描述】:

我目前正在为一个学校项目编写一个网站,我必须在其中组织每日日程安排/报告。

以下情况: 我将以下内容插入 PHP:

$sqlinserttb = "INSERT INTO tagesberichte (`TbID`, `Tagesberichte`, `Datum`) VALUES ('DEFAULT', '".$tagesbericht."', '".$datum."');";

如果提交被点击,它会插入它。 问题是当我按 F5 或手动刷新浏览器时,页面会使用上次使用的输入再次插入它。

我错过了什么?

【问题讨论】:

  • 没有足够的代码来支持这个问题;但解决方案相当简单。
  • 你从哪里得到 $tagesbericht 和 $datum?
  • 浏览器就是这样做的,如果你刷新帖子页面,它会重新发送帖子信息。为了防止用户这样做,您可以按名称再次重定向到该页面。比如:header("location: ".$_SERVER['PHP_SELF']); exit();

标签: php html sql mysqli


【解决方案1】:

插入完成后使用header("location: <path to your self-submitting form>");,这样会显示一个新的表单,刷新不会导致再次提交。

【讨论】:

    【解决方案2】:

    根据您解释的用例,我了解到您有一个自提交表单(提交到同一页面并处理请求)。您可以将请求变量存储在php sessions 中,然后使用会话中的请求数据检查传入的请求数据(如果会话存在)。如果相同,则显示错误消息,否则执行插入,然后使用您的请求数据设置会话。

    【讨论】:

    • 是的,我是一个自我提交的表单,所以我基本上只是启动一个会话,然后将用户输入的所有 SQL 输入(例如文本区域)放入一个会话中?
    • 没有。您首先检查会话是否存在。如果存在,则将其与请求数据进行比较。如果都相同,则显示错误。否则,执行 sql 插入,然后将请求数据添加到会话中。
    【解决方案3】:

    如果您刷新 URL,所有相应的数据将被发送到用户自己发布的 php 脚本。为了处理它,你可以: 1. 使用 post 方法将结果发送到服务器。它不会排除页面刷新的情况,但大多数浏览器会询问用户“你真的要重新发送所有数据到服务器吗?” 2. 在 php 脚本使用您的输入继续页面后使用重定向。在这种情况下,浏览器将没有要重新发送的数据。但是,用户仍然可以返回上一页并重新发送数据。 3. 你也可以提供某种'meta http-equiv="Cache-Control" ...'变量来使页面过期

    【讨论】:

    • 您好,我已经通过邮寄方式将其发送到服务器,它确实会询问。感谢您提供有关缓存控制的提示,将对其进行调查!
    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2011-11-30
    • 2013-01-08
    • 1970-01-01
    • 2018-05-31
    • 2021-04-12
    • 2019-10-14
    • 2014-09-06
    相关资源
    最近更新 更多