phpでfwriteを使ってファイルに書き込みをしています。


webフォームから入力した文字列を受け取り、
それを
fopen
flock
fwrite
flock
fclose
という流れで、ファイルに追記(a+)しています。

ところが、「あいうえお」とフォームから送信すると、
「あいうえお」と書かれるときと、
「あいうえおあいうえおあいうえお」と、2,3連続でかかれるときがあります。
(たぶん、フォーム送信後の画面で、フォームから別の文字列を送信したときのみ発生)

試しにfwriteの付近で、書き込みされる文字列をechoしてみましたが、「あいうえお」と正しく1度分だけでした。

何故ファイル書き込み分だけ同じ文字列が、2・3連続で書かれるのかわからず困っています。

何かミスしてそうなポイントがありましたら、アドバイス頂けると助かります。

回答の条件
  • 1人3回まで
  • 登録:2007/06/07 08:25:52
  • 終了:2007/06/08 19:24:34

回答(1件)

id:penchick No.1

penchick回答回数22ベストアンサー獲得回数02007/06/07 08:54:53

ポイント60pt

単純な点ですが、送信ボタンを複数回押したりしたなどということはありませんか?それならば押された回数分、ファイルが実行されますので、echoで一度しか表示されないにもかかわらず複数の書き込みが行われるのも説明が付きます。

それと、

たぶん、フォーム送信後の画面で、フォームから別の文字列を送信したときのみ発生

の部分がよく理解できなかったのですが、「aaa」というリクエスト処理後のページにも同じフォームがあり、そこから再度「bbb」という文字列を送信した場合、「bbb」が複数回書き込まれるという認識でよろしいですか?

id:onigirin

クリックは一度しかしていませんが、この状態になってしまいます。

「aaa」とフォームで送信後の画面に、さらに同じようにフォームがあり、そこからまたリクエストを送信できるようになっています。

そこから「aaa」をリクエストしても「aaa」しか書き込まれませんが、「bbb」と違うものを送信すると「bbbbbbbbb」となって書き込まれます。

echoでは「bbb」しか表示されません。

その後に「bbb」をリクエストすると「bbb」のみになります。

気になる点といえば「GET」でフォーム送信しています。

なので、初めのリクエスト後のURLには ?q=aaa 等とついたURLになります。

2007/06/07 09:19:29
  • id:studioes
    制御構造に問題があるのでは・・・
    ソース全体が見えないと何とも
  • id:onigirin
    どうもありがとうございます。

    フォームから入力があると、
    クエリーがあるかどうかでswitchし、
    さらにその中で「フォームからの送信かどうか?」を
    フォームのhiddenから「1」等を送信してifで判別し、
    「1(フォームからの送信)」なら、ファイル書き込み関数へジャンプ。
    一応ソースはこんな感じになってます。


    switch ($query) {
    case '':
    break;
    case ($query != ""):
    if ($from_form == "1") {
    kakikomi($query);
    }
    break;
    default:
    break;
    }

    *関数は別ファイルに書いてあり、インクルードしてます。
    function kakikomi($query) {

    $word = $query . "\n";
    $pointer = fopen( "./hozon_text.php", "a+" );

    echo $word;

    flock( $pointer, LOCK_EX );
    fwrite( $pointer, $word );
    flock( $pointer, LOCK_UN );
    fclose( $pointer );
    }
  • id:onigirin
    頭が混乱してしまったので、
    一度整理して別の質問でまとめました。

    お二方、アドバイスどうもありがとうございました!!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません