PHP WEBアプリケーション作成⓼ 掲示板の作成 

前回、こちらにてデータベース設計を行いました。次は今、制作しているBaseballサークルサイトの掲示板を作成していきましょう。

まずは、ナビゲーションのプログラムを修正していきます。「#」としていましたが、bbs.phpと修正します。bbsはちなみに前回のデータベースで作成したときにつけたたテーブルの名前でしたね。

navbar.php

そしてindex.phpファイルをコピーしてbbs.phpを作っていきたいと思います。

bbs.phpファイルには本文を下記のように作成しましょう。

  <h1>掲示板</h1>

       <form action=”write.php” method=”post”>
        <div class=”form-group”>
            <label>タイトル</label>
            <input type=”text”  name=”title” class=”form-control” >
        </div>

        <div class=”form-group”>
            <label>名前</label>
            <input type=”text” name=”name” class=”form-control”>
        </div>
        <br>
        <div class=”form-group”>
            <textarea name=”body” class=”form-control” rows=”5″></textarea>
        </div>

        <div class=”form-group”>
            <label>削除パスワード(数字4桁)</label>
            <input type=”text” name=”pass” class=”form-control”>
        </div>
        <br>
        <input type=”submit” class=”btn btn-dark” value=”書き込む”>
       </form>



<form action=”write.php” method=”post”>はフォームに書かれたデータの送信先はwrite.phpへpost形式で送信するとの内容です。

bootstrapのデザインを反映させるため各classを指定しています。























アドレスにhttp://localhost/baseball/bbs.phpと入力。実装結果は以下の通りです。

データベースへの書き込み 

フォームで書かれたデータを受け取ってデータベースへ登録するwrite.phpを作っていきましょう。

bbs.php「データの送信」→write.php「データの受信」→必須項目の入力チェック→➀不備であればbbs.phpファイルへ。⓶OKであればデータベースに接続→レコード(行)に追加

write.php

<?php

$name = $_POST[‘name’];
$title = $_POST[‘title’];
$body = $_POST[‘body’];
$body = $_POST[‘pass’];

それぞれに変数を付けてデータを受け取るようにします
if($name == ” || $body == ”){
    header(“location: bbs.php”);
    exit();
}
名前と本文は必須項目にしたため、それらが空になっていないか調べ、いずれかが空の場合、bbs.phpに戻る。header関数はHTTPヘッダを送信します。HTTPヘッダとは例えば送信するデータ容量などHTML以外の情報のことです。中でもLocationヘッダは「URLを指摘し他のページへのジャンプを指示する情報」です。

if(!preg_match(“/^[0-9]{4}$/”, $pass)){
    header(“location: bbs.php”);
exit();
}

削除パスワードの書式チェック。
削除パスワードは数字4桁で必須項目としてます。preg_matchは文字列が指定の形式にあっているかをチェックします。第一引数に指定したパターンを、第二引数に指定した文字列が合ってればTRUEを返します。今回は0~9の数字で4桁で$/で末尾を表します。
「!」がついているので否定の意味となり、「指定したパターンに合っていなければ、bbs.phpに移動する」という処理になっています。
$dsn = ‘mysql:host=localhost;dbname=baseball;charset=utf8’;
$user = ‘baseballuser’;
$password = ‘ここにはパスワードを ‘;

「データベースに接続」
この部分では、DSNとユーザー名、パスワードを設定しています。DSNとはData Source Nameの略。どのサーバーのどのデータベースを使うのか指定します。
書式は「mysql:host=ホスト名;dbname=DB名;charset=文字コード」
try{



try-catchは例外処理のための構文。
tryの中に入っている処理は、データベース(DB)に接続して命令(クエリ)を実行する部分です。


$db = new PDO($dsn ,$user,$password );
$db->setAttribute
(PDO::ATTR_EMULATE_PREPARES, false);

   
PDO(php Data Object)とはDBMS(DB管理システム)を簡単に利用できるようにするPHP拡張機能。
PDOは様々な異なるDBMS(例えばOracleやSQLiteなど)に対して同じ処理ができるようにします。

new演算子を使ってPDOクラスのインスタンスを作成します。その時引数にDSN、ユーザー名、パスワードを必要とし変数dbに代入。
アロー関数(->)によりsetAttributeメソッドを使い、プリペアードステートメントを使う際に、セキュリティを高めるための設定をしてます。
$stmt = $db->prepare(“
   
プリペアードステートメントとは、実行したいクエリのテンプレートのようなものです。
prepareメソッドでは、文を実行する準備を行い、文を返します。
INSERT INTO bbs (name, title, body, date, pass)
    VALUES (:name, :title, :body, now(), :pass)”
);

INSERT文はテーブルに新しいレコードを追加します。テーブル名を書き、カッコ内にはデータを入れたいカラム(列)を書きます。

VALUESの後には各カラムに対応する値を書きます
$stmt->bindparam(‘:name’, $name, PDO::PARAM_STR);
$stmt->bindparam(‘:title’, $title, PDO::PARAM_STR);
$stmt->bindparam(‘:body’, $body, PDO::PARAM_STR);
$stmt->bindparam(‘:pass’, $pass, PDO::PARAM_STR);

bindparamメソッドで後から値を埋め込みます。
$stmt->execute();

header(‘Location: bbs.php’);
exit();
} catch (PDOException $e){
    exit(‘エラー:’ . $e->getMessage());
}
?>
クエリを実行しているのはexecute()です。プリペアードステートメントでクエリを組み立ててexecute()で実行します。
クエリ実行が終わったら、header関数を使いbbs.phpへ戻ります。

catch (PDOException $e){~ではPDOExceptionという種類の例外が発生したときのみ、catch内の処理を実行します。PDOExceptionは$eという変数に代入され、$e->getMessage()でエラーメッセージが取得できます。exitに引数としてエラーメッセージを指定すると、それを表示してプログラムを終了することができます。
PHPについて

この本から引用、参考にして学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが3,000円弱ならコスパよく、買っておいてよかったと満足してます。


わからないことはプロフェッショナルから学ぶのが一番

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。





就職・転職支援