-
ID:kPluND さんの質問

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

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

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

みんなの回答 7 件

ID:kPluND さんの回答

ドットインストールのレッスン。 PHPで作る「簡易掲示版」です。

PHPで作る「簡易掲示版」 (全10回) - プログラミングならドットインストール

http://dotinstall.com/lessons/bbs_php
ID:kPluND さんの回答

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

<?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> 
 
 
 
ID:sAWL5A さんの回答

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

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

ID:kPluND

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

ID:VgcwEh さんの回答

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

ID:kPluND

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

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

ID:aTtthR さんの回答

nl2br()という魔法

ID:kPluND

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

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

ID:kPluND さんの回答

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

口コミレビュー

http://atnytest.wkeya.com/review/review.php
ID:VgcwEh

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

例:
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’];
}
〜略〜

ID:kPluND

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

ID:VgcwEh

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

ID:Qlpgvj

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

ID:d0E4jI さんの回答

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

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

http://dotinstall.com/lessons/basic_php_beginner
ID:Qlpgvj

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

最終更新日:2013-05-22 (10,013 views)

関連するトピックス

ページ上部に戻る