- ベストアンサー
データが消えてしまいます
サーバー上にtest.txtファイルをおいてブラウザからこのファイルの更新をしようとしているのですが、ブラウザを一回閉じてもう一度開くとtest.txtのデータが消失してしまいます、なにがいけないのでしょうか? ファイル名「news.php」 ---------ソース抜粋-------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>新着情報更新画面</title> <style type="text/css"> <!-- .style5 { font-size: 16px; font-family: Geneva, Arial, Helvetica, sans-serif, "MS UI Gothic"; font-weight: bold; color: #FF9900; } .style6 { font-size: 10px; color: #990000; } .style8 {color: #FF0000; font-weight: bold; font-size: 12px; } .style13 { color: #FF9900; font-weight: bold; } --> </style> </head> <body> <div align="center"> <p class="style5"> </p> <p class="style5">新着情報更新画面</p> <form name="form1" method="post" action="<?PHP EditText($_POST['textfield1']); ?>"> <p> </p> <table width="100" border="1" bordercolor="#FF0000"> <tr> <td align="center" valign="middle" bgcolor="#FFCCCC"><span class="style8">編集エリア</span></td> </tr> <tr> <td align="center" valign="middle"><span class="style6">注意!:『¥』は全角で入力してください半角だと『\\』と表示されてしまいます</span></td> </tr> <tr> <td align="center" valign="middle"><textarea name="textfield1" cols="80" rows="9"></textarea></td> </tr> <tr> <td align="center" valign="middle"><input type="submit" name="Submit2" value="編集内容確定" onclick=""></td> </tr> </table> </form> <table width="100" border="1" bordercolor="#FF9900"> <tr> <td align="center" valign="middle" bgcolor="#FFFF66"><span class="style13">新着情報</span></td> </tr> <tr> <td align="center" valign="middle"><textarea name="textfield2" cols="80" rows="9" readonly> <?php //ファイルの読み込み if(is_readable("test001.txt")){ readfile("test001.txt"); }else{ echo "読み込みエラー\n"; } ?> </textarea></td> </tr> </table> </div> </body> </html> <?php function EditText($s){ //ファイルオープン(無ければ作成) $fh=fopen("test001.txt","w"); fwrite($fh,$s); fclose($fh); } ?> -------------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最低限の変更をしましたが意図するものはこんな感じですか? 出来るだけPHPコードはPHPコードでまとめてしまうとすっきりします。 formのactionにPHPコードを書くのは意外です、 でも下記のように、データがポストされたら、処理を起こす、というような 書き方にしたほうが分かりやすいです、きっと。 <?php if(isset($_POST['textfield1'])){ EditText($_POST['textfield1']); } //ファイルの読み込み if(is_readable("test001.txt")){ //readfileからfile_get_contentsに変更(PHP5以降でないと使えないかも) $text = file_get_contents("test001.txt"); }else{ $text = "読み込みエラー\n"; } function EditText($s){ //ファイルオープン(無ければ作成) //var_dump($s); $fh=fopen("test001.txt","w"); fwrite($fh,$s); fclose($fh); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>新着情報更新画面</title> <style type="text/css"> <!-- .style5 { font-size: 16px; font-family: Geneva, Arial, Helvetica, sans-serif, "MS UI Gothic"; font-weight: bold; color: #FF9900; } .style6 { font-size: 10px; color: #990000; } .style8 {color: #FF0000; font-weight: bold; font-size: 12px; } .style13 { color: #FF9900; font-weight: bold; } --> </style> </head> <body> <div align="center"> <p class="style5"> </p> <p class="style5">新着情報更新画面</p> <form name="form1" method="post" action=""> <p> </p> <table width="100" border="1" bordercolor="#FF0000"> <tr> <td align="center" valign="middle" bgcolor="#FFCCCC"><span class="style8">編集エリア</span></td> </tr> <tr> <td align="center" valign="middle"><span class="style6">注意!:『¥』は全角で入力してください半角だと『\\』と表示されてしまいます</span> </td> </tr> <tr> <td align="center" valign="middle"><textarea name="textfield1" cols="80" rows="9"></textarea></td> </tr> <tr> <td align="center" valign="middle"><input type="submit" name="Submit2" value="編集内容確定" onclick=""></td> </tr> </table> </form> <table width="100" border="1" bordercolor="#FF9900"> <tr> <td align="center" valign="middle" bgcolor="#FFFF66"><span class="style13">新着情報</span></td> </tr> <tr> <td align="center" valign="middle"><textarea name="textfield2" cols="80" rows="9" readonly> <?php echo $text; ?> </textarea></td> </tr> </table> </div> </body> </html>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
<?PHP EditText($_POST['textfield1']); ?> ってアクションで関数にポストを渡すというつもりですか? これはさすがに問題外でしょう。 まいかい、ページが読み込まれるたびにここでデータが消されています。 フローをよく考えてみてください
補足
回答有難うございます。 PHPは全くの初心者でリファレンス本を見ながら書いたのですが <?PHP EditText($_POST['textfield1']); ?> がマズイというご指摘受けまして <?PHP EditText(); ?> に変更して関数を <?php function EditText(){ $s= $_POST['textfield1']; //ファイルオープン(無ければ作成) $fh=fopen("test001.txt","w"); fwrite($fh,$s); fclose($fh); } ?> としてみましたが、結果は同じでした、 多分、基本的な何かを勘違いしてるような気がするのですが ご多忙中とは存じますがサンプルコードなどヒントを いただけないでしょうか? サンプルURL http://liz3.com/news.php
お礼
素早いレスに感謝しています。 ご教授頂いたコードで試したところうまく行きました、 if(isset($_POST['textfield1'])){ EditText($_POST['textfield1']); } が肝だったのですね、本当に助かりました有難うございます。