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

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

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

PHP
慕村225694 2022-12-11 10:41:46
我正在尝试为仅使用 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 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

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

?>


查看完整回答
反对 回复 2022-12-11
?
慕仙森

TA贡献1827条经验 获得超7个赞

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

}

有关更多信息,请参见此链接 - [提交表单后取消设置发布变量


查看完整回答
反对 回复 2022-12-11
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

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