- 締切済み
入力フォームにおける配列データに関して
こんにちは。お世話になっております。 タイトルにあるように、フォームの中に入力されたデータを配列として、POSTするようなものを作成しました。 こんな感じ。 <p>ファイル</p> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <p>キーワード</p> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> このフォームは、ファイルをアップロードし、かつ各ファイル毎に関連するキーワードを入力・登録させるためのものですが、データをPOSTしたとき、ファイルもキーワードも配列としているので、ファイル1段目とキーワード1段目。ファイル2段目とキーワード2段目・・・といった形で配列に格納されるものと思っておりましたが、ファイルがローカル上の同じフォルダ内にあるものに限っては、配列への格納順が保たれるのですが、違うフォルダからアップロードさせると、配列への格納順が保たれないことに気付きました。 そもそも、上記のようなフォームの作成は誤っているものなのか? それとも、このような場合、違う形式でのフォームを作成すべきなのか?などなど・・ 経験の乏しい私には解決策が見出せずに、今回投函させていただいた次第です。 お忙しい中恐縮ですが、アドバイスなど頂戴出来れば幸いです。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>どのような形式でデータを受取るのでしょうか? 具体的にやってみると自明ですが、PHP側では序数のついた配列に おさめられます。hoge[0]、hoge[1]、hoge[2]、という名前でわたした 場合、性質上hoge[]、hoge[]、hoge[]と渡すのと同じ結果になるはずです。 それをhoge[aaa]、hoge[bbb]、hoge[ccc]などにするとそういう連想配列に なります。 >配列っぽくする必要ないという認識で宜しかったでしょうか? そこは考え方しだいですね・・・ だいたいそのような場合、PHP側では配列としてあつかったほうが 処理はしやすいです。たいていhoge[]のようにデータを渡す場合は、 処理的にはforeachなどのループ処理になりますので、任意の名前で hoge1、hoge2、hoge3のようにするとループするにも追加処理が発生します。
- yambejp
- ベストアンサー率51% (3827/7415)
よく、配列としてPOSTされていると勘違いをされている方がいますが、 配列っぽい名前でPOSTされているだけなので、もう少し明示的に 名前を指定すればよいでしょう、たとえばこんな風・・・ <input type="text" name="keyword[0]" size="18"><br> <input type="text" name="keyword[1]" size="18"><br> <input type="text" name="keyword[2]" size="18"><br>
お礼
yambejpさんへ こんにちは。お世話になっております。早速の対応をありがとう御座います! > 配列っぽい名前でPOSTされているだけなので、 ふむふむ・・なんとなく仰りたいことが分かるような気がしますが、要はあくまでname属性であり、配列ではない、という認識で宜しいのでしょうか? ところで、先に投函した際に記述したフォームですが、この場合、POSTされた側に、print_r($keyword);とすると、$keywordには配列データがあることが確認出来るかと思いますが、今回、yambejpさんのアドバイスのように、 <input type="text" name="keyword[0]" size="18"><br> <input type="text" name="keyword[1]" size="18"><br> <input type="text" name="keyword[2]" size="18"><br とした場合、POSTされる側からして、どのような形式でデータを受取るのでしょうか? 質問ばかりのようですが、ちょっと頭を整理したいと思いますので・・。 以上、お忙しい中恐縮ですが、宜しくお願い申し上げます。
補足
補足から失礼します。 ちょっと考えてみたのですが、今回、name="keyword[0]" といった形でご指導いただきましたが、質問にある“ファイルのデータが配列に格納されたとき、状況によってインデックス一が変わる”ということも、ファイル用フォームも、name="fl[0]"とった形で設定すれば宜しいということになるんでしょうか? また、name="fl[0]"というのも、単にname="fl1"、name="fl2"、name="fl3"と、各フォームも、“[]”と、配列っぽくする必要ないという認識で宜しかったでしょうか?
お礼
こんばんは。早々のお返事をありがとう御座います。 yambejpさんからのアドバイスを踏まえ、ちょっと見直してみようと思います。 改めご質問するかも知れませんが、解決するまで、このままにさせていただきます。 以上、取り急ぎご挨拶までに・・。 ありがとう御座いました。