为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2023-11-13 14:36:52
你好,我正在尝试仅使用 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"));?>预期输出,当用户输入姓名和评论并提交时,必须发表评论。(重新加载时不应再次重复上次发布的评论)输出正在得到,当用户输入名称和评论并提交时,它会发布评论。但是,当重新加载/刷新该页面时,它会再次发布最后一条评论。如果再次重新加载,再次发布最后的评论。每次页面重新加载时都会重复。请帮助我修复我的代码。这会有很大帮助。谢谢。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以使用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'));

?>


查看完整回答
反对 回复 2023-11-13
?
忽然笑

TA贡献1806条经验 获得超5个赞

第一次学习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] );

}


查看完整回答
反对 回复 2023-11-13
  • 2 回答
  • 0 关注
  • 221 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信