初心者にて、説明不足があるかもしれませんが、ご了承頂きたく存じます。
サーバーから受信した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