php 重新整理後 並沒有POST 卻輸出資料

來源:互聯網
上載者:User
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 "";exit;}

提交後做個跳轉吧,沒做跳轉,一直停留在提交後那裡,只要你重新整理,資料就會重複提交。

太感謝你們了,我明白了……真心謝謝大夥……

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.