PHPとMySQLを使っていちから掲示板を作る講座。
こんな掲示板を作るために必要なコードを解説しています。
(クリックすると実際のサイトが別ウィンドウで表示されます)
↓↓↓
今回は前回作成した投稿画面に、削除機能をつけていきます。
これまでの解説は、下記の目次からご覧ください。
PHPで投稿画面にログアウトと削除機能をつける
前回と同様、CSSは省き、簡易版を作っていきます。
作成するページの外見は次のようになります。
前回解説したコードに、【ログアウト】と【削除】を加えました。
コードは次のとおり。
【test5.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
<?php session_start(); require('dbconnect.php'); if (isset($_SESSION['id']) && ($_SESSION['time'] + 3600 > time())) { $_SESSION['time'] = time(); $members=$db->prepare('SELECT * FROM members WHERE id=?'); $members->execute(array($_SESSION['id'])); $member=$members->fetch(); } else { header('Location: test4.php'); exit(); } if (!empty($_POST)){ if (isset($_POST['token']) && $_POST['token'] === $_SESSION['token']) { $message=$db->prepare('INSERT INTO posts SET created_by=?, message=?, created=NOW()'); $message->execute(array($member['id'] , $_POST['message'])); header('Location: test5.php'); exit(); }else { header('Location: test4.php'); exit(); } } $posts=$db->query('SELECT m.name, p.* FROM members m, posts p WHERE m.id=p.created_by ORDER BY p.created DESC'); $TOKEN_LENGTH = 16; $tokenByte = openssl_random_pseudo_bytes($TOKEN_LENGTH); $token = bin2hex($tokenByte); $_SESSION['token'] = $token; ?> <!DOCTYPE html> <html lang="ja"> <body> <!-- ★ログアウト★ --> <header> <div class="head"> <h1>週末プラン投稿画面</h1> <span class="logout"><a href="test4.php">ログアウト</a></span> </div> </header> <form action='' method="post"> <input type="hidden" name="token" value="<?=$token?>"> <?php if (isset($error['login']) && ($error['login'] =='token')): ?> <p class="error">不正なアクセスです。</p> <?php endif; ?> <div class="edit"> <p><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、ようこそ</p> <textarea name="message" cols='50' rows='10'><?php echo htmlspecialchars($message??"", ENT_QUOTES); ?></textarea> </div> <input type="submit" value="投稿する" class="button02"> </form> <?php foreach($posts as $post): ?> <div class="message"> <?php echo htmlspecialchars($post['message'], ENT_QUOTES); ?> <span class="name"><?php echo htmlspecialchars($post['name'], ENT_QUOTES); ?> | <?php echo htmlspecialchars($post['created'], ENT_QUOTES); ?> | <!-- ★削除★ --> <?php if($_SESSION['id'] == $post['created_by']): ?> <a href="test6.php?id=<?php echo htmlspecialchars($post['message_id'], ENT_QUOTES); ?>">削除</a>]<?php endif; ?></span></p> <?php endforeach; ?> </body> </html> |
【ログアウト】はhtmlコードだけで作成しています。
【削除】機能について、解説しますね。
ポイント:削除機能をつける
削除機能は、投稿内容を表示する【foreach】文の中に入れてあります。
次のように記述しています。
1 2 |
<?php if($_SESSION['id'] == $post['created_by']): ?> <a href="test6.php?id=<?php echo htmlspecialchars($post['message_id'], ENT_QUOTES); ?>">削除</a>]<?php endif; ?></span></p> |
「もしセッションIDが、投稿者のIDと同じであれば」「削除をクリックできる」となっています。
実際に【削除】を押すと、test6.php に飛びます。
このファイルには、次のように記述しておきます。
【test6.php(削除実行用ファイル)】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php session_start(); require('dbconnect.php'); if(isset($_SESSION['id'])) { $id = $_REQUEST['id']; $messages = $db->prepare('SELECT * FROM posts WHERE message_id=?'); $messages -> execute(array($id)); $message = $messages->fetch(); if ($message['created_by'] == $_SESSION['id']) { $del = $db->prepare('DELETE FROM posts WHERE message_id=?'); $del->execute(array($id)); } } header('Location: test5.php'); exit(); ?> |
「セッションidがあれば、postsテーブルから、データを取り出してきてね。」「もしメッセージの作成者と、セッションのidが一致していたら、投稿を削除してね」「そのあとtest5.phpに戻ってね」という意味です。
test5.phpファイルは、投稿画面です。つまりユーザーとしては、実際に削除を実行すると、投稿が削除された状態の同じページにいることになります。
test6.phpの削除ファイルの存在は気づかぬまま処理が進みます。
もし「削除しました」と完了画面を作成したい場合は、下記のコードを削除し、完了ページを作って、そこに移動させればOKです。
1 2 |
header('Location: test5.php'); exit(); |
さいごに
これで簡易掲示板ができました。
良かったら、機能を色々追加してみてくださいね。
ただ、いちからPHPですべて作成するのは、なかなか大変じゃなかったですか?

セキュリティ対策や認証処理など、手がかかりますよね。
実は、フレームワークを使えば、このあたりの処理を大幅に効率化できます。
PHPフレームワークとしては、現在Laravel(ララベル)が最も人気があります。PHPをある程度学んだら、ぜひ、Laravelを学習してみてくださいね。
本ブログでは、PHP学習後にLaravelを習得してWebエンジニアになった わたし自身の経験をふまえて、分かりやすく、Laravelの使い方も解説しています。

ララベルって何??

フレームワークってどんなものか、イマイチ分からない。
そんなふうに思ったら、まずは、こちらの記事から読んでみてください。
コメント