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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

20007閲覧

SQL、PHPを使ってtableを作りたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2017/05/29 08:40

php,html

1 2//サンプル 3$stmt = $pdo->query('SELECT * FROM テーブル'); 4 5foreach ($stmt as $row) { 6 7?> 8 <table> 9<tr> 10<td><? echo $row['name']; ?></td> 11<td><? echo $row['height'];?></td> 12<td><? echo $row['weight'];?></td> 13<td><? echo $row['sex'];?></td> 14<td><? echo $row['arm'];?></td> 15</tr> 16</table> 17<? }?> 18

イメージ説明

画像のようなtableにしたいのですが横一列に出てしまって上手く縦に出せません。

実際に出すと以下のように出てしまいます。
田中、170cm、50kg、男性、右利き
佐藤、180cm、60kg、女性、左利き

配列内は(田中、170cm、50kg、男性、右き、佐藤、180cm...)みたいな形で入っています。

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

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

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

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

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

guest

回答3

0

ベストアンサー

php

1$sql = 'SELECT * FROM TABLE'; 2$stmt = $dbh->prepare($sql); 3$stmt->execute(); 4$result = $stmt->fetchAll(); 5?> 6 7<table> 8<table border="1"> 9<?php foreach ($result[0] as $key => $val){ ?> 10 <?php if (is_numeric($key)){ ?> 11 <?php for($j=0;$j<count($result);$j++){ ?> 12 <td><?php echo $result[$j][$key] ?></td> 13 <?php }?> 14 </tr> 15 <?php }else{ ?> 16 <tr> 17 <td><?php echo $key ?></td> 18 <?php }?> 19<?php }?> 20</table>

イメージ説明

ソースを読みやすくしました。テーブルのdumpを添付します。

php

1$sql = 'SELECT * FROM tbl_c'; 2$stmt = $dbh->prepare($sql); 3$stmt->execute(); 4$result = $stmt->fetchAll(); 5// print_r ($result); 6?> 7 8<table> 9<table border="1"> 10<?php 11 foreach ($result[0] as $key => $val){ 12 if (is_numeric($key)){ 13 for($j=0;$j<count($result);$j++){ 14 echo "<td>". $result[$j][$key] ."</td>\n"; 15 } 16 echo "</tr>\n"; 17 }else{ 18 echo "<tr>\n"; 19 echo "<td>" .$key. "</td>\n"; 20 } 21 } 22?> 23</table>

dump

1Array 2( 3 [0] => Array 4 ( 5 [名前] => 田中 6 [0] => 田中 7 [身長] => 170cm 8 [1] => 170cm 9 [体重] => 50kg 10 [2] => 50kg 11 [性別] => 男性 12 [3] => 男性 13 [利き腕] => 右利き 14 [4] => 右利き 15 ) 16 17 [1] => Array 18 ( 19 [名前] => 佐藤 20 [0] => 佐藤 21 [身長] => 180cm 22 [1] => 180cm 23 [体重] => 60kg 24 [2] => 60kg 25 [性別] => 女性 26 [3] => 女性 27 [利き腕] => 左利き 28 [4] => 左利き 29 ) 30 31 [2] => Array 32 ( 33 [名前] => 鈴木 34 [0] => 鈴木 35 [身長] => 190cm 36 [1] => 190cm 37 [体重] => 70kg 38 [2] => 70kg 39 [性別] => 男性 40 [3] => 男性 41 [利き腕] => 右利き 42 [4] => 右利き 43 ) 44 45 [3] => Array 46 ( 47 [名前] => 加藤 48 [0] => 加藤 49 [身長] => 170cm 50 [1] => 170cm 51 [体重] => 50kg 52 [2] => 50kg 53 [性別] => 女性 54 [3] => 女性 55 [利き腕] => 左利き 56 [4] => 左利き 57 ) 58 59 [4] => Array 60 ( 61 [名前] => 吉田 62 [0] => 吉田 63 [身長] => 180cm 64 [1] => 180cm 65 [体重] => 60kg 66 [2] => 60kg 67 [性別] => 男性 68 [3] => 男性 69 [利き腕] => 右利き 70 [4] => 右利き 71 ) 72 73 [5] => Array 74 ( 75 [名前] => 浜田 76 [0] => 浜田 77 [身長] => 190cm 78 [1] => 190cm 79 [体重] => 70kg 80 [2] => 70kg 81 [性別] => 女性 82 [3] => 女性 83 [利き腕] => 左利き 84 [4] => 左利き 85 ) 86 87 [6] => Array 88 ( 89 [名前] => 松本 90 [0] => 松本 91 [身長] => 200cm 92 [1] => 200cm 93 [体重] => 100kg 94 [2] => 100kg 95 [性別] => 男性 96 [3] => 男性 97 [利き腕] => 両利き 98 [4] => 両利き 99 ) 100 101)

投稿2017/05/29 10:18

編集2017/05/30 07:54
A.Ichi

総合スコア4070

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

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

退会済みユーザー

退会済みユーザー

2017/05/29 10:24

