※ ChatGPTを利用し、要約された質問です(原文:ブラウザリロードでの書き込みを防ぐ)
ブラウザリロードでの書き込みを防ぐ
このQ&Aのポイント
ブラウザリロードでの書き込みを防ぐ方法について教えてください。
フォームの入力内容がブラウザリロード時に実行される問題を解決する方法を教えてください。
ブラウザリロード時に同じ内容が繰り返し書き込まれないようにするための条件分岐の方法を教えてください。
説明が上手くできないので
分かりにくくなりますが申し訳ございません。
練習で書いた構文の動作自体は問題ないようなのですが
ブラウザをリロードさせると
直前に入力した内容が実行されてしまいます。
----------------------------------------
<html>
<body>
<form action="" method="post">
<p>掲示板</p>
<p>名前:<input type="text" name="name"></p>
<p>内容:<br><textarea name="coment" cols=50 rows=4></textarea></p>
<p><input type="submit" name="submit" value="送信"></p>
</form>
<?php
error_reporting(1);
function Aa($str){
return htmlspecialchars($str, ENT_QUOTES);
}
$now = date("Y年n月j日 H:i:s");
$name = Aa($_POST["name"]);
$coment = nl2br(Aa($_POST["coment"]));
$data = "名前:$name - $now <br>\r\n内容:<br>$coment </p>\r\n";
if($_POST["submit"]){
if(empty($name) || empty($coment)){
echo "<p>未入力があります。</p>";
}else{
$fp = fopen("test.txt", "a");
flock($fp, LOCK_EX);
fputs($fp, $data);
flock($fp, LOCK_UN);
fclose($fp);
}
}
$fp = fopen("test.txt", "r");
if($fp){
if(flock($fp, LOCK_SH)){
while(!feof($fp)){
$get = fgets($fp);
echo $get;
}
}else{
echo "ファイルロック失敗";
}
fclose($fp);
}
?>
</body>
</html>
----------------------------------------
フォームに入力がない時に送信ボタンを押して
「未入力があります。」のエラーを出しておけば
その状態でブラウザのリロードボタンをおしても
ファイルに書き込み処理部分が実行されず
それ以上ファイルに書き込みはされないのですが
入力成功した場合、ブラウザをリロードさせると
直前に入力した動作内容がそのまま実行され
リロードさせるたび同じ内容が
繰り返し繰り返し書き込まれてしまいます。
条件分岐で何とかできそうなのですが
なかなか上手くいきません。
リロードで同じ処理を繰り返させないよう
なにか簡単で分かりやすい条件分岐方法がありますでしょうか?
よろしくお願いいたいます。
お礼
二重書き込みというのですか。 勉強してみます。 ありがとうございました。