我的php代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <title>网络留言板</title>
</head>
<body>
        <?php
                //error_reporting(E_ALL & ~E_NOTICE);
        function write_message($file_name, $message)
        {
                $fp = fopen($file_name, "a");  //以追加模式打开文件
                if(flock($fp, LOCK_EX))
                {
                        fwrite($fp, $message);
                        flock($fp, LOCK_UN);
                }
                else
                {
                        echo "不能锁定文件<br>";
                }
                fclose($fp);   //关闭文件资源
        }//自定义一个遍历读取文件的函数
        function read_message($file_name)
        {
                $fp = fopen($file_name, "r");  //以只读模式打开文件
                flock($fp, LOCK_SH);
                $buffer = "";                while(!feof($fp))
                {
                        $buffer .= fread($fp, 1024);
                }                $data = explode("<|>", $buffer);
                unset($data[count($data)-1]);
                foreach($data as $line)
                {
                        $arr = explode("||", $line);
                        list($user_name, $title, $message) = $arr;
                        if($user_name != "" && $title != "" && $message != "")
                        {
                                echo $user_name.'说   ';
                                echo "     ".$title.'    ';
                                echo $message."<hr />";
                        }
                }                flock($fp, LOCK_UN);
                fclose($fp);
        }
                
//声明一个变量保存文件,在这个文件中保存留言信息
        $file_name = "text_date.txt";
        //判断用户是否提交按钮
        if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['user_name']) && !empty($_POST['title']) && !empty($_POST['mess']))
        {
                $message = $_POST['user_name']."||".$_POST['title']."||".$_POST['mess']."<|>";
                write_message($file_name, $message);
        }        if (file_exists($file_name))
        {
                read_message($file_name);
        }        
?>        
        <!--以下是用户输入表单-->
        <form action="" method="POST">
                用户名:<input type="text" size="10" name="user_name"><br>
                标&nbsp;&nbsp;题:<input type="text" size="30" name="title"><br>
                <textarea name="mess" rows="5" cols="40">请在这里留言...</textarea><br>
                <input type="submit" name="sub" value="留言">
        </form>        
</body>
</html>
主界面如下:添加了一条数据以后:
 
之后我不点击留言,直接按F5刷新,并没有POST,却在刷新后出现了相同的数据。如下图:
 
真的不明白啊,求解答啊……
php post 刷新

解决方案 »

  1.   

           if (file_exists($file_name))
            {
                    read_message($file_name);
            }        
    只要 $file_name 指向的文件存在就输出
    并没有其他方式控制不输出
      

  2.   

    可在读的同时,却向 text_date.txt文件中写数据。当你留言后,不点留言按钮,就是每刷新一次,就会向文件中写入刚才你留言的数据,然后再输出。
      

  3.   

    表单提交后用header做一个重定向比较好。
      

  4.   

    用的是google浏览器,
    下面是我的一个小测试,提交之后,刷新就不会出现先前的情况。
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>网络留言板</title>
    </head>
    <body>
    <?php
    //error_reporting(E_ALL & ~E_NOTICE);
    function write_message($message)
    {
    echo $message;
    }
    //判断用户是否提交按钮
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['user_name']) && !empty($_POST['title']) && !empty($_POST['mess']))
    {
    $message = $_POST['user_name']."||".$_POST['title']."||".$_POST['mess']."<|>";
    write_message($message);
    }
    ?>
    <!--以下是用户输入表单-->
    <form action="" method="POST">
    用户名:<input type="text" size="10" name="user_name"><br>
    标&nbsp;&nbsp;题:<input type="text" size="30" name="title"><br>
    <textarea name="mess" rows="5" cols="40">请在这里留言...</textarea><br>
    <input type="submit" name="sub" value="留言">
    </form>
    </body>
    </html>
      

  5.   

    你这2段代码 提交后再刷新页面,都是会重复提交的!!
    只不过第2段代码你没有将数据写入文件,所以你看到的都是第1次提交的数据!!获取数据后可以跳转一下!function write_message($message)
    {
    echo $message;
    echo "<script>location.href='';</script>";
    exit;
    }