我有一个单页注释php网页,可将注释写入文件。但是在刷新时,它会不断重新发布最新评论。如何编写代码,使其仅在按下提交按钮时才写入文件。谢谢。
<?php
/*if($_POST)*/
if(isset($_POST['submit_btn'])) {
$name = $_POST['name'];
$comment = $_POST['comment'];
$handle = fopen("comments.php", "a");
fwrite($handle, "<div><b><i>" . $name . "</b></i> update:<br>" . $comment . "<br></div><br>" );
fclose($handle);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Rolling Log</title>
<meta charset="uft-8">
</head>
<style>
body {
background-color: grey;
}
#top,#bottom {
margin: 0 auto;
width: 50%;
padding: 5px;
}
div {
border: 1px solid black;
background-color: white;
}
</style>
<body>
<div id="top">
<h1>Post a change mgmt comment</h1>
<form action="" method="POST">
Name: <br /> <input type="text" name="name"> <br />
Comment: <br /> <textarea rows="5" cols="70" name="comment"></textarea> <br /><br />
<input type="submit" name="submit_btn" value="Post comment">
</form>
</div>
<br>
<div id="bottom">
<h1>Other CM Comments</h1>
<?php include "comments.php"; ?>
</div>
</body>
</html>
答案 0 :(得分:0)
使用标题刷新功能:header("Refresh:0");
这是因为当您将请求发送到同一页面时,如果不使用标头功能强行使用,标头将不会更改(并且将保留当前请求以在文件中添加数据)。
/*if($_POST)*/
if(isset($_POST['submit_btn']))
{
$name = $_POST['name'];
$comment = $_POST['comment'];
$handle = fopen("comments.php", "a");
fwrite($handle, "<div><b><i>" . $name . "</b></i> update:<br>" . $comment . "<br></div><br>" );
fclose($handle);
header("Refresh:0");
}
答案 1 :(得分:0)
您必须记住以某种方式已经提交了该表格。您可以将该信息保存在cookie中。提交表单后,请设置一些Cookie并置于if
条件下,以检查是否按下了提交按钮,同时还要检查Cookie值:
/*if($_POST)*/
if(isset($_POST['submit_btn']) && !isset($_COOKIE['submitted']))
{
setcookie('submitted');
$name = $_POST['name'];
$comment = $_POST['comment'];
$handle = fopen("comments.php", "a");
fwrite($handle, "<div><b><i>" . $name . "</b></i> update:<br>" . $comment . "<br></div><br>" );
fclose($handle);
}else{
// Form page refreshed - do something else
}
或根据需要存储到php会话-非常相似的解决方案。