こんにちは、キャスレーコンサルティングID(インテグレーション&デザイン)部の金長です。
今回は、PHPの学習がてらにPHP、MySQLを使った簡単なチャットを作成してみました。
目次
・動作環境
・フォーム作成
・チャット機能作成
・終わりに
動作環境
PHP(7.2.5)
Apache(2.4.33)
MySQL(10.1.32)
※XAMPPを使用しています。設定方法については割愛します。
Windows10
Google Chrome(66.0.3359.139)
フォームの作成
名前とメッセージを入力後、送信ボタンでチャットを投稿できるような、フォームになっております。
投稿した内容は、表示できるようにチャット履歴の項目を、設けています。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>チャット</title> </head> <body> <h1>チャット</h1> <form method="post" action="chat.php"> 名前 <input type="text" name="name"> メッセージ <input type="text" name="message"> <button name="send" type="submit">送信</button> チャット履歴 </form> </body>
実際の表示は、以下の通りです。
チャット機能の作成
次に、実際のチャット機能を作っていきます。
事前に、MySQLに以下のテーブルを作成済みです。
テーブル名:message
カラム名、name(名前)、message(メッセージ)、time(投稿日時)
フォームと同じファイルに、追記していきます。
①画面を表示した際に、DBに登録されている投稿内容を表示する。
②送信ボタンを押下した際に、DBに登録し、登録した内容を表示する。
<section> <?php // DBからデータ(投稿内容)を取得 $stmt = select(); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $message) { // 投稿内容を表示 echo $message['time'],": ",$message['name'],":",$message['message']; echo nl2br("\n"); } // 投稿内容を登録 if(isset($_POST["send"])) { insert(); // 投稿した内容を表示 $stmt = select_new(); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $message) { echo $message['time'],": ",$message['name'],":",$message['message']; echo nl2br("\n"); } } // DB接続 function connectDB() { $dbh = new PDO('mysql:host=localhost;dbname=chat','root',''); return $dbh; } // DBから投稿内容を取得 function select() { $dbh = connectDB(); $sql = "SELECT * FROM message ORDER BY time"; $stmt = $dbh->prepare($sql); $stmt->execute(); return $stmt; } // DBから投稿内容を取得(最新の1件) function select_new() { $dbh = connectDB(); $sql = "SELECT * FROM message ORDER BY time desc limit 1"; $stmt = $dbh->prepare($sql); $stmt->execute(); return $stmt; } // DBから投稿内容を登録 function insert() { $dbh = connectDB(); $sql = "INSERT INTO message (name, message, time) VALUES (:name, :message, now())"; $stmt = $dbh->prepare($sql); $params = array(':name'=>$_POST['name'], ':message'=>$_POST['message']); $stmt->execute($params); } ?> </section>
実際に動かしてみると、このようになります。
終わりに
いかがでしたでしょうか。
今後は、 SIP(Session Initiation Protocol)との連携や、セキュリティなどの実装にも、深堀していきたいと思います。
最後までお読みいただき、ありがとうございます。