• ベストアンサー

submit後、デスクトップに保存

お世話になっております。 現在、サーバー上でPHPからcsvを生成し、ダウンロードを行うプログラムを開発中です。 画面遷移は、 画面はユーザー画面と管理画面があります。 1、ユーザーがユーザー画面のformに必要な項目を入力して、データベースに随時登録していく。この時、CSV出力フラグを未出力とする。 2、ユーザーの入力結果を管理者は月1回程度、管理画面から未出力のデータを一覧としてCSV出力を行う。 3、CSVのダウンロードが完了したら、未出力フラグを出力済みフラグに変更する。 ここで質問なのですが、例えば保存画面(「開く」、「保存」、「キャンセル」がある画面)の保存を押した次の画面が、どこに保存するかの画面だと思いますが、正しく保存が行われない限り(キャンセルを押した等)フラグの変更を行なわないようにするのは可能なのでしょうか? 例えば保存画面であれば、「キャンセルが押されたら」とif文で制御できそうな気がするのですが、どこに保存するか画面では何を押したかを判定するのはできるのですか? よろしくお願い致します。

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

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.5

『データベースから CSV データをダウンロード できるリンクを生成して CSV リストに追加。』 う~ん、 CSV 生成するとき、POST リクエストでサーバサイドプログラムに送信して、処理すると思うけど、それを簡単にしただけ。 生成した、CSV を DB に保存するときに、ID をつけて保存すると思うんだけど、その ID でクエリをかけて text/csv で、CSV を返す、サーバサイドプログラムを書けばいいだけ。 https://example.com/download_csv?id=(CSVのID) みたいな感じ。 ちなみに、CSV の生成が 4秒以内におわるなら、CSV の保存も要らなくて、その都度、生成すればよくて、 30秒以上なら、夜中とかに自動バッチで CSV を生成しておいて、管理者にダウンロードの URL をメールで知らせておしまい。 。。。でいいような気がする。

teckiko
質問者

お礼

dscripty 様 この度はお世話になりました。 無事に開発することができました! また、もし何かありましたらご相談に乗ってください。 どうもありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

ANo.1です。 >上からの指示でできる限り管理者を救う方法を検討しろ 私なら・・。 ダウンロードして保存したら(ダウンロード画面の)所定のボタンを押してもらうようにして、それで成否を通知してもらう(そのボタンがsubmitされるまでは送ったことにしない)くらいしか思いつきませんね。 そのためだけにWin32アプリを作るかどうかは微妙です。そこまでやるなら完全に『自動化』してしまいたくなりますし・・・。作るとなれば、httpを扱えるライブラリがあれば比較的簡単だとは思います(ウチの社内用アプリのバージョンアップはhttpで自動ダウンロードの仕様です)。

teckiko
質問者

お礼

shimix 様 いつもお世話になります。 >ダウンロードして保存したら(ダウンロード画面の)所定のボタンを押してもらうようにして、それで成否を通知してもらう(そのボタンがsubmitされるまでは送ったことにしない)くらいしか思いつきませんね。 質問にはCSVダウンロードと記載しましたが、当初は仰っている方法と同じ意味で、例えば「出力済みにする」みたいなボタンを押すルールにするはずだったのが、押し忘れを防止できないか とのことで、ウィンドを閉じる際に「出力済みにする」が押されていません! などと促す方法もありました。 現在、shimix 様のパターンも含めて、もう一度話し合っているところです。

すると、全ての回答が全文表示されます。
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.3

おっしゃっているような保存処理はブラウザの機能になります。 PHPはあくまでサーバーサイドでプログラムが実行されて、その結果をなんらかの形で出力するものです。 受け取った側(ブラウザ)自体を操作する事はできません。 サーバーサイドプログラムがブラウザを自由に制御できるようになっちゃったら、エライ事になっちゃいます。 ではクライアントサイドのjavascriptで出来るかと言うとこれも困難です。 というかほぼ不可能です。 これもセキュリティ的に考えれば当たり前のことです。 ブラウザ上のjavascriptがブラウザそのものの制御機能は奪えないです。 ブラウザ自身に付加する機能(例えばIEであればActiveXなど)によって、かなり想定しているものに近い形は実現できると思います。 ただ、そこまでするくらいならVBなりで、管理機能を単体で作った方がたぶん早いです。 ブラウザでは無く、一つのWindowsアプリを作る感じですね。

teckiko
質問者

お礼

1minn 様 なるほど、windowsアプリですか。それは思いつきませんでした。 No.2のdscripty 様が仰っている方法をまずはじめに検討したのですが、上からの指示でもっと救う方法はないのかと、それこそ質問のように保存した/キャンセルをした の判定ができるのであれば、それに越したことはない とのことでしたので、まあ無理だろうとも思いつつも質問を致しました。 >サーバーサイドプログラムがブラウザを自由に制御できるようになっちゃったら、エライ事になっちゃいます。 >ではクライアントサイドのjavascriptで出来るかと言うとこれも困難です。 というかほぼ不可能です。 これもセキュリティ的に考えれば当たり前のことです。 ブラウザ上のjavascriptがブラウザそのものの制御機能は奪えないです。 そうですね。どう考えてもセキュリティ的にまずい気がしていました。 アプリの件も検討していきます。 丁寧な説明と、アドバイスありがとうございました!

すると、全ての回答が全文表示されます。
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

Submit すると、 サーバで CSV を生成して、データベースに保存。 データベースから CSV データをダウンロードできるリンクを生成して CSV リストに追加。 出力済みフラグに変更する。 管理者は、 いつでも CSV リストを確認できて、 いつでも、ダウンロードできる。 CSV リストの各項目は、不用になったときに、削除できて、 削除すると、データベース上の CSV も消える、、、ことにしてもいいし、削除できないようにして、データベースの運用に任せてもいい。 。。。かな?

teckiko
質問者

お礼

dscripty 様 ありがとうございます! 実ははじめの段階では、仰っている方法を検討していました。しかし、もっと救う方法があるのではないかと思い質問を致しました。 一つだけ、お聞かせください。 >データベースから CSV データをダウンロードできるリンクを生成して CSV リストに追加。 ここのやり方がイマイチわかりません。 どのようにダウンロードインクをその都度自動生成すればいいのでしょうか? 何度も質問をして申し訳ありません。 どうぞよろしくお願い致します。

teckiko
質問者

補足

dscripty 様 ありがとうございます! 実ははじめの段階では、仰っている方法を検討していました。しかし、もっと救う方法があるのではないかと思い質問を致しました。 一つだけ、お聞かせください。 >データベースから CSV データをダウンロードできるリンクを生成して CSV リストに追加。 ここのやり方がイマイチわかりません。 どのようにダウンロードインクをその都度自動生成すればいいのでしょうか? 何度も質問をして申し訳ありません。 どうぞよろしくお願い致します。

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

サーバ側では「データを送り返す」ことしか出来ません。それから先にローカルPCでやった操作を知る手段は用意されていません。 データを送ったら「受け取って保存しただろう」と思うしかないです。

teckiko
質問者

お礼

shimix 様 いつもお世話になっております。 >データを送ったら「受け取って保存しただろう」と思うしかないです。 そうなのです。まさにそこが問題で、上からの指示でできる限り管理者を救う方法を検討しろとのことで、その管理者たる人はexcelの表作成や簡単な関数を扱うことができる程度の人を想定しているようです。 なので、PC側から保存した/キャンセルしたのアクションが受信できるのであれば、もしかしたら・・・ と思ったのですが、やはり他の方が仰っているような方法が適切ですね。 アドバイスありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A