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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

1回答

1197閲覧

PHPで処理した結果をHTMLにて反映させたい

jam912sh

総合スコア25

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

1クリップ

投稿2018/09/09 11:11

編集2018/09/10 01:40

初心者にて、説明不足があるかもしれませんが、ご了承頂きたく存じます。
サーバーから受信したCSVデータをPHPで抽出してHTMLのリストとCSVファイルに反映させたいのですが、PHPにて抽出した結果がHTMLファイル上に結果が表示されず、PHPファイル上に出力されます。
色々、ネットで調べたりしたのですが、解決できませんでした。
PHPにお詳しい方、やり方をご教授頂けますと幸いで御座います。
宜しくお願い致します。

■検索前の画像
検索前
■検索後の画像
検索後

前提・実現したいこと

DBよりPostgreSQLを利用して、CSVファイルを生成し、
そのデータをHTML上にCSVダウンロードとリストにて表示させております。
そこまでは、順調に動作するのですが、更に抽出もできればと考えております。
下記のCSVを例に致しますと、「山」と検索したら「富士山」と「箱根山」が
抽出するような感じで御座います。

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

・HTML上に抽出した結果を表示されない。
・以下のPHPエラーが発生しております。
※42行目のコードは以下です。
「 foreach($data as $rows){」

PHP Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/web9/search.php on line 42

該当コード(list.csv)

item1,item2 富士山,テスト1 信濃川,テスト2 箱根山,テスト3 利根川,テスト4

該当コード(index.php)

index.php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<title>テスト</title> 6</head> 7<body> 8<div id="contents"> 9<!-- リスト --> 10 <h3>リスト</h3><br> 11 <div id="app"> 12 <sortable-table :columns="columns" :rows="rows"> 13 </sortable-table> 14 </div> 15 16<!-- DBのデータをPHPで処理 --> 17<?php 18 19 // PostgreSQLに接続 20 $conn = pg_connect('host=localhost dbname=test user=XXXX password=XXXX'); 21 22 // CSVファイルをセットする。SQL文を実行 ディレクトリはフルパス 23 //tmpフォルダには権限を付与すること!変更が必要 24 $query = "COPY m_test TO '/Applications/MAMP/htdocs/web4/tmp/list.csv' CSV HEADER"; 25 //下は、field_aのadd_1のみ 26 //$query = "COPY (SELECT * FROM test_json WHERE field_a = 'add_1') TO '/Applications/MAMP/htdocs/web5/tmp/list.csv' CSV HEADER"; 27 28 $result = pg_query($conn, $query); 29 30 // SQL文を実行 リスト用 http://php.net/manual/ja/function.pg-query-params.php 31 32 //カテゴリーを抽出して表示する方法 33 $result = pg_query("SELECT * FROM m_test"); 34 35 // 全てのデータを配列で取得 36 $data = pg_fetch_all($result); 37 38 print "<table id=\"dblist\" summary=\"PostgreSQLのデータベースの一覧\">\n"; 39 40 //テーブルヘッダとしてフィールド(カラム)名を出力 41 print "<thead><tr>\n"; 42 $flds = pg_num_fields($result); 43 for($i=0; $i<$flds; $i++){ 44 $field = pg_field_name($result, $i); 45 printf("<th abbr=\"%s\">%s</th>\n", $field, $field); 46 } 47 print "</tr></thead>\n"; 48 49 //データの出力 50 foreach($data as $rows){ 51 print "<tr>\n"; 52 foreach($rows as $value){ 53 printf("<td>%s</td>\n", $value); 54 } 55 print "</tr>\n"; 56 } 57 print "</table>\n"; 58 59 // PostgreSQLを切断 60 $close = pg_close($conn); 61 62?> 63<!-- リストEND --> 64 65<!-- CSVダウンロード --> 66<div class="csvbutton"> 67 <a id="download" href="tmp/list.csv" download="tmp/list.csv" onclick="handleDownload()">CSVダウンロード</a> 68</div> 69<!-- CSVダウンロードEND --> 70 71 </div><!-- /#main --> 72<!-- 右メニュー --> 73 <div id="ham-menu"> 74 <form action="search.php" method="post"> 75 <ul class="submenu"> 76 <li> 項目:<select name= "categorysearch"> 77 <option value="yama">山</option> 78 <option value="kawa">川</option> 79 <option value="all">すべて</option> 80 </select> 81 </li> 82 </ul> 83 <p class="button"><input type="submit" value="抽出"onclick="" class="clickBtn()" style="width:100px;height:30px"></p> 84 </form> 85</div> 86 87<!-- 右メニューEND --> 88<div id="menu-background"></div> 89</div><!-- /#contents --> 90<footer> 91 92</footer> 93<div class="totop"><a href="#"><img src="images/totop.png" alt="ページのトップへ戻る"></a></div><!-- /.totop --> 94</body> 95</html>

該当コード(search.php)

<?php // PostgreSQLに接続 $conn = pg_connect('host=localhost dbname=test user=XXXX password=XXXX'); $form=$_POST["categorysearch"]; // CSVファイルをセットする。SQL文を実行 ディレクトリはフルパス //tmpフォルダには権限を付与すること! $query = "COPY m_test TO '/Applications/MAMP/htdocs/web4/tmp/list.csv' CSV"; $result = pg_query($conn, $query); switch ($form) { case 'yama': echo '山'; $result = pg_query("SELECT * FROM m_test WHERE item1 = '富士山' OR item1 = '箱根山'"); break; case 'kawa': echo '川'; $result = pg_query("SELECT * FROM m_test WHERE item1 = '信濃川' OR item1 = '利根川'"); break; case 'all': echo 'すべて'; $result = pg_query("SELECT * FROM m_test"); break; } // 全てのデータを配列で取得 $data = pg_fetch_all($result); print "<table id=\"dblist\" summary=\"PostgreSQLのデータベースの一覧\">\n"; //テーブルヘッダとしてフィールド(カラム)名を出力 print "<thead><tr>\n"; $flds = pg_num_fields($result); for($i=0; $i<$flds; $i++){ $field = pg_field_name($result, $i); printf("<th abbr=\"%s\">%s</th>\n", $field, $field); } print "</tr></thead>\n"; //データの出力 foreach($data as $rows){ print "<tr>\n"; foreach($rows as $value){ printf("<td>%s</td>\n", $value); } print "</tr>\n"; } print "</table>\n"; // PostgreSQLを切断 $close = pg_close($conn); ?>

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

・PHPバージョン 5.6.30
・postgrespsqlバージョン 10.5

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

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

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

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

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

m.ts10806

2018/09/10 00:39

本当に何も出てないのか例えばループに関係のないprintしている箇所は出ているのか、どちらでしょうか。前者であればエラー表示がOnになっていないからエラーが出ていないということになります。ブラウザの「ソースを表示」で確認してください。
m.ts10806

2018/09/10 00:40

また、pg_fetch_all()の結果の$dataをvar_dump()するとどういう結果が出力されますか?
jam912sh

2018/09/10 01:29 編集

ご確認頂き有難うございます!大変失礼致しました。今一度確認いたしましたところ、PHPエラーが発生しておりました。追記いたしました。「search.php」の 42行目のコード foreach($data as $rows){箇所がエラーが出ている様でございます。
jam912sh

2018/09/10 01:32 編集

$dataをvar_dump()に変更後、プルダウンメニューから「川」を選択し、動作確認いたしましたところ、「川resource(5) of type (pgsql result) item1 item2」と表示されました。
m.ts10806

2018/09/10 01:41

変更…?var_dump()は変数の型、内容を出力するもので基本的にデバッグに使われるものです。「そこに想定通りの値がきているか」確認に使うのですが「変更」というのは何をどうされたのでしょうか?
jam912sh

2018/09/10 01:44

pg_fetch_all()の結果の$dataをvar_dump()するとどういう結果になるかと事で、そのように変更し、確認いたしました。抽出結果は問題御座いません。その結果をHTMLに反映できず、質問致しております。
m.ts10806

2018/09/10 02:05

なるほど。pg_fetch_all()の結果はarray()配列なのでresourceが入っているとおかしいですね。 確認するだけなら var_dump(pg_fetch_all($result)); でも良いですけど。同じ要領で pg_*の関数使って得られた結果が全て想定通りかも確認してみてください。
jam912sh

2018/09/10 02:42

貴重な情報有難うございます!pg_*の関数使って得られた結果が全て想定通りかも確認致します。
guest

回答1

0

ソースコードベタ貼りだと何をしているか追うのが面倒なのでエラーの特定方法だけ。

PHP Warning: Invalid argument supplied for foreach()

これはforeachの引数が配列(もしくはIterator)ではないため発生しています。
なので var_dump() などで中身が何なのか確認してみてください。

もし、中身がfalseであれば結果が0件もしくはクエリエラーなどが発生している可能性があります。
参考:http://php.net/manual/ja/function.pg-fetch-all.php

投稿2018/09/11 03:16

IshibashiTanaka

総合スコア152

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

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

jam912sh

2018/09/11 07:35

エラーの特定方法、ご教授頂き有難うございます! 教えて頂いたvar_dump()など活用して、今一度調査致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問