LoginSignup
6
9

More than 5 years have passed since last update.

PHP 簡易掲示板の作成① 〜投稿機能〜

Posted at

以下の機能の付いた簡易掲示板を作成する。
1. 投稿機能: {番号}<>{名前}<>{コメント}<>{投稿された時間} という形で投稿内容が表示されるようにする。また、各投稿にパスワードを設定できるようにする。
2. 削除機能:指定した番号の投稿を削除できるようにする。また、パスワード認証も行う。
3. 編集機能:指定した番号の投稿を編集できるようにする。ここでもパスワード認証を行う。

今回は、1. 投稿機能の実装を目指す。

手順1 入力フォームの作成

名前、コメント、パスワードの入力欄を作り、次のtoukou_1.phpにPOST送信する。

keijiban.php
<html>
<body>
<form action="toukou_1.php" method="post"> <!--ファイルmethodの指定-->
  <table border="1">
    <tr>
      <td>名前</td>
      <td><input type="text" name="name" required></td> <!--名前の入力フォーム作成-->
    <td>コメント</td>
      <td><input type="text" name="comment" required></td> <!--コメント入力フォーム作成-->
      <td>パスワード設定
      <td><input type="text" name="pass" required></td> <!--パスワード入力フォーム作成-->
      <td colspan="2" align="center">
        <input type="submit" value="送信"> <!--送信ボタン作成-->
    </tr>
  </table>
</form>
</body>
</html>

手順2 入力データの保存

toukou_1.txtにPOSTで受け取った文字列を保存する。{パスワード}<>{番号}<>{名前}<>{コメント}<>{投稿された時間}の形式で保存する。

toukou_1.php
<?php
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $date = date("Y/m/d H:i:s");
    $pass = $_POST['pass'];

    $filename = 'toukou_1.txt'; /*保存先にファイル名を$filenameに代入*/

    $fp = fopen($filename,'a'); /*ファイルを追記モードで開く*/

    fwrite($fp,$pass.' <> '.$name.' <> '.$comment.' <> '.$date."\n"); /*情報をファイルに書き込む*/

    fclose($fp); /*ファイルを閉じる*/
?>

<?php
    unlink('toukou_2.txt'); /*ここでtoukou_2.txtを削除するコードを入れておく。理由は後ほど。*/
    ?>

<?php
    header('Location:toukou_2.php'); /*次の処理を行うファイルへ移動させる*/
    ?>

手順3 実際に表示する投稿内容の作成

現在、toukou_1.txtにはパスワードも入力してある状態なので、別のファイルtoukou_2.txtにパスワードを削除し投稿番号を追加した、実際に掲示板としてブラウザ上に表示する内容を保存する。

toukou_2.php
<?php

$data = file_get_contents('toukou_1.txt'); /*toukou_1.txtを読み込む*/
$element = explode( "\n",$data);/*toukou_1.txtを各行で分割する。file関数でも良い?*/
$cnt = count( $element ); /*分割した要素の数(行数)をカウントする*/

    for( $i=0;$i<$cnt;$i++ ){ /*行末までループする*/

    $fp = fopen("toukou_2.txt","a"); /*追記モードで開く*/
    $num = count( file('toukou_2.txt')); /*ファイルのデータの行数をかぞえて$numに代入*/
    $num++; /*投稿番号の取得*/
        $youso = explode(" <> ",$element[$i]); /*各1行を <> で分割する。*/
    fwrite($fp,$num.' <> '.$youso[1].' <> '.$youso[2].' <> '.$youso[3]."\n"); /*パスワード($youso[0])以外の情報をファイルに書き込む*/
    fclose($fp);
    }
?>

<?php
    header('Location:toukou_3.php'); /*次の処理を行うファイルへ移動する*/
    ?>

手順4 送信完了の確認と投稿内容の表示

利用者の利便性を考え、投稿を行った後に投稿完了のメッセージを表示する。また、投稿フォームの上に投稿された内容を表示する。

toukou_3.php
<?php
echo "名前とコメントを送信しました";
?>

<html>
<body>
<form>
<input type="button" onClick="location.href='keijiban.php'" value="簡易掲示板に戻る">
</form>
</body>
</html>
<!--掲示板に移動するボタンを作成する-->

フォームを作成したkeijiban.phpにtoukou_2.txtの内容を表示するプログラムを組み込む。

keijiban.php
<html>
<head><title>簡易掲示板</title></head>
<body>
簡易掲示板<br /><br />

<?PHP
    $file_name = "toukou_2.txt"; /*読込ファイルの指定*/
    $ret_array = file( $file_name ); /*ファイルを全て配列に入れる*/
    for( $i = 0; $i < count($ret_array); ++$i ) { /*行末までループする*/

        echo( $ret_array[$i] . "<br />\n" ); /*配列を順番に表示する*/

    }
    ?>

<!--これより下は手順1で作成したもの-->

<form action="toukou_1.php" method="post"> 
  <table border="1">
    <tr>
      <td>名前</td>
      <td><input type="text" name="name" required></td> 
    <td>コメント
      <td><input type="text" name="comment" required></td> 
      <td>パスワード設定
      <td><input type="text" name="pass" required></td>
      <td colspan="2" align="center">
        <input type="submit" value="送信"> 
    </tr>
  </table>
</form>
</body>
</html>

ブラウザ上で表示すると以下のように表示されます。
スクリーンショット 2018-09-19 15.59.57.png

6
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9