【问题标题】:Duplicate submit during the reload of a php page在重新加载php页面期间重复提交
【发布时间】:2016-11-21 00:00:17
【问题描述】:

我是 php 的新手,我正在尝试编写一个迷你聊天网络应用程序。这是我的代码:用于连接数据库的页面正在检索所有信息,这些信息已在之前发布。

 <?php
     try{
    $bdd = new PDO('mysql:host=localhost;dbname=chat', 'root', '');
 }
 catch(Exception $e)
 {
     die('Error: ' . $e->getMessage());
 }

    $myname =$_POST["myname"];
    $message =$_POST["message"];
    $req = $bdd->prepare('INSERT INTO users(myname, message) VALUES(
       :myname,
       :message)');
       $req->execute(array(
          'myname' => $myname,
          'message' => $message,
        ));
     include('page1.php');
     $reponse = $bdd->query('SELECT myname, message FROM users ORDER
        BY ID DESC');

        while ($mydata = $reponse->fetch())
        {
           echo '<p>' .($mydata['myname']) .
           '</strong> : ' . ($mydata['message']) . '</p>';
                    }  
?>  

另一个包含我的表单的页面,用户来这里发布他们的消息

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<title>chat</title>
</head>
<body>
  <fieldset width="90">
         <marquee>my mini chat </marquee>
         <form method="post" action="enregisteur.php">

           <label  for="Identifier">  Identifier :</label>
           <input type="text" name="myname" id="myname" value="myname" placeholder="myname"/>
           <br>
           <label  for="message"> Messages  :</label>
           <textarea name="message" id="message" value="message">
           </textarea>
                       <br>
           <input type="submit" name="validate" value=" validate " size="15"/>

       </form>
        </fieldset>
</body>
</html>

这很好用,但有一个小问题我想解决:我一个用户说 user1 来输入 user1 和消息 Hello 然后点击提交。信息进入数据库并显示在网页上。如果他继续并重新加载页面而不单击提交,则相同的信息将发送到数据库并再次显示在网络播放中。那就是我们在网页上会有这样的东西

点击提交后 用户1:你好 重新加载页面后 用户1:你好 用户1:你好

每次重新加载后都会发生这种情况

欢迎任何帮助。 谢谢。

【问题讨论】:

  • 要动态重新加载一些数据而不重新加载整个页面,你应该看看“AJAX”技术:)!
  • 我认为这不是问题所在,据我所知,当有人提交“一些文本”并重新加载页面时,文本会两次发送到数据库。
  • SELECT 和 INSERT 在同一页面上,这也可能是个问题。但是是的,你是对的,这不是解决问题的方法,而是在重新加载页面时避免双重 INSERT 到数据库中的保护与当前的 OP 水平相差甚远,我认为他应该在决定什么之前看到更大的图景在这里做:)
  • 我同意@Julqas。 berry 你在开放教室做教程吗?
  • @Ivan 是的,我正在从开放教室获取我的教程

标签: php forms submit


【解决方案1】:

将您的插入和选择查询分开到不同的页面:

创建一个新页面并移动您的插入查询:

<?php
     try{
    $bdd = new PDO('mysql:host=localhost;dbname=chat', 'root', '');
 }
 catch(Exception $e)
 {
     die('Error: ' . $e->getMessage());
 }

    $myname =$_POST["myname"];
    $message =$_POST["message"];
    $req = $bdd->prepare('INSERT INTO users(myname, message) VALUES(
       :myname,
       :message)');
       $req->execute(array(
          'myname' => $myname,
          'message' => $message,
        ));


    header('location:enregisteur.php');
?>

并将您的表单操作更改为新页面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2017-06-26
    • 2017-06-23
    • 1970-01-01
    • 2013-01-05
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多