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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2401閲覧

PHPでデータベースを表示。leftjoinしている為に複数行になってしまい、上手く表示できない

awazon042

総合スコア13

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1グッド

0クリップ

投稿2016/01/26 10:31

###実現したいこと
PHPでデータベースをLEFTJOINしてそれを表示したい。
ただ、テーブルをleftjoinしているため複数行になる(idや名前が重複する)為に上手く表示できません。
理想としてはhtmlでソースを見たときに

html

1<ul><!--ここは表示できる--> 2<ul> 3<li>佐藤</li> 4<li>168cm</li> 5<li>59kg</li> 6</ul> 7個人リンク<!--ここ以下のリンクが上手く表示できない--> 8<ul> 9<li><a href="http://a~">ツイッター</a></li> 10<li><a href="http://b~">フェイスブック</a></li> 11</ul>

のように表示したいです。
参考ですがバンドのメンバー個人のページを作っています。

下の通りidをしていて

sql

1SELECT * FROM cast RIGHT JOIN cast_add ON cast.id = cast_add.id LEFT JOIN cast_link ON cast.id=cast_link.id WHERE cast.id=?

これで表示されるテーブルは

sql

1【id】【name】【height】【weight】【site_url】【site_name】 21 佐藤 168 59 http://a~ ツイッター 31 佐藤 168 59 http://b~ フェイスブック

###ソースコード
現在のソースコードは

php

1<?php 2 3//接続は省略 4 5 $st = $pdo->prepare("SELECT * FROM cast RIGHT JOIN cast_add ON cast.id = cast_add.id LEFT JOIN cast_link ON cast.id=cast_link.id WHERE cast.id=?"); 6 $st->execute(array($id)); 7 while ($row = $st->fetch()) { 8 $name = htmlspecialchars($row['detail_name']); 9 $height = htmlspecialchars($row['height']); 10 $weight = htmlspecialchars($row['weight']); 11 $link_url[] = htmlspecialchars($row['link_url']); 12 $link_sitename[] = htmlspecialchars($row['link_sitename']); 13 14 } catch (PDOException $e) { 15 16 // 例外が発生した場合はここでキャッチしてエラーメッセージを取得する 17 $error = $e->getMessage(); 18 echo $error; 19 } 20} 21?>

html

1<h3 class="modal_title"><?= $row['detail_name']; ?>のプロフィール</h3> 2 <ul> 3 <li> 4 <?= $height; ?>cm <?= $weight; ?>kg 5 </li> 6</ul> 7 8 <span class="modal_detail_title">個人のリンク</span> 9<ul> 10 <?php foreach ($link_url as $link_sitename[] => $value): ?> 11 <li> 12 <a href="<?= $value ?>"> 13 <?= $link_sitename ?> 14 </a> 15 </li> 16<?php endforeach; ?> 17 18 19 20 21 </ul> 22

です。

###現在出てる不具合

しかしこの状態でブラウザで確認してみると

html

1<h3 class="modal_title"><?= $row['detail_name']; ?>のプロフィール</h3> 2<ul><!--ここは表示できる--> 3<ul> 4<li>佐藤</li> 5<li>168cm</li> 6<li>59kg</li> 7</ul> 8<span class="modal_detail_title">個人のリンク</span> 9<ul> 10<li><a href="http://a~">Array</a></li> <!---URLは上手く表示できてるが--> 11<li><a href="http://b~">Array</a></li><!--link_sitenameが駄目--> 12</ul>

となってしまいます。

長く分かりにくい説明だと思いますが、ご教授よろしくお願いします。

miyabi-sun👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

対応付けをしっかりしたいならば、以下のように、入れ子のデータ構造を作ってしまったほうが良さそうです。

PHP

1 $siteData = array(); 2 while ($row = $st->fetch()) { 3 $name = htmlspecialchars($row['detail_name']); 4 $height = htmlspecialchars($row['height']); 5 $weight = htmlspecialchars($row['weight']); 6 7 $siteDataRow= array(); 8 $siteDataRow["url"] = htmlspecialchars($row['link_url']); 9 $siteDataRow["name"] = htmlspecialchars($row['link_sitename']); 10 $siteData[] = $siteDataRow; 11 12 } catch (PDOException $e) { 13 14 // 例外が発生した場合はここでキャッチしてエラーメッセージを取得する 15 $error = $e->getMessage(); 16 echo $error; 17 18 }

表示するほうでは、このようにします。

PHP

1 <?php foreach ($siteData as $row): ?> 2 <li> 3 <a href="<?= $row['url'] ?>"> 4 <?= $row['name'] ?> 5 </a> 6 </li> 7<?php endforeach; ?>

投稿2016/01/26 13:51

Toyoshima

総合スコア422

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

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

awazon042

2016/01/27 01:11

綺麗にかつ、簡単に出来ました!ありがとうございます!
guest

0

$link_urlをループするのであれば、ループ中の現在の添字番号を取得して
$link_sitename中の同じ添字番号の値を取得すればよいのでは?

PHP

1<?php foreach ($link_url as $index => $value): ?> 2 <li> 3 <a href="<?= $value ?>"> 4 <?= $link_sitename[$index] ?> 5 </a> 6 </li> 7<?php endforeach; ?>

こうでは?

投稿2016/01/26 11:42

masayoko

総合スコア13

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

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

awazon042

2016/01/27 01:11

素晴らしく簡単に出来ました!! 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問