teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

フォーム送信について補足

2016/11/15 15:54

投稿

KaedeKazane
KaedeKazane

スコア408

answer CHANGED
@@ -5,4 +5,40 @@
5
5
  foreach($_POST[""] as $value){
6
6
 
7
7
  ```
8
- foreachが$_POST(配列)ではなく、$_POST[""](配列内の要素)を対象に動作しているのだと思います。
8
+ foreachが$_POST(配列)ではなく、$_POST[""](配列内の要素)を対象に動作しているのだと思います。
9
+
10
+ 追記
11
+ ---
12
+
13
+ フォーム要素はname属性で同じ名前をつけると、基本的に上書きされてしまいます。
14
+
15
+ ```
16
+ //送信HTML
17
+ <input type="text" name="text1" value="テキストデータ1" />
18
+ <input type="text" name="text1" value="テキストデータ2" />
19
+
20
+ //受信PHP
21
+ var_dump($_POST);
22
+ // array("text1"=>"テキストデータ2") ※「テキストデータ1」は上書きされてしまう
23
+
24
+ ```
25
+
26
+ しかし、下記のようにname属性に```[]```を付けると、その名前のついたフォーム要素は配列として送信されます。
27
+ $_POSTという配列に"text1"というキーで配列が入っている、**二次元配列**の状態で受け取ることになります。
28
+
29
+ ```
30
+ //送信HTML
31
+ <input type="text" name="text1[]" value="テキストデータ1" />
32
+ <input type="text" name="text1[]" value="テキストデータ2" />
33
+
34
+ //受信PHP
35
+ var_dump($_POST);
36
+ // array("text1"=>array(0=>"テキストデータ1", 1=>"テキストデータ2"))
37
+
38
+ var_dump($_POST["text1"]);
39
+ // array(0=>"テキストデータ1", 1=>"テキストデータ2")
40
+ ```
41
+
42
+ name属性の指定方法等はフォームによるデータ送信を行う上での基本的なルールになります。
43
+ 送信の仕方が分かっていないと、受け取り側の処理でも躓いてしまいます。
44
+ CSV化はひとまず置いておいて、まずは画面に出力するなどしてフォーム扱い方の理解を深める方が良いかもしれません。