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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

2回答

945閲覧

PHP SQL文からの取得について

youbin

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2018/02/08 14:28

PHPの勉強のため、簡易的なショッピングサイトを作っています。
カテゴリ検索をしたいのでDB内にデータを入れ、それを表示させリンクにしています。
そしてそのリンクから飛んだ時にそのリンク名を見出しで表示させたいです。
どのようにすれば良いのでしょうか?

ショッピングサイト トップ画面

リンク先画面

index.php

1<?php 2 $url = "localhost"; // データベース名 3 $user = "root"; // ユーザー名 4 $pass = ""; // パスワード 5 $dbname = "WebShop"; // 使うデータベース名 6 7 $mysqli = new mysqli($url, $user, $pass); 8 9 if ($mysqli->connect_errno) { 10 echo "データベースへの接続に失敗しました。"; 11 exit; 12 } 13 $mysqli->select_db($dbname); 14 $mysqli->set_charset("utf-8"); // 文字コードを指定 15 16 $rs = $mysqli->query("select * from GoodsCategory order by 1"); 17?> 18 19 <html> 20 <head> 21 <title>ショッピングサイト</title> 22 </head> 23 <body> 24 <h1><a href="index.php">ショッピングサイト</a></h1> 25 <h2>カテゴリ検索</h2> 26 <p class="description">お探しの商品の種類をクリックしてください。</p> 27<?php 28 while($row = $rs->fetch_assoc()){ 29 print("<a href=\"./Category.php?cid=" 30 . $row['CategoryID']. "\">" .$row['CategoryName']. "</a><br>"); 31 } 32?> 33</body> 34</html>

Category.php

1<?php 2 $url = "localhost"; // データベース名 3 $user = "root"; // ユーザー名 4 $pass = ""; // パスワード 5 $dbname = "WebShop";// 使うデータベース 6 7 $mysqli = new mysqli($url, $user, $pass); 8 9 if ($mysqli->connect_errno) { 10 echo "データベースへの接続に失敗しました。"; 11 exit; 12 } 13 $mysqli->select_db($dbname); 14 $mysqli->set_charset("utf-8"); // 文字コードを指定 15 16?> 17 18<html> 19<head> 20 <title>カテゴリ一覧検索結果</title> 21</head> 22<body> 23 <h1><a href="index.php">ショッピングサイト</a></h1> 24 <h2>カテゴリ検索結果</h2> 25 <h3>" "で検索</h3> 26</body> 27</html>

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

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

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

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

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

guest

回答2

0

cid にカテゴリIDを渡しているので、

$_GET['cid']

でカテゴリIDを取得できます。後は、もう一度DBを検索してカテゴリ名を取得。

それをHTMLに表示します。

投稿2018/02/08 14:52

kero1209

総合スコア431

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

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

0

最初の画面で表示されているカテゴリ名のリンクをクリックすると
2つ目の画面(Category.php)では下記のようなURLで画面が表示されているはずです。

Category.php?cid={CategoryID}

※{CategoryID}部分はそれぞれのカテゴリ名に即したカテゴリIDになっているはず。

この?xxx=yyy という形式はクエリストリングというもので、HTTP上はGETリクエストが送信された、ということになります。
xxxが「キー」
yyyが「値」となります。

PHPにおいてGETリクエストは$_GETというスーパーグローバル変数(配列形式の変数です)で受け取ることができます。
$_GET[{キー}]とすると{値}部分が受け取れます。

コードを見る限り、配列については把握していそうなので、コードを提示しますと、

php

1$cid = $_GET["cid"];

というような形です。
※GETリクエストについては改ざんが容易であるため本来はリクエストメソッドがGETである確認やGETにcidが存在するかなど確認が必要ですが省略します。→参考記事

あとは、取得できたカテゴリIDを元にデータベースへの問い合わせを行います。

最初のphpにてselect文を実行していますよね。

php

1 $rs = $mysqli->query("select * from GoodsCategory order by 1");

sql

1select * from GoodsCategory order by 1

これは「GoodsCategoryテーブルからデータを取得してきて」という命令です。
※order by 1の部分は本来は並べ替えたい対象の項目名(カラム名)を昇順・降順で並べ替えて取得するorder by句というもので単に1だけ指定するのはあまり意味がありません。
具体的な使用例:order by CategoryName asc

で、特定の情報を取得する場合、絞込みを行う際はwhere句というもので問い合わせを行います。

つまり、下記のようなSQL文を実行することで、取得したい情報を絞り込むことができるようになるわけです。

sql

1select * from GoodsCategory where CategoryID = '{特定のカテゴリID}';

あとは、同様にphpからSQL文を実行して情報を取得して、表示したい情報をHTMLに書き出すだけです。
※本来は存在しないカテゴリIDだった場合の対応やSQLインジェクション、XSSなどセキュリティ対策でhtml表示の際にエスケープ処理が必要ですが、ここでは省きます→参考記事1参考記事2

投稿2018/02/09 02:46

編集2018/02/09 02:51
m.ts10806

総合スコア80850

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

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

youbin

2018/02/09 06:06

詳しく説明を書いていただきありがとうございます。 二つ質問なのですが、「$cid = $_GET["cid"];」の部分は$mysqliとかが書いてあるPHPのところに書けば良いのでしょうか? htmlで表示するときは、<h3><from methot="GET" action="./index.php">を検索する</h3>って感じ書けば良いのでしょうか? 自分の理解力がないために質問が多くなってしまってすみませんm(_ _)m
m.ts10806

2018/02/09 20:58 編集

>「$cid = $_GET["cid"];」の部分は$mysqliとかが書いてあるPHPのところに書けば良いのでしょうか? はい、そうです。 $cid を{特定のカテゴリID} に振り替えれば良いです。 >htmlで表示するときは、 いいえ違います。 1つ目でカテゴリの一覧を表示させるときにwhileループにてfetch_assoc()でデータを取り出し、printしていますよね? それと同じように、データを取りだし、printしてください。 おそらく初めてと思われるので出力部分の答えを提示しますと以下のような形です。 <?php $row = $rs->fetch_assoc(); print '<h3>"'.$row["CategoryName"].'"で検索</h3>'; ?> 今回のようにカテゴリーIDを指定するか、しないかだけで、 データベースへのアクセス、取り出し方、htmlへの表示の仕方は同じです。 ※カテゴリーIDを指定することでデータは1件に絞られるはずなのでwhileを利用していません。
m.ts10806

2018/02/09 06:22

ちなみに「methot」ではなく「method」ですね。「メソッド」です。 <form>タグは<form></form>の中にある入力情報(input)を送信するためのもので置いただけでは何もしません。大抵はsubmitボタンを置きますね。 (なので今回の要件では採用できません)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問