PHPで抽出した結果をリスト上に反映させたい
PHP初心者の為、説明に不足があるかもしれませんがご了承頂きたく存じます。
DBから受信したCSVデータをPHPで抽出してHTMLのリストとCSVファイルに反映させたいのですが、PHPにて抽出した結果がHTMLファイル上に結果が表示されず、PHPファイル上に出力されます。色々、ネットで調べたりしたのですが、解決できませんでした。
PHPにお詳しい方、ご教授頂けますと幸いで御座います。宜しくお願い致します。
■動作について
・DBとの接続動作に問題は御座いません。
・リストボックスからの抽出動作にも問題御座いません。■実現したいこと
・ブラウザにてsearch.phpに抽出結果が表示されます。
その抽出結果をindex.phpのリストに反映させたいです。
■抽出に使用したcsvファイル(list.csv)
item1,item2
富士山,テスト1
信濃川,テスト2
箱根山,テスト3
利根川,テスト4
■HTMLファイル(index.php)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<div id="contents">
<h3>リスト</h3><br>
<div id="app">
<sortable-table :columns="columns" :rows="rows">
</sortable-table>
</div>
<!-- DBのデータをPHPで処理 -->
<?php
// PostgreSQLに接続
$conn = pg_connect('host=localhost dbname=test user=XXXX password=XXXX');
// CSVファイルをセットする。SQL文を実行 ディレクトリはフルパス
//tmpフォルダには権限を付与すること!変更が必要
$query = "COPY m_test TO '/Applications/MAMP/htdocs/web4/tmp/list.csv' CSV HEADER";
//下は、field_aのadd_1のみ
//$query = "COPY (SELECT * FROM test_json WHERE field_a = 'add_1') TO '/Applications/MAMP/htdocs/web5/tmp/list.csv' CSV HEADER";
$result = pg_query($conn, $query);
// SQL文を実行 リスト用 http://php.net/manual/ja/function.pg-query-params.php
//カテゴリーを抽出して表示する方法
$result = pg_query("SELECT * FROM m_test");
// 全てのデータを配列で取得
$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);
?>
<!-- リストEND -->
<!-- CSVダウンロード -->
<div class="csvbutton">
<a id="download" href="tmp/list.csv" download="tmp/list.csv" onclick="handleDownload()">CSVダウンロード</a>
</div>
<!-- CSVダウンロードEND -->
</div><!-- /#main -->
<!-- 右メニュー -->
<div id="ham-menu">
<form action="search.php" method="post">
<ul class="submenu">
<li> 項目:<select name= "categorysearch">
<option value="yama">山</option>
<option value="kawa">川</option>
<option value="all">すべて</option>
</select>
</li>
</ul>
<p class="button"><input type="submit" value="抽出"onclick="" class="clickBtn()" style="width:100px;height:30px"></p>
</form>
</div>
<!-- 右メニューEND -->
<div id="menu-background"></div>
</div><!-- /#contents -->
<footer>
</footer>
<div class="totop"><a href="#"><img src="images/totop.png" alt="ページのトップへ戻る"></a></div><!-- /.totop -->
</body>
</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);
?>
■補足事項
・PHPバージョン 5.6.30
・postgrespsqlバージョン 10.5■PHPエラー
search.phpの42行目にエラーが発生しております。
※42行目の該当コードは以下です。
「 foreach($data as $rows){」■PHPエラー内容
PHP Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/web9/search.php on line 42■ 「pg_fetch_all($result」をvar_dumpした際の結果(「山に」て検索)
山array(2) { [0]=> array(2) { ["item1"]=> string(16) "富士山 "
["item2"]=> string(16) "テスト1 " } [1]=> array(2) {
["item1"]=> string(16) "箱根山 " ["item2"]=> string(16) "テスト3 " } }