• ベストアンサー

GETの値について

phpとpostgresqlでデータのやり取りをしていてDBにinsertされたデータをcsv形式でブラウザにてダウンロードさせる仕組みを作っております。 download.phpにGETで値を渡してますが 1.download.php?date=2005_03 2.download.php?date=2005/03 1.ですと普通にファイル形式がcsv形式としてダウンロードされますが、2.ですとファイルの種類が空白で最終的には.txtとしてダウンロードされます。 GETの値で"/"(スラッシュ)を使った場合、正常にcsvとして認識されないものでしょうか?

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

GET文字列をどう解釈するかはブラウザの実装に任されている部分があります。/はURLの中でディレクトリの意味があるので、特定のブラウザがこれをうまく解釈できないとしても不思議はありません。 download.php?date=2005%2F03 としてみたらどうなりますか?これで正常に表示されれば原因はソレです。%2Fは/をURLエンコードした文字列です。

その他の回答 (2)

  • g_dori
  • ベストアンサー率47% (330/699)
回答No.2

日付とファイル名を関連付けているんじゃないでしょうか? '/'はファイルシステムの制限で使えないと思います。 GETのパラメータとして'/'を送る分には、単に文字列のひとつとして扱われるだけなので特に問題なかったような。

shilvia__s15
質問者

お礼

返答有難う御座います。 IEはtxtとしてダウンロードされますがfirefoxとoperaではきちんとcsvとしてダウンロードされました。 恐らくIEの何らかのパッチが影響しているのでは?と考えております。

回答No.1

GETで数字以外の文字列を渡す時はURL_ENCODEを掛けてあげた方が無難です。/はURLの中で意味がある文字なので、GET文字列の中では使えません。

shilvia__s15
質問者

お礼

返答有難う御座います。 IEはtxtとしてダウンロードされますがfirefoxとoperaではきちんとcsvとしてダウンロードされました。 恐らくIEの何らかのパッチが影響しているのでは?と考えております。

関連するQ&A

  • CSVファイルのダウンロード

    <環境> PHP4.3.2 Windows2000 PostgreSQL RedHat Linux <求めていること> DBのデータをCSVファイルに書き出し、 ダウンロードボタン押下で ダイアログがアップしファイル保存ディレクトリ選択、保存。 <現在のソース> サーバーにtest.csvファイル作成後、 現在HTMLでダウンロードボタン押下でdownload.phpを呼び出し <input type=button value="ダウンロード" onClick="location.href='download.php'"> ---------------- download.php ------------------- <?php // 1.ディレクトリ指定 //$filename="/test/test.csv"; // 2.ディレクトリ指定なし $filename = "test.csv"; header("Content-disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); ?> ---------------- download.php ------------------- 現在、 1番のディレクトリ指定だと downloadというファイルがダウンロードされるダイアログがアップし ダウンロードされます。 2番のディレクトリ指定なしだと もちろん空のtest.csvファイルがダウンロードされます。 実現したいのは/test/test.csvのファイルをダウンロードすることです。 色々なサイトで探してみて試しているのですが 初心者なもので、行き詰まってしまいました。 申し訳ありませんが ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • addslashesを使用したDBの登録内容

    <input type='text'・・の入力フィールドを含むPHPファイルを作成しました。このフィールドで入力された値を受け取りDB(postgreSQL)にinsertします。 この値を登録する前に、addslashes関数を通しています。 入力値:\500とした場合 DB(psqlコマンドでselectした)値:\\500 となるかと予想していたのですが、 (実際にバックスラッシュを挿入した文字列がDBに登録されるのかとおもっていました) DB(psqlコマンドでselectした)値:\500 と登録されます。 この登録内容が正常動作なのでしょうか。 addslashesを通さずにinsert文を発行すると、確かにDBエラーとなるので、addslashesは有効にはなっているかと思います。 長文で申し訳ありません。宜しくお願いいたします。 PHP 4.3.4 postgreSQL 7.3.6 php.ini のmagic_quotes_gpc = Off の環境です。

    • ベストアンサー
    • PHP
  • Windows bat でCSVデータを処理したい

    <CSVデータの内容> 0004 10,11,19,12,15,1192,0,00 10,11,20,17,30,1192,1,00 10,11,21,01,00,1193,0,00 10,11,22,20,00,1193,1,00 (1)CSVデータの行ごとに、7番目と8番目の値が0,00の場合、10,11,19を取得して値をDBにインサートしたい。 (2)CSVデータの行ごとに、7番目と8番目の値が1,00の場合、10,11,20を取得して値をDBにインサートしたい。 このような処理をするには、どうしたら、良いでしょうか?

  • phpからget送信で持ってきたデータの改行

    こんにちは。 phpから取得したデーターをjavascriptに渡して表示したいと考えています。 しかしながらjavascriptで改行ができません。何が原因でしょうか? <send.phpファイル> <?php $date_db="2012/12/03"; .$title_db="テスト"; $comment_db="送信可能"; echo "日時:".$date_db."\nタイトル:".$title_db."\nコメント:".$comment_db; ?> <htmlファイル(一部)> $.ajax({ type: "GET", url: "send.php", data: data, dataType: "text", success: function(data, dataType) { /** Ajax通信が成功した場合に呼び出される */ //初回アクセス時 if(result == null) { result = data; } //PHPより取得した値が違えばメッセージを<div id="text"></div>に出す if(result != data){ alert("情報が更新されました\n情報を確認してください"); $('#text').text(data); result = data; } }, <div id="text"></div> ブラウザ上で表示されると「 日時:2012/12/03タイトル:テストコメント:送信可能」になってしまいます。 お願いします。

  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • PHPからjavascriptへGETで値を渡すとき

    初歩的な質問で失礼いたします。 PHPからjavascriptへGETで値を渡すときにマルチバイト文字が文字化けしてしまいます。 javascriptのjQueryというライブラリを利用しています。 具体的には、 -------------- test.js -------------- var url = 'test.php?code=' + code; $.get(url, function(data){ alert(data); } -------------------------------------- --------------- test.php ------------- $input = $_GET['code'];  ・・・mysqlの処理・・・ echo $output; --------------------------------------- という処理をしています。 test.js → test.phpへ渡す値はマルチバイトではないので問題ないのですが、 test.php → test.jsへ返す値はマルチバイトで文字化けしてしまいます。 php側でrawurlencode関数でエンコードしてから、javascript側でdecodeURI関数を使用してデコードしたのですが、うまくデコードできませんでした。 恐らくデコードの仕方が悪いんだと思うんですが。。。 分かりにくい説明で恐縮ではございますが、ご回答をお願いいたします。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • $_GET['○○○']について

    初心者なので詳しく教えていただけると幸いです。 PHP でいう $_GET['○○○'] は、CGI形式のファイルで置き換えができる関数はあるのですか?

    • 締切済み
    • CGI
  • PHP→DB→CSV 「ダウンロードできません」

    DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

    • ベストアンサー
    • PHP
  • GETを使ったファイル間の値渡し

    現在、PHP・MySQLを使用した開発を行っております。 早速、質問に入りますが・・・まずは概要として以下のような使用となっております。 ・index.htmlからリンク時に、A.phpに飛びDBへアクセスし表示すべきURL(top.html)を取得します ・表示されたURL(top.html)には、5つのリンクがあるのですが5つのリンク先URLは、A.php処理中にDBにて取得した5つのパラメータ値としています。 つまり、top.html内に変数値として値を保持させておきたいのです。 sessionを使うという話しもあったのですが、諸事情により現在はGET関数を思考しております。 以上が概要です。 質問は、A.phpにて取得した5つの値をtop.htmlに渡すにはどのようなコーディングを行えば良いのでしょうか? PHP初心者のため苦戦しております。 何かアドバイスをお願いできれば幸いです。

    • ベストアンサー
    • PHP

専門家に質問してみよう