【问题标题】:How to fix comments from php page got repeatedly posting on page reload?如何修复来自 php 页面的评论在页面重新加载时重复发布?
【发布时间】:2020-07-18 22:11:20
【问题描述】:

您好,我正在尝试为仅使用 php(无数据库)的网站创建评论框,几乎成功。但是,每次重新加载页面时,cmets 都会一遍又一遍地发布。如何解决?

我在comment.php中的代码

<form action="comment.php" method="post">
<label for="name">Name:</label><br/>
<input type="text" name="yourname"><br>
<label for="name">Comment:</label> <br/>
<textarea name="comment" id="comment" cols="30" rows="10"></textarea><br/>
<input type="submit" value="submit">
</form>

<?php
$yourname = $_POST['yourname'];
$comment = $_POST['comment'];
$data = $yourname . "<br>" . $comment . "<br><br>";
$myfile = fopen("comment.txt", "a"); 
fwrite($myfile, $data); 
fclose($myfile);
$myfile = fopen("comment.txt", "r");
echo fread($myfile,filesize("comment.txt"));
?>

预期输出,

当用户输入姓名和评论并提交时,它必须发表评论。 (重新加载时不应再次重复上次发布的评论)

正在输出,

当用户输入姓名和评论并提交时,它会发布评论。但是,当重新加载/刷新该页面时,它会再次发布最后一条评论。如果再次重新加载,请再次发布最后一条评论。每次页面重新加载时都会重复。

请帮我修复我的代码。这会很有帮助。谢谢。

【问题讨论】:

    标签: php html css comments


    【解决方案1】:

    您可以使用PRG Pattern 来避免多次提交。

    首先,检查请求方法是否为POST。如果是这样,请保存评论,然后重定向回(或您想要的任何其他页面):

    <?php
    $myfile = fopen('comment.txt', 'a');
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $yourname = $_POST['yourname'];
        $comment = $_POST['comment'];
        $data = $yourname . "<br>" . $comment . "<br><br>"; 
        fwrite($myfile, $data); 
        fclose($myfile);
        header('Location: comment.php');
        die();
    }
    
    $myfile = fopen('comment.txt', 'r');
    echo fread($myfile, filesize('comment.txt'));
    ?>
    

    【讨论】:

      【解决方案2】:

      第一次学习PHP。对你有益。虽然也许花时间更好地学习 Python。无论如何,您在这里发生了两件事。

      一个是每次用户点击页面时,无论是否发送了任何信息,都会执行 php 块。您想将 php 代码包装在 if 语句中,例如:

      if( count($_POST) )
      {
       $yourname = $_POST['yourname'];
       $comment = $_POST['comment'];
       $data = $yourname . "<br>" . $comment . "<br><br>";
       $myfile = fopen("comment.txt", "a"); 
       fwrite($myfile, $data); 
       fclose($myfile);
       $myfile = fopen("comment.txt", "r");
       echo fread($myfile,filesize("comment.txt"));
      }
      

      您的第二个问题是,一旦您发布了某些内容,那么每次重新加载页面(通过 F5)而不是从新会话重新加载时,您都需要清除 POST 数组。有很多方法可以做到这一点,我认为最适合你的是在那个回声之后坚持这个:

      foreach( $_POST as $key=>$val )
      {
         unset( $_POST[$key] );
      }
      

      查看此链接了解更多信息 - [Unset post variables after form submission

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2019-12-27
        • 2023-02-24
        • 2014-03-12
        • 1970-01-01
        • 2017-07-31
        • 2017-07-07
        • 2012-02-22
        • 2019-12-20
        • 2023-03-31
        相关资源
        最近更新 更多