dポイントプレゼントキャンペーン実施中!

ホームページ内の部分的な文章をブラウザ上で編集できるようにしたいのです。
その文章をテキストファイルに保存して、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ファイルにしないとだめ?

A 回答 (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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/03 10:08

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などを使用してはいかがでしょうか?

この回答への補足

回答有難うございます。

><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=ううう

-----------------

補足日時:2004/09/01 14:50
    • good
    • 0

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