• ベストアンサー

PHPファイルでテキストファイルのデータを編集(読み書き)する方法について

ホームページ内の部分的な文章をブラウザ上で編集できるようにしたいのです。 その文章をテキストファイルに保存して、PHPファイルから、文章を編集する方法について教えてください。 以下は、ネット上で調べて、設定ファイルを編集するソースを利用させて頂いたものです。 イメージは、これで問題ないのですが、以下の場合、改行が含まれる文章の場合は動作しないのです。 設定ファイルを編集するように作られているので仕方ないのかなと思いますが、改行を含んだ文章も利用できるようになりますでしょうか? ##edit.php <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) fputs($fp, "$k=$i\n"); fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <input type="text" name="data1" value="<?php print $ini['data1'] ?>"><br> data2の変更 - <input type="text" name="data2" value="<?php print $ini['data2'] ?>"><br> data3の変更 - <input type="text" name="data3" value="<?php print $ini['data3'] ?>"><br> <input type="submit" value="送信"> </form> </body> </html> ##config.ini の中身 data1=タイトルです。 data2=サブタイトルです。 data3=本文です。 ↑改行した文章も対応したい。。iniファイルをtxtファイルにしないとだめ?

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

単に input を単純に textarea にすると、改行も含めて記録はされるが、parse_ini_file で読み出したときに、改行があると、そこから先は読み込まれないようです。 これを防止するために、改行コードを<br>などに変換してしまい、また読み出すときに改行コードに戻してやれば大丈夫です。 <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) { $i = preg_replace("/\r\n|\r|\n/", "<br>", $i); fputs($fp, "$k=$i\n"); } fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data3']); ?></td></tr> </table> </body> </html>

wdwdwd
質問者

お礼

有難うございました。 解決できました!

その他の回答 (1)

  • sisya
  • ベストアンサー率39% (97/245)
回答No.1

inputタグでは改行が入力できないという意味でしょうか? もしそうなら <input type="text" name="data1" value="<?php print $ini['data1']?>"><br> の部分を <textarea name="data1">="<?php print $ini['data1']?></textarea> とすればよいのではないでしょうか? ini形式ではなく、自由に編集したいというのなら parse_ini_fileを使用せず fileなどを使用してはいかがでしょうか?

wdwdwd
質問者

補足

回答有難うございます。 ><textarea name="data1">="<?php print $ini['data1']?></textarea> すみません。こちらの記載ミスです。入力フォームにtextareaを使用することは、理解しています。 >fileなどを使用してはいかがでしょうか? $ini = parse_ini_file('config.ini'); ↓ $ini = file('config.ini'); に変更するだけで、いいのでしょうか? 試してみましたが、エラーは出ないようになりましたが、テキストファイルを確認すると、過去の文章などが、「番号=○○」という形式で残ってしまって、うまくいかないようです。。 ↓こんな感じで。 ----------------- 0=data1=aaa 1=data2=bbb 2=data3=ccc data1=あああ あああ data2=いいい data3=ううう -----------------

