前提
DBから取得したデータを一覧画面に表示し、CSVボタン押下後、CSVデータがダウンロードする
という機能をPHPで作っています。
実現したいこと
CSVボタン押下後、CSVデータがダウンロードする
発生している問題・エラーメッセージ
・ループした結果、最期の1件しか出力しない
・ボタン押下時でなく、ロード時にCSV出力の処理が動く
該当のソースコード
<tn0010.php>
// CSV出力 $sqlC = ""; $sqlC .= " SELECT "; $sqlC .= " KANRINO,"; $sqlC .= " keiti.KEITAINM AS KEITAINM,"; $sqlC .=" YOUTO,"; $sqlC .=" tant.TANTNM AS TANTNM,"; $sqlC .=" MAKER,"; $sqlC .=" OS,"; $sqlC .=" IPADDRESS,"; $sqlC .=" CPUNM,"; $sqlC .=" DOMEIN,"; $sqlC .=" CPU,"; $sqlC .=" KOASU,"; $sqlC .=" MEMORI,"; $sqlC .=" DESK1,"; $sqlC .=" DESK2,"; $sqlC .=" DESK3,"; $sqlC .=" DESK4,"; $sqlC .=" DESK5,"; $sqlC .=" OSLICENCE,"; $sqlC .=" OFFICE,"; $sqlC .=" CASE WHEN KONYUYM IS NULL THEN '-' ELSE SUBSTR(TO_CHAR(KONYUYM,'000000'),1,5) || '/' || SUBSTR(TO_CHAR(KONYUYM,'000000'),6,2) END KONYUYM, "; $sqlC .=" CASE WHEN HAIKIYM IS NULL THEN '-' ELSE SUBSTR(TO_CHAR(HAIKIYM,'000000'),1,5) || '/' || SUBSTR(TO_CHAR(HAIKIYM,'000000'),6,2) END HAIKIYM, "; $sqlC .=" BIKO,"; $sqlC .=" KANRINO_OYA"; $sqlC .= " FROM "; $sqlC .= " public.M_TANMATU tanm "; $sqlC .= " LEFT JOIN "; $sqlC .= " public.M_TANT tant "; $sqlC .= " ON "; $sqlC .= " tanm.tantcd = tant.tantcd "; $sqlC .= " LEFT JOIN "; $sqlC .= " public.M_KEITAI keiti "; $sqlC .= " ON "; $sqlC .= " tanm.keitaikb = keiti.keitaikb "; $sqlC .= " ORDER BY" ; $sqlC .= " kanrino"; $resC = dbGetList($pdo_conn, $sqlC); $datalistC = dbGetList($pdo_conn, $sqlC); foreach($resC as $row) { $KANRINO[$count2] = $row['kanrino']; $KANRINO_OYA[$count2] = $row['kanrino_oya']; $IPADDRESS[$count2] = $row['ipaddress']; $KEITAINM[$count2] = $row['keitainm']; $YOUTO[$count2] = $row['youto']; $TANTNNM[$count2] = $row['tantnm']; $MAKER[$count2] = $row['maker']; $OS[$count2] = $row['os']; $CPUNM[$count2] = $row['cpunm']; $DOMEIN[$count2] = $row['domein']; $CPU[$count2] = $row['cpu']; $KOASU[$count2] = $row['koasu']; $MEMORI[$count2] = $row['memori']; $DESK1[$count2] = $row['desk1']; $DESK2[$count2] = $row['desk2']; $DESK3[$count2] = $row['desk3']; $DESK4[$count2] = $row['desk4']; $DESK5[$count2] = $row['desk5']; $OSLICENCE[$count2] = $row['oslicence']; $OFFICE[$count2] = $row['office']; $KONYUYM[$count2] = $row['konyuym']; $HAIKIYM[$count2] = $row['haikiym']; $BIKO[$count2] = $row['biko']; $W_CSV = array( "kanrino" => $KANRINO[$count2] ,"kanrino_oya" =>$KANRINO_OYA[$count2] ,"ipaddress" => $IPADDRESS[$count2] ,"keitainm" => $KEITAINM[$count2] ,"youto" => $YOUTO[$count2] ,"tantnm" =>$TANTNM[$count2] ,"mekar" => $MAKER[$count2] ,"OS" => $OS[$count2] ,"cpunm" => $CPUNM[$count2] ,"domein" => $DOMEIN[$count2] ,"CPU" => $CPU[$count2] ,"koasu" => $KOASU[$count2] ,"memori" => $MEMORI[$count2] ,"desk1" => $DESK1[$count2] ,"desk2" => $DESK2[$count2] ,"desk3" => $DESK3[$count2] ,"desk4" => $DESK4[$count2] ,"desk5" => $DESK5[$count2] ,"OSlicence" => $OSLICENCE[$count2] ,"Office" => $OFFICE[$count2] ,"konyuym" => $KONYUYM[$count2] ,"haikiym" => $HAIKIYM[$count2] ,"biko"=> $BIKO[$count2] ); $count2+=1; } function putCsv($data) { try { //CSV形式で情報をファイルに出力のための準備 $csvFileName = '/tmp/'. 'tanmatu.csv'; $res = fopen($csvFileName, "w"); if ($res === FALSE) { throw new Exception('ファイルの書き込みに失敗しました。'); } // 項目名先に出力 $header = ["kanrino", "kanrino_oya", "ipaddress", "keitainm","youto","tantnm","mekar","OS","cpunm","domein","CPU","koasu","memori", "desk1","desk2","desk3","desk4","desk5","OSlicence","Office","konyuym","haikiym","biko"]; fputcsv($res, $header); // ループしながら出力 foreach($data as $dataInfo) { // 文字コード変換。エクセルで開けるようにする mb_convert_variables('SJIS', 'SJIS', $dataInfo); // ファイルに書き出しをする fputcsv($res, (array)$dataInfo); } // ファイルを閉じる fclose($res); // ダウンロード開始 // ファイルタイプ(csv) header('Content-Type: application/octet-stream'); // ファイル名 header('Content-Disposition: attachment; filename=' . $csvFileName); // ファイルのサイズ ダウンロードの進捗状況が表示 header('Content-Length: ' . filesize($csvFileName)); header('Content-Transfer-Encoding: binary'); // ファイルを出力する readfile($csvFileName); } catch(Exception $e) { // 例外処理をここに書きます echo $e->getMessage(); } } putCsv($W_CSV); $smarty->assign("W_KENSAKU", $W_KENSAKU); $smarty->assign("datalist", $datalist); $smarty->display("tn0010.tpl");
<tn0010.tpl>
<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="./style.css"> <TITLE>test</TITLE> 中略 <TD><INPUT type="button" name="sa" value="CSV出力"></TD> 中略 <FORM name="form2" action="tn0010.php" method="POST"> <INPUT type="hidden" name="W_CSV" value=""> </FORM> </BODY> </HTML>
試したこと
functionの処理を.tplで試して、<INPUT type="hidden" name="W_CSV" value="" Onclick = "function名"();>にするのを試しました。
こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
退会済みユーザー
2022/07/27 05:25
退会済みユーザー
2022/07/27 05:36
退会済みユーザー
2022/07/27 05:36
退会済みユーザー
2022/07/27 05:39
退会済みユーザー
2022/07/27 05:41
退会済みユーザー
2022/07/27 05:53
退会済みユーザー
2022/07/27 06:55
退会済みユーザー
2022/07/27 06:55
退会済みユーザー
2022/07/27 08:52