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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

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回答

3485閲覧

2つのテーブルからデータを取得して表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

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

PHP

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

0グッド

0クリップ

投稿2018/03/07 10:20

編集2018/03/07 10:53

ご教授宜しくお願い致します。

phpで顧客管理画面を作成したいと思っています。
データベースに2つのテーブルを用意し、それぞれ顧客情報などを入力し
1つの画面でそれを組み合わせた表にしたいです。

具体的には、
cus1.php(氏名・電話番号・メモ)・・・テーブル「cm1」
cus2.php(利用日・コース・料金・担当)・・・テーブル[cm2]
cus1.phpにはAUTO_INCREMENT(顧客No)を設定し、
それをクリックするとcus3.phpが表示され、
一覧表示できる。といったものが作りたいです。

cus1.php

cus1.php

1<?php 2try{//DBに接続 3 $pdo = new PDO("mysql:host=localhost;dbname=cm;charset=utf8","root",""); 4 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);//プリペアドステートメントのエミュレーションを無効に 5 6 $sql = 'SELECT * from cm1';//sql文の準備、cm1テーブルからデータを取得 7 8 $stmt = $pdo->query($sql);//sql文の実行 9 $stmt -> execute(); 10 11print '<table border =""> 12<th>顧客No.</th> 13<th>氏名</th> 14<th>電話番号</th> 15<th>MEMO</th>';//表のためのテーブルを作成 16 17 while($rec = $stmt->fetch(PDO::FETCH_ASSOC)){//クエリ結果を1行ずつ取得して連想配列として返す、をwhile文でループさせる 18 19 $customer = $rec['customer']; 20 $name = $rec['name']; 21 $tel = $rec['tel']; 22 $memo = $rec['memo']; 23 24 print '<tr>'; 25 print '<td align="center"><a href="cus3.php?customer=' . $customer . '">'. $customer .'</a></td>';//クリックするとcus3.phpに 26 print '<td align="center">'. $name .'</td>'; 27 print '<td align="center">'. $tel .'</td>'; 28 print '<td>'. $memo .'</td>'; 29 print '</tr>'; 30 } 31print '</table>'; 32 33}catch (PDOException $e) { 34 echo mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'); 35} 36$pdo = null; 37?>

cus2.php

cus2.php

1<?php 2 3try{ 4 $pdo = new PDO("mysql:host=localhost;dbname=cm;charset=utf8","root",""); 5 $sql = 'SELECT * from cm2'; 6 7 $stmt = $pdo->query($sql); 8 $stmt -> execute(); 9 10print '<table border =1> 11<th>顧客No.</th> 12<th>利用日</th> 13<th>コース</th> 14<th>利用料金</th> 15<th>担当</th>'; 16 17 while($rec = $stmt->fetch(PDO::FETCH_ASSOC)){ 18 19 print '<tr>'; 20 print '<td align="center">'.$rec['customer'].'</td>'; 21 print '<td align="center">'.$rec['date'].'</td>'; 22 print '<td align="center">'.$rec['course'].'分</td>'; 23 print '<td align="center">'.number_format($rec['price']).'円</td>'; 24 print '<td align="center">'.$rec['charge'].'</td>'; 25 print '</tr>'; 26 } 27print '</table>'; 28 29}catch (PDOException $e) { 30 echo mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'); 31} 32$pdo = null; 33?>

cus3.phpで選んだ顧客No情報を一覧として表示
cus3.php

cus3.php

1<?php 2 3$customer = $_GET['customer']; 4 5try{ 6 $pdo = new PDO("mysql:host=localhost;dbname=cm;charset=utf8","root","");//DB接続 7 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);//プリペアドステートメントのエミュレーションを無効に 8 9 $sql = "SELECT * FROM cm1 JOIN cm2 ON cm1.customer = cm2.customer ORDER BY date ASC"; 10 $stmt =$pdo->prepare($sql); 11 $stmt -> execute(); 12 13while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ 14 15 $name = ($result['name']); 16 $tel = ($result['tel']); 17 $date = ($result['date']); 18 $price = ($result['price']); 19 $charge = ($result['charge']); 20 $memo = ($result['memo']); 21 22 print '顧客No.' . $customer . '<br>';//顧客番号 23 print '名前:' . $name . '<br>';//名前 24 print '電話番号:' . $tel . '<br>';//電話番号 25 26print '<table border =""> 27<th>利用日</th> 28<th>利用金額</th> 29<th>担当</th> 30<th>MEMO</th>'; 31 32 print '<tr>'; 33 print '<td align="center">' . $date . '</td>';//日付 34 print '<td align="center">' . $price . '</td>';//金額 35 print '<td align="center">' . $charge . '</td>';//担当 36 print '<td>' . $memo . '</td>';//メモ 37 print '</tr>'; 38 } 39 print '</table>'; 40}catch (PDOException $e) { 41 echo mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'); 42} 43 44$pdo = null; 45?>

cus3.phpの表は、
①顧客No.
②名前
③電話番号
表で④利用日⑤料金⑥担当⑦メモ

といった形にしたいです。

現状では、①の顧客No.をクリックするとテーブル内の①~⑦すべての項目が出てしまいます。
どう修正したらよいのかがわかりません。

顧客Noをクリックしたら該当の顧客情報しか出さないようにするにはどうしたらいいでしょうか?
アドバイスいただけましたら幸いです。
何卒、よろしくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/07 10:31

hタグとはなんぞや
退会済みユーザー

退会済みユーザー

2018/03/07 10:38

失礼しました。<h1>としてたものの消し忘れです
yambejp

2018/03/07 10:49

B&B_PD.phpがcus2.php なんでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/07 10:56

たびたび失礼しました。B&B_PD.phpがcus3.phpです。cus1.phpの$cusomerにだけリンクを付けていて、そこをクリックするとcus3.phpでcus1.phpとcus2.phpのその顧客No.のお客さんだけのデータを表示させたいです。
guest

回答2

0

ベストアンサー

この要件ですと以下のように分けた方がいい気がするんだが・・

php

1// ユーザー情報取得・表示 2// SELECT * FROM cm1 WHERE customer = ? 3顧客No.: XXXXXXXXXXXXXXXXXXXXXXX 4名前:   寺田入 太郎 5電話番号: 000-0000-0000 6 7// 注文情報?取得 8// SELECT * FROM cm2 WHERE customer = ? 9┏━━━┳━━━━┳━━┳━━┓ 10┃利用日┃利用金額┃担当┃メモ┃ 11// ループ開始(headerはループ外 12┠───╂────╂──╂──┨ 13┃利用日┃利用金額┃担当┃メモ┃ 14// ループ終了 15┗━━━┻━━━━┻━━┻━━┛

投稿2018/03/07 12:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/03/12 02:51

asahina1979様 諸事情によりPCを開くことができず返信が遅くなりましたことをお詫び申し上げます。 ご回答いただきありがとうございました。 ご回答いただいた形がまさに私の求めている形です。 さっそく実行してみます。 始めたばかりのため質問内容・仕方など至らぬ点が多々あるかと思いますがまた壁にぶつかった際に ご教授いただけますと幸いです。
退会済みユーザー

退会済みユーザー

2018/03/13 02:35

ご回答いただいた形で完成させることができました。 上記「memo」はcm2のテーブルに入れました。 ベストアンサーにさせていただきます。 ちなみに、もし可能だったらお教えいただきたいのですが「memo」を㎝1に入れたまま 作成することは不可能なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/13 03:41

<!-- ループ処理 --> <td><?= c2["利用日"] ?></td> <td><?= c2["利用金額"] ?></td> <td><?= c2["担当者"] ?></td> <td><?= c2["担当者"] ?></td> <td><?= c1["メモ"] ?></td> <!-- 前処理の最後(ユーザーは1件だから) --> な感じかしら
退会済みユーザー

退会済みユーザー

2018/03/13 03:44

度々のご回答誠にありがとうございます。 さっそく試してみます。 この度はありがとうございました。
guest

0

テーブル構成やcm1とcm2の相関関係がわからないので微妙ですが
受け取ったgetデータをwhere句で利用していないので

PHP

1 $customer = filter_input(INPUT_GET,'customer'); 2 3 $sql = "SELECT * FROM cm1 JOIN cm2 ON cm1.customer = cm2.customer "; 4 $sql.= "WHERE 1 AND cm1.customer=? "; 5 $sql.= "ORDER BY date ASC"; 6 $stmt =$pdo->prepare($sql); 7 $stmt -> execute([$customer]); 8

のような処理が必要なのでは?

投稿2018/03/07 11:10

yambejp

総合スコア114779

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

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

yambejp

2018/03/07 11:11

余談ですがDBから受け取ったデータをHTMLに表示するときはかならず htmlspecialcharsなどをかまして下さい またurlに付加するときはurlencodeをかまして下さい
退会済みユーザー

退会済みユーザー

2018/03/12 02:47

yambejp様 諸事情によりPCを開くことができず返信が遅くなりましたことをお詫び申し上げます。 ご回答いただきありがとうございました。 まだまだ未熟なため頑張って勉強いたします。 回答への返答になってなくてすみません。。 「htmlspecialchars」や「urlencode」のご指摘ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問