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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

2289閲覧

データベースからid紐づけされたデータにリンクを付けid紐づけされたデータのリンクにとびたい

ariiiiiga

総合スコア66

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2019/01/17 06:56

前提・実現したいこと

ユーザー構築の口コミサイトを作っています。
口コミ一覧からコメントIDで紐づけされた指定したコメントのみ、リンク先のページに表示させたいです。

1.一覧の紐づけの仕方が合っているか
2.リンク先でそのコメントを表示させる方法を教えて頂きたい

この2つが調べてもわかりませんでしたので教えて頂きたいです。
*口コミ一覧は表示できています。
*データベースカラム:post_id, name, shop, point, comment

該当のソースコード

index.php <?php function getHostData($params){ //DBの接続情報 $password = "0120yuta0120";   $dbname = "myhostlog_db";   $host = "localhost";   $username = "yuta";   //DBコネクタを生成 $Mysqli = new mysqli($host, $username, $password, $dbname);  $Mysqli->query('SET NAMES utf8'); if ($Mysqli->connect_error) { error_log($mysqli->connect_error); exit; } //入力された検索条件からSQl文を生成 $where = []; if(!empty($params['name'])){ $where[] = "name like '%{$params['name']}%'"; } $where = []; if(!empty($params['shop'])){ $where[] = "shop like '%{$params['shop']}%'"; } if($where){ $whereSql = implode(' AND ', $where); $sql = 'select * from hosts where ' . $whereSql ; }else{ $sql = 'select * from hosts'; } //SQL文を実行する $UserDataSet = $Mysqli->query($sql); //扱いやすい形に変える $result = []; while($row = $UserDataSet->fetch_assoc()){ $result[] = $row; } return $result; } $userData = getHostData($_GET); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" > <meta name="viewport" content="width=device-width, initial-scale=1"> <title>トップページ</title> </head> <body> <div class="col-xs-6 col-xs-offset-3"> <?php //取得データを表示する <?php if(isset($userData) && count($userData)): ?> <p class="alert alert-success"><?php echo count($userData) ?>件見つかりました。</p> <table class="table"> <thead> <tr> <th>名前</th> <th>店舗名</th> <th>点数</th> <th>コメント</th> </tr> </thead> <tbody> <?php foreach($userData as $row): ?> <tr> <!--<td><?php echo htmlspecialchars($row['user_id']) ?></td>--> <td><?php echo htmlspecialchars($row['host_name']) ?></td> <td><?php echo htmlspecialchars($row['shop']) ?></td> <td><?php echo htmlspecialchars($row['point']) ?></td> 紐づけしたいコメントID--> <td><a href ="show_comment.php?id=<?=$row['post_id'] ?>">コメント</a></td> </tr> <?php endforeach; ?> </tbody> </table> <?php else: ?> <p class="alert alert-danger">検索対象は見つかりませんでした。</p> <?php endif; ?> </div> <?php //} ?> </body> </html>
show_comment.php <!DOCTYPE html> <html lang = “ja”> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>コメントページ</title> </head> <body> <table> <tr> <td><?php echo $name;?>のコメント</td> </tr> <tr> <td><?php echo post_idで紐づけされたコメント ?></td> </tr> </table> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

必要な情報を取得するために必要なパラメータが渡せているのであれば、どのような渡し方でもどのような内容でも「こうでなければならない」ということはありません。

逆から考えてください。

「コメント詳細ページで特定のコメントを表示するためには何が必要か」(詳細ページ)

「その必要な情報はどのように受け取ればいいか」(詳細ページ)

「それを渡すためにはどのようなURLにすれば良いか」(一覧ページ)

フレームワークなので少し渡し方や解析の仕方は違いますがteratailの質問一覧→質問詳細の形態はある程度参考になると思います。

いずれにしても「特定のコメントを取得するためのDBアクセス」は必要です。

投稿2019/01/17 07:02

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ariiiiiga

2019/01/17 07:59

グーグルだとなんと調べればIDで紐づいた詳細ページの作り方が出てきやすいのでしょうか?
m.ts10806

2019/01/17 08:04

正直なところ調べる必要ないです。なぜならこれは”仕様”だからです。 「そのように決めたのならそのように作る」だけでだからです。 一覧を取得して表示することができているのでしたら1件取得することも出来るはずです。 その1件取得するためには何が必要か?を考えてその必要な情報を受け取ってDBから取得するように作るだけです。
m.ts10806

2019/01/17 08:05

あと細かい指摘ですがHTMLに全角があります。例:“ja” ←“”
guest

0

ベストアンサー

idを渡しているのであればそのidのレコードを持ってくればよいのだけでは?

PHP

1// 渡されたidを受け取る 2$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS); 3 4// 受け取ったidのレコードを取得 5$sql = "select * from hosts where post_id = ".$id; 6

投稿2019/01/18 03:14

mayoi_maimai

総合スコア1583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ariiiiiga

2019/01/18 06:12

コメントが表示されないのですがこういうことでしょうか? <?php //include('../sql/search.php'); $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS); // 受け取ったidのレコードを取得 $sql = "select * from hosts where post_id = ".$id; ?> <!DOCTYPE html> <html lang = “ja”> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>コメントページ</title> </head> <body> <table> <tr> <td>コメント</td> </tr> <tr> <td><?php echo $id ?></td> </tr> </table> </body> </html>
mayoi_maimai

2019/01/18 06:21

index.phpで表示された一覧のリンクがちゃんとshow_comment.php?id=***とい形になっているのであればそのリンクを踏むとidだけ表示されると思います。 DB接続の記述までは書いていないので、index.php同様にちゃんと接続して上記のsqlを投げればデータが受け取れると思いますよ。 後は出したいところに表示すれば完成すると思います。
ariiiiiga

2019/01/18 06:39

idを表示することができました! index.phpではpost_idで紐づけしていて、リンク先にはpost_idと同じレコードのcommentを表示させたいですが、その場合index.phpに紐づけるのはpost_idとcomment両方なのでしょうか?
mayoi_maimai

2019/01/18 06:57 編集

post_idが重複していないのであればindex.phpからpost_idだけを渡してあげれば大丈夫です。(今のままで大丈夫) 受け取ったidのレコードは回答したsqlで受け取れると思うので、後は出力すればokですよ。
ariiiiiga

2019/01/18 07:13

<?php include('sql.php'); // 渡されたidを受け取る $id = filter_input(INPUT_GET, 'post_id', FILTER_SANITIZE_SPECIAL_CHARS); // 受け取ったidのレコードを取得 $sql = "select * from hosts where post_id = ".$id; ?> <!DOCTYPE html> <html lang = “ja”> <head> <meta charset="utf-8"> <title>コメントページ</title> </head> <body> <?php echo $id ?> </body> </html>
ariiiiiga

2019/01/18 07:14

このままだとIDのみ表示されるのですが、あとはどこを直せばいいのでしょうか?
mayoi_maimai

2019/01/18 07:33 編集

今のままだとレコードを取得するSQLを作っただけなのでちゃんとDB接続してそのSQLを実行しなければいけません。ひとまず以下で動くと思いますが、セキュリティやデータが無かった場合の処理も考えておいた方が良いと思います。 <?php //DBの接続情報 $password = "0120yuta0120"; $dbname = "myhostlog_db"; $host = "localhost"; $username = "yuta"; //DBコネクタを生成 $Mysqli = new mysqli($host, $username, $password, $dbname); $Mysqli->query('SET NAMES utf8'); if ($Mysqli->connect_error) { error_log($Mysqli->connect_error); exit; } // 渡されたidを受け取る $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_SPECIAL_CHARS); // 受け取ったidからレコード取得sqlを生成 $sql = "select * from hosts where post_id = ".$id; //SQL文を実行する $PostData = $Mysqli->query($sql); //実行結果を配列で受け取る $result = $PostData->fetch_assoc(); // 受け取ったレコードの内容デバッグ用 // var_dump($result); ?> <!DOCTYPE html> <html lang ="a"> <head> <meta charset="utf-8"> <title>コメントページ</title> </head> <body> <?= $result['name'];?>のコメント<br> <?= $result['comment']; ?> </body> </html>
ariiiiiga

2019/01/18 07:39

Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean in D:\xampp\htdocs\myhostlog\non-login\show_comment.php:27 Stack trace: #0 {main} thrown in D:\xampp\htdocs\myhostlog\non-login\show_comment.php on line 27 このエラーが出てしまいました。 ここが27行目です。 //実行結果を配列で受け取る $result = $PostData->fetch_assoc();
mayoi_maimai

2019/01/18 07:47

url直接叩いてませんか?? 先程と同様にindex.phpのリンクから遷移してくれば動くと思いますよ。
ariiiiiga

2019/01/18 07:54

index.phpから遷移していますがエラーがでてしまいます。
mayoi_maimai

2019/01/18 07:59

遷移時urlがshow_comment.php?id=***といった形になっていますか? 今の記述だとここにちゃんとidが渡らないとエラーになります。
ariiiiiga

2019/01/18 08:04

かいけつしました! $idではなく$post_idになっていました! ありがとうございます!
mayoi_maimai

2019/01/18 08:07

基本となる処理だと思うのでデータの一覧を取得する方法、指定のデータを取得する方法などを一回おさらいしておくといいですよ。 また、今更ですがデータベースのパスワードなどは伏字にしておきましょう。
ariiiiiga

2019/01/18 08:34

助かりました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問