猿问

如何修复 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"));

?>

预期输出,


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


输出正在得到,


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


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


MM们
浏览 222回答 2
2回答

MMMHUHU

您可以使用PRG 模式来避免多次提交。首先检查请求方法是否为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'));?>

忽然笑

第一次学习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] );}
随时随地看视频慕课网APP

相关分类

Html5
我要回答