【问题标题】:insert data into the database once and not come several times向数据库中插入数据一次而不是多次
【发布时间】:2014-04-16 11:15:36
【问题描述】:

这就是我制作评论系统的方式,

这就是我如何使用标题“重新加载”页面,仅在将信息放入数据库时​​。

当我将信息发送到数据库并单击 f5 然后再次将其放入数据库时​​。所以就像垃圾邮件一样。

if ($stmt = $this->mysqli->prepare('INSERT INTO fms_kommentarforum (getid, brugerid, kommentar) VALUES (?, ?, ?)')) { 
$stmt->bind_param('sss', $getid, $brugerid, $kommentar);
$getid = $_GET['id']; 
$brugerid = $_SESSION["id"];
$kommentar = $_POST["beskedinfo"];
$stmt->execute();

   //reload the page again
   ob_start();
   header("Location: http://www.blabla.dk/forum/" . $_GET["id"] . "/" . $_GET["url"] . "/");
   ob_end_flush();

$stmt->close();
}

添加 url 使其看起来像这里的一些; blabla.com/forum/1/test---ae-oe-aa-aa/# 那是我将信息发送到数据库一次

我希望 # 在它出现的时候不会出现。

并且以我写的形式 action="#"

【问题讨论】:

  • 因此您想重新加载页面以发送到数据库,但特别是不要在页面重新加载时将项目发送到数据库。一些事情是不对的......

标签: php


【解决方案1】:

您可以使用 303 HTTP 状态代码将客户重定向到相同的 uri。

http://en.wikipedia.org/wiki/HTTP_303

所以客户端可以在不再次发送 post 请求的情况下按 F5。

header("HTTP/1.1 303 See Other");
header("Location: http://example/post");

【讨论】:

  • 它不起作用,即使我点击f5,它仍然在数据库中发送
  • 嗯,我想我没发现你的问题。您想在页面重新加载时删除数据库条目?对不起,我不明白你的问题。
  • 我不太明白你的意思?
【解决方案2】:

我见过的一个技巧基本上是在 GET/POST 数据中添加一个随机数,并在您进行更新时记住它们。如果您使用以前看到的随机数收到第二个更新请求,您就知道它来自F5,并跳过更新。

编辑:参见:例如:this SO questionthis web-page

【讨论】:

  • 我不太明白你的意思?
  • 我会尝试挖掘参考资料,但基本上,无论您在何处生成触发数据库更新的原始 URL(可能来自“
    ”页面),您添加一个随机(或可能递增)的数字作为表单数据元素之一。当您处理该 URL 时,您会测试以查看之前是否见过随机/递增数字。如果是这样,您知道您看到它是页面刷新的结果。如果这是您第一次看到该数字,那么您可以进行数据库更新。
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多