関連するQ&A

  • HTMLのvalue値を取得したい。

    今、HTMLのフォーム内に <INPUT TYPE="image" name="point1" value="1" ALT="応募フォームへ" BORDER="0" HEIGHT="45" SRC="./img/img1.gif" WIDTH="127"><BR> <input type="hidden" name="point1" value="this.value"> という表示があります。 このvalue値を次の画面にいったときに取得したいのですが、うまくいきません。 PHP側で $req_data = $HTTP_POST_VARS; $req_data = array_merge($req_data, $HTTP_GET_VARS); print($req_data['point1']); とすると、表示されるのは this.valueです。。。 なにかよい方法はありませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP からのファイル書き出しで、 HTMLタグがうまく書き出されない問題について。

    phpを使っていろんな拡張子のファイル(php html txt画代表的) を書き出すソフトを作ったのですが、 目的としては、携帯電話からアクセスしていつでも本を見ながらスクリプトを実験できるということです。 でも、なぜか「<a href="http://*****">クリック</a>」 というようなスクリプトで書き出すと「<a href=\"http://*****\">クリック</a>」 になってしまって困っています。 これは、文字コードが原因なのでしょうか。 どなたか教えてください。 <?php $data = $_POST["data"]; $extension = $_POST["extension"]; $name = "data"; if($data){ $fp = fopen($name. ".". $extension,"w+"); fwrite($fp,$data); fclose($fp); print "書き出し完了"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <style type="text/css"> <!-- textarea { width: 600px; height: 10em; } --> </style> </head> <form method="post" action="write.php"> 拡張子<br> <input type="text" name="extension" value="txt"><br/> 内容<br/> <textarea name="data"></textarea><br/><br/> <input type="submit" name="submit" value="送信"> </form>

    • ベストアンサー
    • PHP
  • php ファイルの書き込み読みだし

    htmlフォームから回答 phpで処理計算しlog.csvに保存、log.csvファイルを読みだしその結果をブラウザに表示するスクリプトを書いておりますが、log.csvファイルを読みだして結果を表示の部分が調べてもできなくて困っております。どなたか知恵を貸してほしいです。批判や中傷などは書かないでください。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi5.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <?php session_start(); if (isset($_SESSION["gender"])) { $_SESSION["gender"]++; print($_SESSION["gender"]."回目"); } else { $_SESSION["gender"] = 0; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <?php if (isset($_SESSION["syokugyou"])) { $_SESSION["syokugyou"]++; print($_SESSION["syokugyou"]."回目"); } else { $_SESSION["syokugyou"] = 0; } ?> <p> </p> 満足度を答えてください<BR> <?php if(isset($_POST["hobby"])){ $hobby=implode($_POST["hobby"]); print $hobby; }else{ } ?> <?php if (isset($_SESSION["hobby"])) { $_SESSION["hobby"]++; print($_SESSION["hobby"]."回目"); } else { $_SESSION["hobby"] = 0; } ?> <?php // 出力 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html> </BOBY> </HTML>

    • ベストアンサー
    • PHP
  • phpでテキストファイルへ書き込み

    HTMLでのテキストエリアに記述された内容をPHPを利用して、テキストファイル化したいと考えています。 具体的には、画像上をクリックし、座標値(xとy)をテキストエリアに表示させます。 その表示された座標値をテキストファイルに保存したいと考えています。 以下がソースコードです。 ----- sumple.php ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT type="text/javascript"> function xyget(e){ var box = document.getElementById("xy"); box.value += e.clientX + "\n" + e.clientY + "\n"; } </SCRIPT> </head> <body> <br>画像上をクリック<br> <form name="picture"> <div><img src="sumple.jpg" onclick="xyget(event)" id="pic"></div> <b>座標値</b> <form action="sumple.php" method="POST"> <textarea name="xy" rows="5" cols="5"></textarea> <input type="submit" value="完了"> </form> <?php $content = $_POST['xy']; if ($content) { $fp = fopen('sumple.txt', 'w'); fputs($fp, $content); fclose($fp); print "書き込み完了しました。"; } ?> <br> </body> </html> ---------------------------------------------- テキストファイルはあらかじめ作成してあり、テキストエリアに座標値もちゃんと表示できています。 ですが、完了ボタンを押してもテキストファイルに書き込みがされず、困っています。 お願いします。

    • ベストアンサー
    • PHP
  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • ボーダフォン携帯(古い機種(J-SH09)での動作

    HTMLで POSTでテキストに入力した値をPHP側で受け取るようにしているのですが、 新しいボーダフォンやドコモの携帯では値を受け渡すことができます。 しかし、J-SH09のようなふるい機種では 値が受け取れません。 ちなみにGETでやってみても値を受け渡すことが不可能でした。。。 何かよい方法はないのでしょうか? **************HTMLソース******************** <form action="http://URL名" method="GET"> 検索<br> 入力(一部可)<br> <input type="text" name="eTest" size="14" maxlength="16" value=""><br> <input type="submit" value="検索開始"><br> </form> **************PHPソース******************** $test_data = $HTTP_POST_VARS; print($test_data);

    • ベストアンサー
    • PHP
  • phpとhtml間のデータ送信時「テキスト改行」処理について

    自分で調べてみましたが、どうしてもわからず行き詰まりました。 どなたかお知恵を貸して頂ければ幸いです。 【使用ファイル】 a.php php処理 b.html db抽出データ表示とフォーム(編集画面) c.html フォーム入力内容表示(確認画面) データ送信はPOSTとSmarty併用 dbへはMySQLで格納 【変数】 $z テキストエリアの項目値 【流れ】 a.php→b.html→a.php→c.html→a.php→b.html/dbへ格納 1:a.phpでdbよりデータ(テキスト)を抽出し追加、変数$zに格納。 2:Smartyでb.htmlへ$zを送る。送り先はフォーム内のテキストエリア値。 3:$zにテキスト追加で改行発生 (\n発生と予測)。 4:b.htmlからPOSTでa.phpへ。 nl2br($z)処理をし、<br />挿入。 5:Smartyでc.htmlへ$zを送る。 $zには<br>と\nの両方が入っている状態。改行表示される。ブラウザのページソースでは<br />が入っている。 6-1:c.html(POST)→a.php(smarty)→b.html str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態 smartyでb.htmlへ 6-2:c.html(POST)→a.php→db格納  str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態でdbへ格納 6-1,2とも<br />を入れたままだと文字列に<br />が入ってしまう 7:a.php→b.htmlで再度$zを呼び出してみると(1:の処理)<br />を取り除いたはずなのに、ブラウザではきちんと改行表示されている。 ブラウザのページソースに<br />の表示はない 【疑問点】 3:\nは発生してPOSTでa.phpにきているのか? きている種類が\nまたは他の改行文字かどうかを調べる手段はあるのか?バイナリ関連で調べるのか? 6-1:<br />を削除してhtmlへ送っているのに改行表示されるのか? <br />が文字列扱いになるのはなぜか? 6-2:dbでは\nが改行として認識されるのか? 7:\nしか入っていない文字列をブラウザ表示して、なぜ改行表示されるのか? 以上です。考えれば考える程にわからなくなってきました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでファイルのアップロード

    OSはLinuxのfedoraを利用しており、WebサーバーソフトはApacheを利用しています。 PHPを使って、クライアントからサーバーにファイルのアップロードをしたいのですが、プログラミングがあまり理解できておらず、アップロードができません。ちなみにphp.iniファイルの設定に関しては、アップロードは受け付けるようにしていますし、設定にミスはないと思います。 sample.phpというファイル名で下記のファイルを作ってみたのですが、アップロードすることができませんでした。まだPHPは初心者で間違いだらけだと思うのですが、こうすればアップロードできるようになるといった指摘をお願い致します。 <html> <head> <title> </title> </head> <body> <form enctype="multipart/form-data" action="sample.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> <?php if(isset($uploadfile) and is_uploaded_file($uploadfile)) { if(move_uploaded_file($uploadfile, $path . "/var/www/html/test/" . $uploadfile_name)){ print("<br>Uploaded file saved."); }else{ print("<br>Uploaded file save failed."); } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • php CSVファイル出力後その結果をブラウザ

    php CSVファイル出力後その結果をブラウザに返す処理について 先ほど質問しどう頑張ってもエラーがでてしまい自分の力ではもう無理だと思い再度質問させていただきました。アンケートフォーム→回答ボタンを押すとCSVファイル変換後(ここまではできてます)その後CSVファイルの内容をブラウザに返したいのですがうまくいきません。どなたかたすけてほしいです。良い回答が得られないようならば諦めることにいたします。批判、中傷のコメントは受け付けません。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi51.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <?php if(isset($_post["gender"])&&($_post["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<br>"; } ?> ?> <p> <?php if($_post["syokugyou"]<>""){ print"職業:<br>"; print$_post["syokugyou"]; }else{ print"職業をえらんでください<br>"; } ?> <p> <br>満足度 <?php if(isset($_post["hobby"])){ $hobby=implode($_post["hobby"]); print $hobby; }else{ } ?> <?php // 保存 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • htmlとphpのデータ受け渡し???

    いつもお世話になり誠にありがとうございます。 標記の件。 まだ、ボク自身、解っていないようです。 htmlとphpのソースコードを提示します。 どうすればデータの受け渡しができるか? 添削してくださらないでしょうか? html <!--入力画面--> <form action = "./Blog.php" method = "get"> <label class="label" for="name">お名前(ニックネーム)</label> <center><input id="name" type="text" name="name"></center> <label class="label" for="e-mail">メール</label> <input id="e-mail" type="e-mail" name="e-mail"> <label class="label" for="category">カテゴリー</label> <input id="category" type="category" name="categoryl"> <label class="label" for="message">本文</label> <textarea name="area1" style="color:rgb(8, 8, 8); font-size:100%;" cols="50" rows="30"></textarea><br> <input type="submit" name="confiem" value="確認"> </form> CSS <meta charset="utf-8"> <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['e-mail'] = $_POST['e-mail']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['e-mail'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!--確認画面--> <?php if( $mode == 'input' ){ ?> お名前(ニックネーム)<?php echo $_POST['name'] ?><br> Eメール<?php echo $_POST['e-mail'] ?><br> カテゴリー<?php echo $_POST['category'] ?><br> 本文<br> <?php echo nl2br($_POST['message']) ?><br> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> <?php } else { ?> <!--完了画面--> <?php } ?> 上記の通りです。 全然ダメだと思います。 添削のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう