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

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

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

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

Q&A

解決済

2回答

4503閲覧

PHP CSVファイルの生成と保存指定

ROONIN

総合スコア22

PHP

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

0グッド

0クリップ

投稿2019/09/27 02:42

編集2019/09/27 03:08

行き詰まったので教えて下さい。

まずやりたいことが2つあります。
1、データの配列0にカラム名が欲しい
2,ファイルに名前をつけて保存のダイアログが出したい

1、
Ajaxの戻り値でデータベースのキーを取得し
GetNewmaster($number);で関数を動かし
$data = 配列として入れます

例:
1,0,0
2,0,0

しかし、普通に
select * from test where id ="$human_number';
で、sql発行しても データしかセレクト出きません

項目名を最初に入れたいんですが 調べてもどのようにやるのか無くて困っています。
データベースから項目名をセレクトするのか
CSV生成部分で項目名を入れるのか・・

2、
csvを生成し
headerで名前を付けて保存できるようにしたいのですが
これが全く動きません。

php

1 2function GetNewmaster($human_number){ 3 global $USER_NAME; 4 global $PASS; 5 global $SERVER_NAME; 6 $ConnectOracle = ConnectOracle($USER_NAME, $PASS, $SERVER_NAME); 7 //品番抜き出しsql 8 $PersonalDate_sql = "select * from TEST where id ='" . $human_number . "' ORDER BY workday DESC"; 9 //UTF-8からSJISにエンコード 10 $PersonalDate_sql = mb_convert_encoding($PersonalDate_sql, "sjis-win", "utf-8"); 11 //oracle → parse 12 $id = oci_parse($ConnectOracle, $PersonalDate_sql); 13 //oracle → execute 14 oci_execute($id); 15 while ($row = oci_fetch_array($id, OCI_ASSOC + OCI_RETURN_NULLS)) { 16 $row = mb_convert_encoding($row, "utf-8", "sjis-win"); 17 $Result[] = $row; 18 } 19 //oracle → 接続クローズ 20 oci_close($ConnectOracle); 21 return $Result; 22} 23 24if($_REQUEST["csv_get"]){ 25 $csvdata = "test.csv"; 26 $number = $_REQUEST["csv_get"]; 27 $data = GetNewmaster($number); 28 $fp = fopen('test.csv', 'w'); 29 foreach ($data as $line) { 30 fputcsv($fp, $line); 31 } 32 fclose($fp); 33$filepath = 'test.csv'; 34header('Content-Type: application/octet-stream'); 35header('Content-Length: '.filesize($filepath)); 36header('Content-Disposition: attachment; filename=test.csv'); 37// ファイル出力 38readfile($filepath); 39 exit(); 40} 41

ご教授よろしくお願い致します。

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

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

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

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

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

m.ts10806

2019/09/27 02:45

コードはマークダウンのcode機能を利用してご提示ください。 また、自作関数は定義部分もコード提示してください
m.ts10806

2019/09/27 02:46

それに…このコードだと結局どういう名前でファイルを作りたいのかわかりません。
退会済みユーザー

退会済みユーザー

2019/09/27 02:57

CSVファイルを生成してダウンロードさせるphpってことですかね? 《全く動きません》Xdebugモジュールを組み込んでステップ実行するとか手はあると思うのですが。
ROONIN

2019/09/27 03:10

ご指摘ありがとうございます 自作関数も提示忘れていたのでしました。 よろしくお願い致します。
guest

回答2

0

ベストアンサー

1.クエリー結果のカラム名がほしいって話だけど、
PDOでデータベースにアクセスしているならば
PHP: PDOStatement::fetch - Manual
fetch()でfetch_styleにPDO::FETCH_ASSOCを指定すれば
連想配列のようにデータ取得できるので、
1行目を出力する直前に配列のキーを出力すればいいんじゃないかと思った。

厳密にやるなら、
システムカタログ?とかからテーブル構造を格納するテーブルに対して
select文を実行するやり方もあったような。
mysql/mariadb、postgresqlでそれぞれやり方が違うので細かくは触れない。

2.おすすめのやり方として、
php内部ではutf-8のままファイルに書き出しておいて、
別途、ファイルを読み込んでsjis-winに変換して保存して、
それを応答するって流れかもしれない。

ご参考まで:
PHPでExcelで開いても文字化けしないCSVを出力する - Qiita

投稿2019/09/27 03:04

編集2019/09/27 03:14
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

最終的にPHP内で表題を作り、データベースのデータをくっつけて保存しました
とりあえず解決しました!

ただ、私が悪いんですが、ajaxで保存しようとしたため、うまく行きませんでした
セキュですね。。。

htmlとphpのみでやれば良かったのに気づくのに時間がかかりました
精進したいと思います。

投稿2019/10/03 07:29

ROONIN

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問