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

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

ただいまの
回答率

90.49%

  • PHP

    24443questions

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

  • MySQL

    7107questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 408

youbin

score 2

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

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

リンク先画面

<?php
  $url = "localhost"; // データベース名
  $user = "root";     // ユーザー名
  $pass = "";         // パスワード
  $dbname = "WebShop"; // 使うデータベース名

  $mysqli = new mysqli($url, $user, $pass);

  if ($mysqli->connect_errno) {
    echo "データベースへの接続に失敗しました。";
    exit;
  }
  $mysqli->select_db($dbname);
  $mysqli->set_charset("utf-8"); // 文字コードを指定

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

 <html>
 <head> 
     <title>ショッピングサイト</title>
 </head>
 <body>
     <h1><a href="index.php">ショッピングサイト</a></h1>
     <h2>カテゴリ検索</h2>
     <p class="description">お探しの商品の種類をクリックしてください。</p>
<?php
     while($row = $rs->fetch_assoc()){
    print("<a href=\"./Category.php?cid="
        . $row['CategoryID']. "\">" .$row['CategoryName']. "</a><br>");
     }
?>
</body>
</html>
<?php
  $url = "localhost"; // データベース名
  $user = "root";     // ユーザー名
  $pass = "";         // パスワード
  $dbname = "WebShop";// 使うデータベース

  $mysqli = new mysqli($url, $user, $pass);

  if ($mysqli->connect_errno) {
    echo "データベースへの接続に失敗しました。";
    exit;
  }
  $mysqli->select_db($dbname);
  $mysqli->set_charset("utf-8");  // 文字コードを指定

?> 

<html>
<head>
    <title>カテゴリ一覧検索結果</title>
</head>
<body>
    <h1><a href="index.php">ショッピングサイト</a></h1>
    <h2>カテゴリ検索結果</h2>
    <h3>"  "で検索</h3>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+1

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

$_GET['cid']

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

それをHTMLに表示します。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

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

Category.php?cid={CategoryID}

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

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

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

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

$cid = $_GET["cid"];


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

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

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

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


select * from GoodsCategory order by 1

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/02/09 15:06

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

    キャンセル

  • 2018/02/09 15:19 編集

    >「$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を利用していません。

    キャンセル

  • 2018/02/09 15:22

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

    キャンセル

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

  • PHP

    24443questions

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

  • MySQL

    7107questions

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