>백엔드 개발 >PHP 튜토리얼 >php 刷新后 并没有POST 却输出数据

php 刷新后 并没有POST 却输出数据

WBOY
WBOY원래의
2016-06-23 14:26:50100404검색

php post 刷新

我的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 "不能锁定文件
";
                }
                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."
";
                        }
                }

                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);
        }        
?>        
        
        

                用户名:

                标  题:

                

                
        
        


主界面如下:

添加了一条数据以后:
 
之后我不点击留言,直接按F5刷新,并没有POST,却在刷新后出现了相同的数据。如下图:
 
真的不明白啊,求解答啊……

回复讨论(解决方案)

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

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

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

刷新表单返回页相当于重新提交!
你用的是什么浏览器?刷新表单返回页都没有提示的吗?

用的是google浏览器,
下面是我的一个小测试,提交之后,刷新就不会出现先前的情况。


 
网络留言板


//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);
}
?>


用户名:

标  题:






你这2段代码 提交后再刷新页面,都是会重复提交的!!
只不过第2段代码你没有将数据写入文件,所以你看到的都是第1次提交的数据!!

获取数据后可以跳转一下!

function write_message($message){echo $message;echo "<script>location.href='';</script>";exit;}

提交后做个跳转吧,没做跳转,一直停留在提交后那里,只要你刷新,数据就会重复提交。

太感谢你们了,我明白了……真心谢谢大伙……

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.