コメントありがとうございます。ちょっと複雑なのですぐに内容は把握できないのですが以下の点の説明をさせてください。 $title=array('名前','身長','体重','性別','利き腕'); $scale=array('','cm','kg','',''); 上記のデータは全てデータベースに入っています。 1つのレコードに田中、170cm、50kg、男性、右利き のように入っています。 つまり$sql = 'SELECT * FROM テーブル';のところが$sql = 'SELECT 名前、身長、体重、性別、利き腕 FROM sample';のようになります。 説明不足申し訳ありません。 知りたいのはそれらの配列を画像のように縦型に出力する方法を知りたいです。tabkeタグ×配列が苦手でどうもうまく出来ません。 こちらの不備等ありましたらお知らせください。訂正します。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/05/29 10:25

訂正:tabke→table
A.Ichi

2017/05/29 11:00

色々と勝手に付けましたが、fetchAllで全部取ってきてから並べています。
退会済みユーザー

退会済みユーザー

2017/05/30 07:04

コメントありがとうございます。 上記でなんとかデータ取れました。ありがとうございます。※ただいくつか聞きたい事がありますので再度質問投稿するかもしれません。tableの出し方についてではありません。
A.Ichi

2017/05/30 08:09

ちなみに私もテーブルは苦手です。
退会済みユーザー

退会済みユーザー

2017/05/30 09:06

細かい解説ありがとうございます。table何度かつまずく部分ですので嫌いなんですが、上記のコードをヒントに残りのtableもトライしてみます。
guest

0

もういっそ、すっごい遠回りな方法から考えてみますか?
説明とかははっきりいって適していないかもしれません。私自身がわかりやすいように覚えただけです。

PHP

1$result[] = ['田中', '170cm', '50kg', '男性', '右利き']; 2$result[] = ['佐藤', '170cm', '50kg', '女性', '左利き']; 3 4// そもそもどうやったら田中だけ表示できるかとかわかられますかね? 5echo $result[0][0]; // 田中 6echo $result[1][0]; // 佐藤 7 8// 配列の一番初めに出てくるので、0です。 9// resultの順番で考えると、最初が0なので次が1って感じ。

さて、次にテーブルの形について考えていきましょう。

HTML

1<tr></tr> <!-- このtr ~ /trまでが「一行」です --> 2<!-- 今回の場合$result[num][0]が一行であると考えると --> 3<tr> 4 <td>田中</td> 5 <td>佐藤</td> 6</tr> 7<tr> 8 <td>170cm</td> 9 <td>170cm</td> 10</tr> 11<!-- こういう形でテーブルとしては作られるかと思います -->

さて、こうなると、とりあえず「回す」と考えられるのはtdの部分ってのがまず見えます。

PHP

1<tr> // 一行というのは回さない(今回は) 2 <td>名前(固定)</td> // これは固定であり、回らないのでforeachの外です。 3 <?php foreach($result as $R) : ?> 4 <td><?=$R[0]?></td> // 本当は$resultだけど、回すときは$Rにするよ~ってしました。 5 <?php endforeach; ?> // すでに回していいるので、$result($R)[ここは勝手に回ってる][0] 6</tr> 7<tr> 8 <?php foreach($result as $R) : ?> 9 <td><?=$R[1]?></td> 10 <?php endforeach; ?> 11</tr>

地道にまずは、動きがわかりやすくなればと思います。

投稿2017/05/29 12:11

編集2017/05/29 12:17
Z-TALBO

総合スコア525

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

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

退会済みユーザー

退会済みユーザー

2017/05/29 12:13

コメントありがとうございます。 同じように「遠回り」の方法も模索していました。 助かります。 帰宅次第早速上記のコードに取り掛かってみます。
guest

0

tableタグをforeachの外に出してあげましょう。

あと、配列に入っているデータがよくないと思います。

$result = $stmt->fetch(PDO::FETCH_ASSOC)

のように取得すると、うまいこと入るのではないでしょうか?

投稿2017/05/29 08:41

編集2017/05/29 08:45
s.t.

総合スコア2021

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

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

退会済みユーザー

退会済みユーザー

2017/05/29 10:11

コメントありがとうございます。早速実装してみたいと思います。
退会済みユーザー

退会済みユーザー

2017/05/29 10:33

コメントありがとうございます。 <table> <?php $stmt = $pdo->query("SELECT ..... FROM sample WHERE ....ORDER BY id ASC LIMIT 7"); $result = $stmt->fetch(PDO::FETCH_ASSOC); foreach ($stmt as $row) { echo '<tr>'; echo '<td>'.($row['sample1']).'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'.($row['sample2']).'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'.($row['sample3']).'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'.($row['sample4']).'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>'.($row['sample5']).'</td>'; echo '</tr>'; }?> <table> だと縦×縦の並びtableになってしまいます。 田中 170cm 50kg 男性 右腕 佐藤 180cm 60kg 女性 左腕 これを 田中 佐藤 170cm 180cm 50kg 60kg 男性 女性 右利き 左利き にしたいです。どうすればいいのでしょうか。
yambejp

2017/05/29 10:40

trをtdごとにとじちゃダメです 1行の出力ごとに1度で十分です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問