【问题标题】:Adding to database. No repeat on refresh添加到数据库。刷新时不重复
【发布时间】:2013-11-14 16:43:00
【问题描述】:

我有这个代码:

Episode.php

    <?$feedback = new feedback;
$articles = $feedback->fetch_all();

      if (isset($_POST['name'], $_POST['post'])) {
             $cast = $_GET['id'];
             $name = $_POST['name'];
             $email = $_POST['email'];
             $post = nl2br ($_POST['post']);
             $ipaddress = $_SERVER['REMOTE_ADDR'];

if (empty($name) or empty($post)) {
             $error = 'All Fields Are Required!';
}else{
$query = $pdo->prepare('INSERT INTO comments (cast, name, email, post, ipaddress) VALUES(?, ?, ?, ?, ?)');
     $query->bindValue(1, $cast);
     $query->bindValue(2, $name);
     $query->bindValue(3, $email);
     $query->bindValue(4, $post);
     $query->bindValue(5, $ipaddress);

     $query->execute();
} }?>
<div align="center">
<strong>Give us your feedback?</strong><br /><br />

<?php if (isset($error)) { ?>
     <small style="color:#aa0000;"><?php echo $error; ?></small><br /><br />
<?php } ?>

<form action="episode.php?id=<?php echo $data['cast_id']; ?>" method="post" autocomplete="off" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Name" /> / <input type="text" name="email" placeholder="Email" /><small style="color:#aa0000;">*</small><br /><br />
<textarea rows="10" cols="50" name="post" placeholder="Comment"></textarea><br /><br />
<input type="submit" onclick="myFunction()" value="Add Comment" />
<br /><br />
<small style="color:#aa0000;">* <b>Email will not be displayed publicly</b></small><br />
</form>

</div>

包含.php

class feedback { public function fetch_all(){
    global $pdo;
      $query = $pdo->prepare("SELECT * FROM comments");
      $query->bindValue(1, $cast);
      $query->execute(); return $query->fetchAll();
              } }

此代码按预期更新到数据库。但提交后它会重新加载当前页面,如表单操作中所述。

但是当我刷新页面以查看正在添加的评论时,它要求重新提交。如果我点击提交,那么评论会再次添加。

我怎样才能阻止这种情况发生?

也许我可以隐藏评论框并显示感谢信息,但这不会阻止重复输入。

请帮忙。谢谢你。

凯夫

【问题讨论】:

  • “当我刷新页面看到正在添加的评论时”,您这样做是因为您提交表单后看不到新添加的评论吗?我怀疑您在执行 insert 之前包含了正在获取 cmets 的 include.php...
  • 嗨,艾曼。这听起来是正确的,但我该如何改变呢?
  • 在插入新的 cmets 之后获取 cmets。

标签: php mysql forms duplicates


【解决方案1】:

您需要在其中添加重定向。所以在你的 POST 块的底部添加

if(isset($_POST['name'], $_POST['post'])) {
    // Do POST stuff here

    header('Location: your/url/here');
    exit;
}

这会向浏览器发送一个 302 重定向,并且会干净地加载页面。由于这是一个 GET 操作,因此也不存在重新加载问题。

【讨论】:

  • 继续尝试添加此功能,但它一直发回错误。能否请您提供一个放置位置的样本?谢谢。
  • 您的错误可能会说“当已经有输出时无法重定向”。确保在 header('location... 之前没有任何 HTML。
  • 这段代码 $query->execute(); header('位置:index.php');工作。谢谢。
【解决方案2】:

运行后

$query->execute();

您可以取消设置变量:

unset($name, $email, $post);

【讨论】:

  • 这不会对问题进行排序。
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多