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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

3回答

5490閲覧

phpの連想配列をsubmit後も保持し続けたい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2015/06/15 05:54

PHP、Smarty、Jqueryが使える環境です。

formと<input type="file"> でタブ区切りのファイルを読み込み(実際にアップロードはせずに$_FILES[$name]["tmp_name"]で読み込み)php側で連想配列を作っています。

その連想配列のデータを再度、formでsubmitした後も保持し続けたいのですが、良い方法はありますでしょうか?

小さな変数などであれば、<input type="hidden" value={var}>のような形でsmartyで渡しておけば何度sumbmitしても保持できると思うのですが、連想配列の場合の保持の仕方がわからず困っています。

読み込んだファイルを一時ファイルとしてサーバにアップロードすればいいとは思うのですが、できればアップロードせずに実現したいです。

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

formと<input type="file"> でタブ区切りのファイルを読み込み(実際にアップロードはせずに$_FI>LES[$name]["tmp_name"]で読み込み)php側で連想配列を作っています。

↑ですが、少し誤解があるかと思いますので追記して置きます。
Submitでファイルをサーバに転送した場合、サーバに作業ファイル形式でファイルが必ずアップロードされます。
その為、もしこのデータをサーバ上に残したくない場合ファイルを削除を行う必要があるのではないか思います。

続いて本題ですが、データをアップロードした際の連想配列保持に関してですが一般的には、データをJSONデータ等に変換してデータとして保持する方法が良いのではないでしょうか?

また考え方によっては、セッションやクッキーで保持する事も可能かと思いますが、アップロードするデータの容量ではデータの保持が難しくなる可能性もあります。

投稿2015/06/15 06:51

takayukiinaba

総合スコア1158

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

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

退会済みユーザー

退会済みユーザー

2015/06/15 07:34

回答頂きありがとうございます! >Submitでファイルをサーバに転送した場合、サーバに作業ファイル形式でファイルが必ずアップロードされます。 その為、もしこのデータをサーバ上に残したくない場合ファイルを削除を行う必要があるのではないか思います。 →説明不足で申し訳ありません。ファイルがテンポラリディレクトリに一時保存されるのは理解しておりました。ただ、再度submitした時にはすでにその一時ファイルがなかったので、move_uploaded_file等で別フォルダにコピーしない限りは特に削除する必要はないという認識でした。いかがでしょうか? 取り急ぎ、ファイルを一時的に別フォルダにコピーして対応してしまいましたが、JSONデータに変換は良さそうですね。検討させて頂きます。
takayukiinaba

2015/06/15 08:22

coziさん →説明不足で申し訳ありません。ファイルがテンポラリディレクトリに一時保存されるのは理解しておりました。ただ、再度submitした時にはすでにその一時ファイルがなかったので、move_uploaded_file等で別フォルダにコピーしない限りは特に削除する必要はないという認識でした。いかがでしょうか? こちらに関しては、私も記憶が曖昧なのでもしかするとmove_uploaded_file等しない限りサーバにはデータが残らないかも知れません。 ただし、何が起こるか判らないのでサーバにデータを保存して置いた方が何かと便利なのではないかと思います。 私も、問合せフォームなどを制作時にファイル添付機能があった場合、あえてサーバ上にファイルを残しておいたりしております。 処理が途中で止まってしまった場合やメールの添付データが何らかの原因により削除されてしまうなど発生するリスクを予め回避する策を講じておくもの一つの手法ではないかと。。。 どの様な運用を想定されているか判りませんが、ファイルデータを扱う際そのリスクについてもある程度想定しリカバリ出来るようにしておいた方が良いかと思います。
guest

0

一応、連想配列(などの変数)を文字列化するserialize関数がありますので、それをinput type=hiddenで保持するという方法もあります。
[PHP] 配列を文字列に変換して取っておく4つの方法 | Suinasia

ただ、データをHTMLを介して保持すると、悪意ある人物によって改変される可能性があります。
またデータが巨大な場合、PHPが生成するHTMLのサイズも増加するため、ページの読み込みが遅れたり、最悪ブラウザがクラッシュする可能性もあります。

このため、サーバ側にデータを保持する方法が適切であると考えます。
セッションは、PHPにはじめから用意された「サーバ側にデータを保持する」方法で、比較的簡単に利用できます。

投稿2015/06/15 07:43

sounisi5011

総合スコア697

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

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

退会済みユーザー

退会済みユーザー

2015/06/16 02:05

回答ありがとうございます! 4つの方法も2つは全く知らなかったので大変参考になりました。 何故か今関わっている案件はセッションがあまり使われていないのですが、セキュリティや読み込み速度を考えるとセッションが良いのですね。とても勉強になりました。ありがとうございます。
guest

0

連想配列をセッション変数に保存するのはいかがでしょう。
http://www.phpbook.jp/tutorial/session/index2.html

投稿2015/06/15 06:12

takutok

総合スコア392

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

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

退会済みユーザー

退会済みユーザー

2015/06/15 07:35

回答頂き、ありがとうございます! 参考URLもありがとうございます。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問