前提・実現したいこと
簡単なチャットが必要となり、下記のサイトを参考にチャットを作成しました。
※参考サイト→https://www.casleyconsulting.co.jp/blog/engineer/907/
書き込みや表示などの全般機能については問題なく利用できる様にはなりました。
発生している問題・エラーメッセージ
参考サイトのままだと、投稿されるデータが昇順で表示されてしまう為、
データ(投稿件数)が多くなると見辛いので以下の通りSELECT文の末尾にdescを追加しました。
// DBから投稿内容を取得 function select() { $dbh = connectDB(); $sql = "SELECT * FROM message ORDER BY time desc"; $stmt = $dbh->prepare($sql); $stmt->execute(); return $stmt; }
これで過去に投稿されたデータ(投稿文)は降順で表示されるようにはなったのですが、
これだと「送信」を押下した際に、自身が投稿した最新のデータ(投稿文)が最下部
(過去メッセージの下)に表示されてしまいます。
現状のソースコード
<?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 desc"; $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); } ?>
試したこと
取得や登録など、部分ごとに順番を入れ替えるなどを試したのですが、いずれもうまくいきません。
プログラムはほぼ初心者の為、質問内容が分かりづらいかと思いますが、
どなたかご教示頂けますと幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/02 08:07