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

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

ただいまの
回答率

88.32%

コメント機能の実装 (全てのコメントが表示されてしまう状況について)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,166

yuugo

score 12

自分の作っているサービスで
、投稿した写真にコメントする機能をつけたいと思っています。
確かに、投稿した写真にコメントする事はできました。
しかし、どの写真を選んでも同じコメントが表示されてしまいます。
つまり、1の写真にコメントしたはずなのに、2の写真のコメント欄にもそのコメントが反映されてしまっているということです。
分かりづらくてすみません。

以下、説明です。
イメージ説明
こちらの右下のコメント欄の下が投稿したコメントです。
このコメントをコメントした写真にだけ表示するようにしたいのです。
全ての写真に表示したいわけではないです。

SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;'

テーブル状況

communityテーブル(コミュニティ投稿の為のテーブル)
id
comtitle(コミュニティの名前)
thumimg(コミュニティのサムネイル)
numrest(コミュニティの人数)
date (撮影日)
location(撮影場所)
subject(被写体)
use_camera(主な使用カメラ)
comment(作成者コメント)
member_id
reply_comment_id
created
modified

membersテーブル(ユーザー作成、またログインの為のテーブル)
id
name(メンバーの名前)
email(メールアドレス)
password(パスワード)
picture(プロフィール画像)
created
modified

photopostsテーブル(撮影した写真を投稿するテーブル)
id
photoimg(投稿画像)
photolocation(撮影場所)
photostory(写真に関するストーリー)
belongscom(所属コミュニティ)
use_camera(使用カメラ)
use_lens(使用レンズ)
member_id
reply_comment_id
created
modified

reply_commnetテーブル(コメント機能のテーブル)

id
comment(コメントするカラム)
reply_comment_id
photoposts_id
members_id
created
modified

以下が、このページのphpコードになります。
コメント表示はphotopostsテーブルのidとreply_commentテーブルのphotoposts_idでリレーションを組んでSELECT
する事で実現しようとしました。

説明が下手で本当に申しわけないですが、詳しい方宜しくお願いします。
また、情報が足りない所は遠慮なくいってください。

require('ports/login.php');//ログインス処理の読み込み

//写真投稿のidを取得
$sth = $db->prepare('SELECT * FROM photoposts WHERE id=?');
$sth->execute(
  array($_GET['id'])//URLから何番目の投稿かを判断
);
$photo_id = $sth->fetchAll();//全ての結果を取得

/*コメント投稿機能 */
if(!empty($_POST)) {/*コメントエリアが空でなければ */
  $reply = $_POST;
  $insertreply = $db->prepare("INSERT INTO reply_comment (members_id,photoposts_id,comment,created) VALUE (?,?,?,NOW())");
  $insertreply->execute(array(
  $member['id'],
  $_GET['id'],
  $reply['comment']
));

header('Location: photo_detail.php?id='.$_GET['id']);
exit();

}

//写真投稿の詳細を1件表示するための処理 
//写真作成内容をDBからSELECTで取得
$photos = $db->prepare('SELECT m.name,m.picture, p.* FROM members
m, photoposts p WHERE m.id=p.member_id AND p.id=?');
$photos->execute(array($_REQUEST['id']));

//コメントの表示機能
$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;'); 

そして、DBをSELECTしたものが以下です。
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kunai

    2019/01/25 12:12

    そのSQLは何でしょうか?実際にコード上でSQLを発行している箇所を開示いただけませんか。

    キャンセル

  • Orlofsky

    2019/01/25 12:17

    質問にテーブル定義はCREATE TABLE文で、数件で良いから各テーブルに入っているデータをINSERT文で、それと肝心のSELECT文も提示されては?

    キャンセル

  • yuugo

    2019/01/25 12:23

    返信ありがとうございます。
    編集しました。

    キャンセル

回答 2

checkベストアンサー

+1

直前のSQLではp.id=$_REQUEST['id']を指定しているのに、なぜコメントの時にその発想が抜け落ちたのでしょうか。。

$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id and photoposts.id=\''.$_REQUEST['id'].'\' ORDER BY comment DESC;'); 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/25 12:39

    解決しました。
    ありがとうございました。

    キャンセル

+1

$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;'); 

これだとコメントの絞込みまでしてないのでは?
whereにreply_comment.photoposts_id = $_GET["id"]を条件に入れる必要があると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/25 12:38

    コメントいただきありがとうございました。
    解決しました。

    キャンセル

  • 2019/01/25 12:40

    解決されたようで何よりです。
    SQLなどプログラミング外の情報を取り扱うときは直接SQLをDBに対して実行してみて欲しい情報が返ってくるのを確認してからプログラムに埋め込むのを強くすすめます。
    毎回画面表示確認していては結構なロスになります。

    キャンセル

  • 2019/01/25 13:05

    ありがとうございます。
    よく先生にも言われております。
    肝に命じておきます。

    キャンセル

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

  • ただいまの回答率 88.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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