• 締切済み

特定部分を書き換え、他は現状維持なのは不可能?

あ い う え お ↑1.txt 1行目の い とフォームから入力された値が同じなら 4行目の え をランダムな数字を入れてその他は現状維持にしたいのですが、記述方法が分かりません。PHPに詳しい方ご教授ください。 目的:ireruで1行目と合致→3行目の え をランダムな数字に変更 <form action="a.php" method="POST"> 合致<input type="text" name="ireru" value=""><BR> <input type="submit" name="osu" value="送信"> </form> <?php $osu=htmlspecialchars($_POST['osu']); if($osu){ $ireru=htmlspecialchars($_POST['ireru']); $filef=file(1.txt);//行単位で配列に格納 if($filef[1]==$ireru){ $fp=fopen(1.txt,"w"); $random=rand(0,10);//この結果を$filef[3]に書き込む fputs($fp,?); fclose($fp); ? ? }else{ echo"違います"; exit();} ?> wで開いて特定の部分を変えて、残りは現状維持で書き込むというのは そもそも不可能なんでしょうか・・・wは一度ファイルの中身を空にしますし。rで読み込んでどこかに溜めて?wで一気に書き込みなどでしょうか。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>え をランダムな数字を入れてその他は現状維持にしたい file()関数で全データを読んでいるのですから、 3番目の配列データを書き換えて、頭っから書きなおしてしまえば よいでしょう。 $fp=fopen("1.txt","w"); foreach($filef as $val) fwrite($fp,$val); fclose($fp); ちなみに・・・ if($osu) としていますが、フロー的になにをやりたいのかあまりわかりません。 これでは送信ボタンを押した場合・・・しかチェックしてませんね? $filef=file(1.txt) コーテーションで括った方がよいのでは? if($filef[1]==$ireru) fileで読んだ配列にはケツに改行マークが付加されています。 それを処理しないと一致することはありません。 もちろん書きこみの際にも改行マークを気にした書き方が必要です。 exit()・・・よほどのことがないかぎりexitでぬけるのは さけたほうがよいでしょう。 そのた、意味不明な行がいくつかあります。 質問前にフローをもう少しよく見なおしてください。

bhdkgo
質問者

お礼

ありがとうございます、参考にさせていただきます。

noname#26650
noname#26650
回答No.1

本番用のファイルをA、作業用のファイルをBとします。 Aを読み込み用、Bを書き込み用でオープンします。 Aを行単位で読み、「特定の部分」でなければ、その行をそのまま Bに書き込みます。 読み取ったAの内容が「特定の部分」に該当すれば、仕様に従って 編集した行の内容をBに書き込みます。 BをAにコピーします。 最後に、Bを削除します。 こんな流れになるのではないでしょうか。

bhdkgo
質問者

お礼

ありがとうございます、参考にさせていただきます。

関連するQ&A

専門家に質問してみよう