プロが教えるわが家の防犯対策術!

PHPのリロード時の処理

PHPプログラム初心者です。
掲示板のプログラムを作成しております。
以下のコードで、リロード時、自動で投稿ボタンが押されてsubmitしてしまいます。
自分で考えた解決策としては、下記のwriteDate()内で、条件を入れることです。
$_GET['personal_name'];のデータを変数に保持し、次にリロードされた時同じものが返ってきら、writeDate()内の処理をしないという方法です。
このときの変数の保存の仕方が解りません。
ご存じの方がおられましたら教えてください。

<?php
if($_SERVER["REQUEST_METHOD"]=="GET"){
writeData();
}

readData();

function readData(){
$keijban_file='keijiban.txt';
$fp=fopen($keijban_file,'rb');
if($fp){
if(flock($fp,LOCK_SH)){
while(!feof($fp)){
$buffer=fgets($fp);
print($buffer);
}
flock($fp,LOCK_UN);
}else{
print('ファイルロックに失敗しました');
}
}
fclose($fp);
}

function writeData(){ //--------ここで同じ書き込みデータがあればreturnしたい。-------
$t=$_GET['personal_name'];
$personal_name=$_GET['personal_name'];
$contents=$_GET['contents'];
$contents=nl2br($contents);
$data="<hr>\r\n";
$data=$data."<p>[投稿者:".$personal_name."]</p>";
$data=$data."[内容]";
$data=$data."<p>".$contents."</p>";
$keijban_file='keijiban.txt';
$fp=fopen($keijban_file,'ab');
if($fp){
if(flock($fp,LOCK_EX)){
if(fwrite($fp,$data)===FALSE){
print('ファイル書き込みに失敗しました');
}
flock($fp,LOCK_UN);
}else{
print('ファイルロックに失敗しました');
}
}
$data=null;
fclose($fp);
}
?>

A 回答 (1件)

前回分と今回分を比較照合する為にFORMの隠し項目として退避


するのはどうでしょうか。

function writeData(){ //--------ここで同じ書き込みデータがあればreturnしたい。-------

'比較項目が共にGETパラーメーターとして取得できたら
'比較照合する。
if (isset($_GET['personal_name']) && $_GET['personal_name'] != null) {

if (isset($_GET['hidden_name']) && $_GET['hidden_name'] != null) {

$personal_name = $_GET['personal_name'];
$hidden_name = $_GET['hidden_name'];

if ($personal_name == $hidden_name) {
return;
}
}
}

//以降省略
}


<html>
<head>
<title></title>
</head>

<body>
<form>
<input type="hidden" name="personal_name" value=<?= $_GET['personal_name'] ?>>
<input type="hidden" name="hidden_name" value=<?= $_GET['personal_name'] ?>>
<input type="submit" name="BTN_OK" value="投稿">
</form>
</body>
    • good
    • 0
この回答へのお礼

ありがとうございます。
実装できましてた。

お礼日時:2010/06/22 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!