Help us understand the problem. What is going on with this article?

phpの簡易掲示板の作り方

画面表示部分を作成する

まずは、画面に表示される個所を作成していきます。

index.php
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
    <li><!--ここに投稿が表示される--></li>
</ul>
</body>
</html>

ここまでは、ほぼほぼHTMLの内容ですので理解できると思います。

また。formの送信先はformタグのaction属性で指定しますが、今回は同じファイルに向けて送信を行うため空欄で大丈夫です。

今後の簡単な流れを説明すると、HTMLのformタグで投稿内容を送信し、PHP側で送信された内容を受け取り、再度HTMLで投稿を表示できるように渡してあげるといった流れになります。

投稿内容を受け取る

次は送られてきた投稿内容をPHP側で受け取り編集する箇所を説明していきます。

index.php
<?php

// ファイルの指定
$dataFile = 'datafile.dat';

//name="send_message"のPOST送信があった時
if(isset($_POST["send_message"])){
    //送信されたname="message"とname="user_name"の値を取得する
    $message = trim($_POST['message']);
    $user = trim($_POST['user_name']);

    //messageが空じゃなかったら
    if(!empty($message)){

        //userが空の場合、名無しにする
        if(empty($user)){
          $user = "名無し";
        }
        //日付を取得する
        $postDate = date('Y-m-d H:i:s');
        //ファイルに書き込むメッセージを作成する
        $newData  = $message." / ".$user." / ".$postDate."\n";
        //ファイルを開く
        $fp = fopen($dataFile,'a');
        //ファイルに書き込む
        fwrite($fp,$newData);
        //ファイルを閉じる
        fclose($fp);
    }
}
?>
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
    <li><!--ここに投稿が表示される--></li>
</ul>
</body>
</html>

まず、データを書き込むファイルを指定しています。

そしてformからデータがpost送信された場合に、メッセージおよびユーザー名を受け取ります。

また、日付も掲示板に表示させたいので、投稿された日付の取得も行います。

その後、指定したファイルに書き込むためのデータを作成し、ファイルを開き・書き込み・ファイルを閉じる作業を行っています。

データを取得し表示させる

index.php
<?php

// ファイルの指定
$dataFile = 'datafile.dat';

//エスケープする関数
function h($s){
return htmlspecialchars($s,ENT_QUOTES,'UTF-8');
}

//name="send_message"のPOST送信があった時
if(isset($_POST["send_message"])){
    //送信されたname="message"とname="user_name"の値を取得する
    $message = trim($_POST['message']);
    $user = trim($_POST['user_name']);

    //messageが空じゃなかったら
    if(!empty($message)){

        //userが空の場合、名無しにする
        if(empty($user)){
          $user = "名無し";
        }
        //日付を取得する
        $postDate = date('Y-m-d H:i:s');
        //ファイルに書き込むメッセージを作成する
        $newData  = $message." / ".$user." / ".$postDate."\n";
        //ファイルを開く
        $fp = fopen($dataFile,'a');
        //ファイルに書き込む
        fwrite($fp,$newData);
        //ファイルを閉じる
        fclose($fp);
    }
}
//一行ずつデータを取り出して配列に入れる
$post_list = file($dataFile,FILE_IGNORE_NEW_LINES);
//逆順に並べ替える
$post_list = array_reverse($post_list);
?>
<!DOCTYPE html>
<html>
<head lang="ja">
<meta charset="utf-8">
<title>PHP簡易掲示板</title>
</head>
<body>
<h1>PHP簡易掲示板</h1>

<!--ここで投稿内容を送信する-->
<form action="" method="post">
    メッセージ:<input type="text" name="message">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" name="send_message" value="投稿">
</form>

<h2>投稿一覧</h2>
<ul>
<!--post_listがある場合-->
<?php if (!empty($post_list)){ ?>
    <!--post_listの中身をひとつづつ取り出し表示する-->
    <?php foreach ($post_list as $post){ ?>
    <li><?php echo h($post); ?></li>
    <?php } ?>
<?php }else { ?>
    <li>まだ投稿はありません。</li>
<?php } ?>
</ul>
</body>
</html>

まず、データを表示する際のエスケープ処理を独自関数として定義しています。function h($s)の部分です。

また、前回まででファイルにデータを書き込むことができているので、その書き込まれたファイルを取り出し、変数に格納してあげます。
ファイルのデータは昇順になっているので、降順にしたい場合はreverse関数を用いて逆に並べ替えることができます。

その次に、HTML部分でデータの表示を行います。

まず、条件分岐でファイルから取得したpost_listがあるかどうかのif文を書いています。
ある場合はその内容を表示し、ない場合は投稿はありませんというメッセージを表示します。

また、post_listがある場合は、リストとして送られてくるので、foreach文でループ処理を行い、1行ずつ表示してあげます。(先ほど定義したエスケープ処理の関数も使います。)

こんな感じで簡易的ではありますが、掲示板を作成することができます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away