如何修复来自 php 页面的评论在页面重新加载时重复发布?

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


我的代码在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"));

?>

预期输出,


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


输出越来越,


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


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


慕村225694
浏览 96回答 2
2回答

湖上湖

您可以使用PRG Pattern来避免多次提交。首先,检查请求方法是否为POST.&nbsp;如果是这样,请保存评论,然后重定向回(或您想要的任何其他页面):<?php$myfile = fopen('comment.txt', 'a');if ($_SERVER['REQUEST_METHOD'] === 'POST') {&nbsp; &nbsp; $yourname = $_POST['yourname'];&nbsp; &nbsp; $comment = $_POST['comment'];&nbsp; &nbsp; $data = $yourname . "<br>" . $comment . "<br><br>";&nbsp;&nbsp; &nbsp; fwrite($myfile, $data);&nbsp;&nbsp; &nbsp; fclose($myfile);&nbsp; &nbsp; header('Location: comment.php');&nbsp; &nbsp; die();}$myfile = fopen('comment.txt', 'r');echo fread($myfile, filesize('comment.txt'));?>

慕仙森

第一次学习PHP。对你有益。尽管也许可以更好地花时间学习 Python。无论如何,这里发生了两件事。一个是每次用户点击页面时,无论是否发送了任何信息,php 块都会执行。你想将你的 php 代码包装在一个 if 语句中,例如:if( count($_POST) ){&nbsp;$yourname = $_POST['yourname'];&nbsp;$comment = $_POST['comment'];&nbsp;$data = $yourname . "<br>" . $comment . "<br><br>";&nbsp;$myfile = fopen("comment.txt", "a");&nbsp;&nbsp;fwrite($myfile, $data);&nbsp;&nbsp;fclose($myfile);&nbsp;$myfile = fopen("comment.txt", "r");&nbsp;echo fread($myfile,filesize("comment.txt"));}你的第二个问题是,一旦你发布了一些东西,那么每次你重新加载页面(通过 F5)而不是从新会话重新加载时,你需要清除 POST 数组。有很多方法可以做到这一点,我认为最适合你的是在回声之后坚持下去:foreach( $_POST as $key=>$val ){&nbsp; &nbsp;unset( $_POST[$key] );}有关更多信息,请参见此链接 - [提交表单后取消设置发布变量
打开App,查看更多内容
随时随地看视频慕课网APP