防止刷新重新加载数据而不重定向到新页面

时间:2019-05-31 07:55:45

标签: php

我有一个单页注释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>

2 个答案:

答案 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会话-非常相似的解决方案。