質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

受付中

PHP 掲示板の投稿をリアルタイムで更新する機能を実装したい。

samidare_chan
samidare_chan

総合スコア223

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

-5評価

1クリップ

497閲覧

投稿2022/02/20 09:47

編集2022/02/20 21:37

タイトル通りなのですが掲示板の投稿でスレッドを見ていたら新しい投稿が来たらその場でブラウザを更新せず下に追加してほしいのですがこれを実装するには何をするのが定番なのでしょうか?調べましたがAjax,javascirpt? などある見たいですがイマイチどれを使ったらいいかわかりません。この場合最適なものはどれなのでしょうか?

※提示コードはスレッドの投稿を列挙するソースコードです。

参考サイト: https://qiita.com/hisamura333/items/e3ea6ae549eb09b7efb9
参考サイト: https://minagawa.design/blog/webdesign/js-php-date-realtime/#JavaScriptHTML

php

<html lang=ja> <head> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <title>send</title> </head> <body> <?php session_cache_limiter('none'); ini_set("display_errors",1); error_reporting(E_ALL); session_cache_limiter('none'); session_start(); Require_once "renderer.php"; Require_once "dataBase.php"; $viewNum = 10; $url = isset($_GET["title"]) ? $_GET["title"] : NULL; // if(isset($_GET["page"]) == false) { $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root","Shigurechan7240"); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT * FROM Post WHERE thread_UUID=:id'; $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $url, PDO::PARAM_STR); $stmt->execute(); $totalPageNum = ceil($stmt->rowCount() / $viewNum); $pageNumber = $totalPageNum -1; if($pageNumber < 0) { $pageNumber = 0; } } else { $pageNumber = $_GET["page"]; } ?> <?php try { $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root","Shigurechan7240"); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //post $post = null; $stmt = null; if($pageNumber == NULL) { $sql = 'SELECT * FROM Post WHERE thread_UUID=:id ORDER BY create_time_stamp ASC'; $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $url, PDO::PARAM_STR); $stmt->execute(); $post = $stmt->fetchAll(); $t = $stmt->rowCount() % $viewNum; $r = 0; if($t > 0) { $r = $stmt->rowCount() - $t; } else if($t == 0) { $r = $stmt->rowCount() - $viewNum; if($r < 0) { $r = 0; } } else if($t < 0) { $r = 0; } $sql = 'SELECT * FROM Post WHERE thread_UUID=:id ORDER BY create_time_stamp ASC LIMIT :limit OFFSET :offset '; $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $url,PDO::PARAM_STR); $stmt->bindValue(':limit', $viewNum, PDO::PARAM_INT); $stmt->bindValue(':offset', $r, PDO::PARAM_INT); $stmt->execute(); $post = $stmt->fetchAll(); $_SESSION["pageNumber"] = $r; $postNum = $stmt->rowCount(); //全部のページ数 $pageNum = $viewNum; //1ページの表示件数 $totalPageNum = ceil($postNum / $pageNum); } else { $sql = 'SELECT * FROM Post WHERE thread_UUID=:id ORDER BY create_time_stamp ASC LIMIT :limit OFFSET :offset '; $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $url,PDO::PARAM_STR); $stmt->bindValue(':limit', $viewNum, PDO::PARAM_INT); $stmt->bindValue(':offset', $pageNumber * $viewNum, PDO::PARAM_INT); $_SESSION["pageNumber"] = $pageNumber; $stmt->execute(); $post = $stmt->fetchAll(); } } catch(PDOException $e) { die($e->getMessage()); } ?> <!-------------------------------- スレッドを列挙 --------------------------------> <?php Renderer_TopBar($post[0]); for($i = 0; $i < $stmt->rowCount(); $i++) { $sql = 'SELECT * FROM Account WHERE UUID =:id'; $stmt2 = $dbh->prepare($sql); $stmt2->bindValue(':id',$post[$i]["create_UUID"] , PDO::PARAM_STR); $stmt2->execute(); $account = $stmt2->fetch(); if($post[$i]['enable'] == false) { //削除された投稿 Renderer_PostThread_Delete($post[$i]); } else if(isset($_SESSION["login"]) == true) { if(strcmp($_SESSION['UUID'],$account['UUID']) == 0) { //自分の投稿 Renderer_PostThread($post[$i]); } if(strcmp($_SESSION['UUID'],$account['UUID']) != 0) { //他人の投稿 Renderer_PostThread_Other($post[$i],$_SESSION['UUID']); } } else { // ログインしていない時 Renderer_PostThread_Logout($post[$i]); } } ?> <br> <br> <?php $sql = 'SELECT * FROM Post WHERE thread_UUID=:id'; $stmt = $dbh->prepare($sql); $stmt->bindValue(':id', $url, PDO::PARAM_STR); $stmt->execute(); $postNum = $stmt->rowCount(); //全部のページ数 $totalPageNum = ceil($postNum / $viewNum); $allPage = $totalPageNum; //print($totalPageNum); if((isset($_SESSION['login']) == true) && (($pageNumber == ($totalPageNum - 1)) || (($pageNumber == NULL)))) { ?> <h3>投稿</h3> <form action="submit.php" method="post"> <input type="hidden" name="title" value=<?php echo $url; ?> > <input type="hidden" name="nowPage" value=<?php echo $pageNumber; ?> > <p>文章</p> <textarea name="comment"></textarea > <br> <p><button type="submit">送 信</p> </form> <?php } else if( (isset($_SESSION['login']) == false) && ($pageNumber == $totalPageNum - 1 ) ) { ?> <h3>投稿するにはログインしてください。</h3> <?php } ?> <?php for($i = 0; $i < $totalPageNum; $i++) { ?> <a href="thread.php?title=<?=$url?>&page=<?=$i?>" > <?php echo $i ?></a>&nbsp &nbsp; <?php } ?> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2022/02/20 09:54

まずやってみてください。 何度も言ってますが「最適」とかないんで。 それに、これまでの感じから普通の掲示板もまともに作れてるとは思えませんが。
m.ts10806

2022/02/20 09:55

無駄にコードだけバッと全部出して「作ってください」という作業依頼ですか? このコードと要件との関連性は何ですか? 赤の他人しか見ないので、読んだだけで全部が繋がるような説明する義務を果たしてください。
kawax

2022/02/20 10:30

算数の勉強してる小学生がいきなり高校レベルの数学できるわけがない。何事も順番。
退会済みユーザー

退会済みユーザー

2022/02/20 12:37

webブラウザのプッシュ通知とかロングポーリングとかWebSocketってわかる? これらの用語について一定の説明ができるくらいに下調べしてほしいです。手取り足取り教えるほど暇な人はいないと思うので。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。