ID:kPluND3Xkp7z さんの質問

5,395 views

PHPでの掲示板作成について質問です。

現在、私はドットインストールでPHPを勉強しています。
PHPで作る「簡易掲示版」というレッスン( dotinstall.com/lessons/bbs_php )を参考に掲示版を作成したのですが、改行を含む文章が上手く表示されません。

どうしても原因が分からないため、こちらで質問させていただきました。
もしよろしければ、どなたか詳しい方にアドバイスを頂けると助かります。
よろしくお願いします。
ソースは下記に記載します。

登録日:2013-05-22 · カテゴリー:PHP・Perl・Ruby

みんなの回答 7 件

2013-05-22 · ID:kPluND3Xkp7z 報告
2013-05-22 · ID:kPluND3Xkp7z 報告

私の作成している掲示板のソースです。よろしくお願いします。。

<?php 
 
// 外部ファイルからデータを読み込み 
 
$dataFile = "bbs.dat"; 
 
$posts = file($dataFile, FILE_IGNORE_NEW_LINES); 
 
 
// もし投稿があったら、読み込んだデータに入力されたデータを追加して書き込み 
 
if ($_SERVER['REQUEST_METHOD'] == "POST" && !empty($_POST['message'])) { 
    if (empty($_POST['user'])) { 
        $newData = $_POST['title']."|".$_POST['message']."|名無しさん"; 
    } else { 
        $newData = $_POST['title']."|".$_POST['message']."|".$_POST['user']; 
    } 
    $newData .= date("|Y/m/d"); 
    array_unshift($posts, $newData); 
    $fp = fopen($dataFile, "w"); 
    fwrite($fp, implode("\n", $posts)); 
 
header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}"); 
exit; 
 

 
 
?> 
 
<!DOCTYPE html> 
<html lang="ja"> 
<head> 
<meta charset="UTF-8"> 
<title>口コミレビュー</title> 
<link rel="stylesheet" href="reset.css" media="all"> 
<link rel="stylesheet" href="review.css" media="all"> 
</head> 
<body> 
 
 
<h1>口コミレビュー</h1> 
 
<p><a href="#postform">投稿する</a></p> 
 
 
<div id="reviewwrap"> 
 
 
 
<h2>口コミ投稿一覧 (<?php echo count($posts); ?>件)</h2> 
<div class="reviewbox"> 
<?php if (count($posts)) : ?> 
<?php foreach ($posts as $post) : ?> 
<?php list($title, $message, $user, $posted) = explode("|", $post); ?> 
 
<ul class="review"> 
<li class="title"><?php echo htmlspecialchars($title); ?></li> 
<li class="massage"><?php echo htmlspecialchars($message); ?></li> 
<li class="user"><?php echo htmlspecialchars($user); ?>さんからの口コミ</li> 
<li class="day"><?php echo htmlspecialchars($posted); ?>に投稿しました</li> 
</ul> 
 
<?php endforeach; ?> 
<?php else : ?> 
<p>まだ投稿はありません。</p> 
<?php endif; ?> 
</div> 
 
 
</div><!--/reviewwrap--> 
 
 
 
<div id="postform"> 
<form action="" method="post"> 
<dl> 
<dt>タイトル</dt> 
<dd><input type="text" name="title" size="50"></dd> 
<dt>口コミ本文</dt> 
<dd><textarea type="text" name="message" cols="80" rows="10"></textarea></dd> 
<dt>ニックネーム</dt> 
<dd><input type="text" name="user"></dd> 
</dl> 
<input type="submit" value="投稿"> 
</form> 
</div> 
 
 
 
 
</body> 
</html> 
 
 
 
2013-05-22 · ID:sAWL5ASgHzwA 報告

あの、一行掲示板って書いてありますけども・・・・

改行許可したら一行にならないよね

2013-05-22 · ID:kPluND3Xkp7z

ご返信ありがとうございます。
改行許可がおそらく上手くできていない気がしています。 ><:

2013-05-22 · ID:VgcwEhOm4df/ 報告

書き込みする時にtextareaの改行コード(\n)を<br>に変換して(\r)を消したらいいと思うよ。
それか\rと\n両方削除しとくか。

2013-05-22 · ID:kPluND3Xkp7z

ご返信ありがとうございます。
「textarea 改行 \n \r 」などで検索してみました。
例にならい
<?php echo nl2br(htmlspecialchars($message)); ?> と記述してみたのですが、やはり上手くいかずで....。

外部ファイルbbs.datにも改行コードは表示されず、
試しにbbs.datに手入力で<br>と記述してもそのまま表示されてしました...。
...><..

2013-05-22 · ID:aTtthRJioaVg 報告

nl2br()という魔法

2013-05-22 · ID:kPluND3Xkp7z

ご返信ありがとうございます。
ソースを下記に変更してみたのですが、上手くいかずで......

<ul class="review">
<li class="title"><?php echo htmlspecialchars($title); ?></li>
<li class="massage"><?php echo nl2br(htmlspecialchars($message)); ?></li>
<li class="user"><?php echo htmlspecialchars($user); ?>さんからの口コミ</li>
<li class="day"><?php echo htmlspecialchars($posted); ?>に投稿しました</li>
</ul>

2013-05-22 · ID:kPluND3Xkp7z 報告

ちなみにテストで作成した掲示板です。
改行された文章を、本文に入力して投稿すると崩れてしまいます。。

口コミレビュー

http://atnytest.wkeya.com/review/review.php
2013-05-22 · ID:VgcwEhOm4df/

こんな形で改行コード取ったらいいと思う。

例:
if ($_SERVER[’REQUEST_METHOD’] == "POST" && !empty($_POST[’message’])) {
$message = preg_replace("/\r|\n/","",$_POST[’message’]);
if (empty($_POST[’user’])) {
$newData = $_POST[’title’]."|".$message."|名無しさん";
} else {
$newData = $_POST[’title’]."|".$message."|".$_POST[’user’];
}
〜略〜

2013-05-22 · ID:kPluND3Xkp7z

ご返信ありがとうございます。改行コード取れました。ぶじ崩れることなく投稿できました!
欲を言えば、改行ありで表示させたいのですが、それは難しいでしょうか?

2013-05-22 · ID:VgcwEhOm4df/

この例だとpreg_replaceで改行を取ってしまってるので、改行有りで保存できない。
1:取ってしまうのではなく<br>に置き換えること、2:表示する方でhtmlspecialcharsを使っちゃうとタグがタグとして認識されないから使わずに済ますこと、この2点が必要かと思う。
ただしこの掲示板ソースだと意図しない文字列への対応などをすっ飛ばした本当にイロハのスクリプト例文だからもっとじっくり悩んだ方がいいと思う。

2013-05-23 · ID:Qlpgvj4sXW5i

丁寧なご返信ありがとうございます!
そうですね、もっと悩んでよいものを作った方がよいですね。
大変ご参考になりました。お時間をとっていただき、本当にありがとうございました。m_ _m がんばってみます。

2013-05-22 · ID:d0E4jIgJOs7q 報告

教えてもらったコードが、どう動いてるのを理解してから次の質問しましょうよ。

PHP入門(基本編) (全32回) - プログラミングならドットインストール

http://dotinstall.com/lessons/basic_php_beginner
2013-05-23 · ID:Qlpgvj4sXW5i

ありがとうございます。そうですね。基礎をすっとばしていました。。><//

回答の受付は終了しました。

関連トピック