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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

HTML

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

Q&A

解決済

2回答

705閲覧

phpの配列をhtml Tableで表示

tansan_shuwa

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

HTML

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

1グッド

0クリップ

投稿2022/09/13 01:21

編集2022/09/13 04:26

###前提
visual studio Codeで webサイトを作成しようとしています。

実現したいこと

csvから配列に格納したので、その配列をhtmlのテーブルで表示したいです。
csvのサンプルは
1,レモンコンク,360
2,ライムコンク,360
3,カルピス,360
4,ピーチ,550
5,カシス,550
になります。

また、サイトには
ID 名前 値段
1 レモンコンク 360
2 ライムコンク 360
3 カルピス 360
4 ピーチ 550
5 カシス 550
のようになるように考えております。

発生している問題・エラーメッセージ

Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 2 [4] => 2 [5] => 2 [6] => 3 [7] => 3 [8] => 3 [9] => 4 [10] => 4 [11] => 4 [12] => 5 [13] => 5 [14] => 5 ) Array ( [0] => レモンコンク [1] => レモンコンク [2] => レモンコンク [3] => ライムコンク [4] => ライムコンク [5] => ライムコンク [6] => カルピス [7] => カルピス [8] => カルピス [9] => ピーチ [10] => ピーチ [11] => ピーチ [12] => カシス [13] => カシス [14] => カシス ) Array ( [0] => 360 [1] => 360 [2] => 360 [3] => 360 [4] => 360 [5] => 360 [6] => 360 [7] => 360 [8] => 360 [9] => 550 [10] => 550 [11] => 550 [12] => 550 [13] => 550 [14] => 550 )
ID 名前 値段
ウェブで表示してみるとこのようになります。

該当のソースコード

