【サンプル】掲示板(データの挿入、抽出)
(ブログ記事の一覧は「こちら」)
シンプルな掲示板を作成しましょう。
入力項目は「名前」と「コメント」のみとします。
準備
データベース名
db_board
テーブル名
board
テーブルの構造
名前 | データ型 | その他 |
---|---|---|
id | int | primary |
name | varchar(50) | - |
comment | text | - |
created | datetime | - |
サンプルプログラム
まず、使用するデータベースの情報をまとめた定義ファイルを作成します。
dbConfig.php
<?php define("DB_SERVER", "localhost"); // サーバー define("DB_USER", "root"); // ユーザー define("DB_PASS", ""); // パスワード define("DB_NAME", "db_board"); // データベース ?>
今回は、データベースに関する処理について、別ファイルにまとめる方法で実装します。
dbHelper.php
<?php require_once('./dbConfig.php'); // データベースへの接続 function connectDB() { try { $dsn = 'mysql:host=' . DB_SERVER . ';dbname=' . DB_NAME . ';charset=utf8'; $pdo = new PDO($dsn, DB_USER, DB_PASS); } catch (PDOException $e) { echo($e->getMessage()); die(); } $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $pdo; } // お名前、コメントをDBに書き込む function insertComment($dbh, $name, $comment) { $date = date('Y-m-d H:i:s'); $sql = "INSERT INTO board (name, comment, created) VALUE (:name, :comment, '{$date}')"; $stmt = $dbh->prepare($sql); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindValue(':comment', $comment, PDO::PARAM_STR); if (!$stmt->execute()) { return 'データの書き込みに失敗しました。'; } } // DBから全データを取得 function selectComments($dbh) { $sql = "SELECT name, comment, created FROM board"; $stmt = $dbh->prepare($sql); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $data[] = $row; } return $data; }
最後に、メインのプログラムを載せます。処理については、コメントを参考にしてください。
index.php
<?php require_once('./dbHelper.php'); // データベースへの接続 $pdo = connectDB(); $errs = []; // [1] POSTで送信しているか? if ($_SERVER['REQUEST_METHOD'] === 'POST') { // [2] POSTデータを取得 $name = $_POST['name']; $comment = $_POST['comment']; // [3] バリデーション(入力内容のチェック) // 文字数のチェック if (mb_strlen($name) == 0) { $errs[] = 'お名前を入力してください。' . "<br>"; } if (mb_strlen($comment) == 0) { $errs[] = 'コメント欄を入力してください。' . "<br>"; } if (count($errs) === 0) { // [4] お名前、コメントをDBに書き込む $result = insertComment($pdo, $name, $comment); } } // [5] DBから全データを取得 $data = selectComments($pdo); ?> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>掲示板</h1> <table border=1> <tr style="background-color: orange"> <th>名前</th><th>コメント</th><th>時刻</th> </tr> <?php foreach ((array)$data as $row): ?> <tr> <td><?php echo htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php echo nl2br(htmlspecialchars($row['comment'], ENT_QUOTES, 'UTF-8')); ?></td> <td><?php echo htmlspecialchars($row['created'], ENT_QUOTES, 'UTF-8'); ?></td> </tr> <?php endforeach; ?> </table> <?php if (count($errs)) { foreach ($errs as $err) { echo '<p style="color: red">' . $err . '</p>'; } } ?> <form action="" method="POST"> <p>お名前:</p> <p><input type="text" name="name"></p> <p>ひとこと:</p> <p><textarea name="comment" rows="4" cols="40"></textarea></p> <input type="submit" value="書き込む"> </form> </body> </html>