php

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 6 <link rel="stylesheet" href="stylesheet.css"> 7 </head> 8 <body> 9 <header> 10 <div class="header-logo">ORDER SITE</div> 11 </header> 12 <div class="btn"> 13 <form action="マスター登録.php" method="post"> 14 <button type="submit" name="add">登録</button> 15 </form> 16 </div> 17 18 <table class="php"> 19 <?php 20 if (isset($_POST['add'])){ 21 // #1 ファイルの読み込み 22 $f = fopen("./drink.csv", "r"); 23 24 //結果格納用 25 $id=[]; 26 $drink=[]; 27 $money=[]; 28 29 30 31 // #2 テーブルのHTMLを生成 32 echo "<table> 33 <tr> 34 <th>ID</th> 35 <th>名前</th> 36 <th>値段</th> 37 </tr>"; 38 39 // #3 csvのデータを配列に変換し、HTMLに埋め込んでいる 40 41 while($line = fgetcsv($f)) { 42 for ($i=0;$i<count($line);$i++) { 43 $id[]=$line[0]; 44 $drink[]=$line[1]; 45 $money[]=$line[2]; 46 } 47 } 48 49 print_r($id); 50 print_r($drink); 51 print_r($money); 52 53 // #4 ファイルを閉じる 54 fclose($f); 55 } 56 57 ?> 58 </table> 59 </body> 60 </html> 61

試したこと

一度成功したのですが、間違えていじってしまい、どのようになっていたか分からなくなってしまいました。初心者で始めたばかりということもあり、どこがおかしいのかも分からずお手上げ状態です

補足情報(FW/ツールのバージョンなど)

間違っている所やもっとこうした方がいいなどのアドバイスをいただきたいと思い投稿させていただきました。よろしくお願い致します。

yukkuri_55👍を押しています

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

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

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

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

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

yambejp

2022/09/13 01:30

csvはカンマ区切りの文字列でサンプルを例示ください
m.ts10806

2022/09/13 01:43

あともう1点、 「どうなれば想定のレイアウトか」を知っているのは作っている人だけなので、 その部分を具体的に記載されないことには他者は答えようがない部分となります。 「想定していた状態に比べて何がどうおかしい」のかについても記載願います。
tansan_shuwa

2022/09/13 04:09

ご返答ありがとうございます。 csvのサンプルは 1,レモンコンク,360 2,ライムコンク,360 3,カルピス,360 4,ピーチ,550 5,カシス,550 です!
m.ts10806

2022/09/13 04:13

質問編集して本文に追記してください。
tansan_shuwa

2022/09/13 04:18

コードブロックのやり方ありがとうございます!やり方はわかったのですが、この質問への解答欄ではコードブロックができなくて、、解決方法を投稿する場所ではできるようなのですが、そちらでもよろしいのでしょうか?すいません。はじめての投稿なもので、、
m.ts10806

2022/09/13 04:24

コメント欄ではできません。 回答欄は解決につながる投稿する場所なので、質問への追記ならダメです。 質問本文を編集すれば良いです。
m.ts10806

2022/09/13 04:25

こちらは「質問への追記修正依頼」のコメント欄なので、「この質問への解答欄」ではありません。 あくまで「質問本文」を編集してください。 投稿者のみ編集ボタンがあるはずです(質問投稿したことがないので場所までは分かりませんが)
tansan_shuwa

2022/09/13 04:27

なるほどです!とてもご丁寧にありがとうございます。編集をしてみたのでご確認お願いいたします。
guest

回答2

0

例示のようなcsvの持ち方ならこう

PHP

1<?PHP 2$fp=fopen('sample.csv','r'); 3print <<<eof 4<table> 5<thead> 6<tr> 7<th>ID</th> 8<th>名前</th> 9<th>値段</th> 10</tr> 11</thead> 12<tbody> 13 14eof; 15while(($row = fgetcsv($fp))!==false) { 16 print "<tr>".PHP_EOL; 17 foreach($row as $val){ 18 print "<td>".htmlspecialchars($val)."</td>".PHP_EOL; 19 } 20 print "</tr>".PHP_EOL; 21} 22print <<<eof 23</tbody> 24</table> 25 26eof;

投稿2022/09/13 04:36

yambejp

総合スコア114843

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

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

0

ベストアンサー

ウェブで表示してみるとこのようになります。

print_r()はあくまで変数の情報を表示しているだけで「出力」とは違います。
配列であれば展開された状態で表示します。

以下のコードでご自身で各行の各列を配列に格納するようにしていて、それらを別々でprint_r()しているためにそのように出ているのかと。

PHP

1 while($line = fgetcsv($f)) { 2 for ($i=0;$i<count($line);$i++) { 3 $id[]=$line[0]; 4 $drink[]=$line[1]; 5 $money[]=$line[2]; 6 } 7 } 8

なお、print_r()はvar_dump()と同じく、画面表示のためではなく、「デバッグ」のために利用される機能と思います。(私の中ではデバッグ用途以外で使うシーンはないと思ってます)

whileで行が一行ずつ取り出され、
forで列が1つずつ取り出されているわけですよね?
以下のようにされるととりえずHTMLにはできます。

PHP

1 while($line = fgetcsv($f)) { 2 echo "<tr>"; 3 for ($i=0;$i<count($line);$i++) { 4 echo "<td>".$line[$i]."</td>"; 5 } 6 echo "</tr>"; 7 } 8

結果格納用 とされている変数3つとそれらのprint_rは不要です。

ただコードを見た感じ
<table class="php">の中に<table>があったり、そもそもHTMLとして正しくない構造になっているように見受けられますので、私が提示したように直したとしても、想定通りにレイアウトされるかどうかは不明です。

ひとまずPHP度外視で、HTMLだけで組んでみて「想定のレイアウト」を組んでみてはどうでしょう。

投稿2022/09/13 04:35

m.ts10806

総合スコア80850

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

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

tansan_shuwa

2022/09/13 06:13

print_r()の件とても分かりやすかったです!ありがとうございます! とりあえずhtmlでの表示は完成しました! では、配列に格納してそちらを表示するのはまた違う方法を調べてみないと活用できないということですよね。 丁寧でわかりやすい説明ありがとうございました!tableについても見直してみようと思います!
m.ts10806

2022/09/13 06:19

そもそも$lineが配列なのでそのまま出力すれば良いという話です。 別々にまた別の配列に保持して「何がしたいか」にもよりますが。
tansan_shuwa

2022/09/13 17:01

発注をメモするものを作成しているので、配列に保存した品目と値段に見合った個数を保存するのに別の配列のほうが便利かなと思いました。$lineを出力すればいいのがわかったのでそれを使ってそのページも作ってみようと思います。本当にご丁寧にありがとうございました。とても助かりました。
m.ts10806

2022/09/14 01:01

1つずつ確実に確認することだと思います。 ①どのようなレイアウトにするか(お絵描き) ②そのレイアウトを実現するHTMLを組む(表示内容は仮でOK) ③取得したいデータを取得できるSQLを作成(直に実行) ④③のSQLを利用して取得したいデータをPHPで取得できるか(単にechoだけでOK) ⑤④で取得したデータを②のHTMLに当てはめる それぞれミニマムで確認していけば、どこで間違ったかが追えるので、 1ターンずつ区切って対応してみてください。 決して一気にしようとしないことです(どんな熟練者でも作業を細分化してミニマム構成で確認してから結合して完成を目指します。そのほうが間違いがなく、何かあった時に問題を追いやすいから)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問