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

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

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

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

Q&A

解決済

3回答

12431閲覧

フォームから複数のデータを送信する場合のnameのつけ方

msx2

総合スコア174

PHP

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

0グッド

1クリップ

投稿2016/07/15 01:27

PHPで例えばショッピングカートの機能を持つフォームを作成するとして、複数の商品を登録する場合はフォームの要素名が重複することになります。

この場合、要素の名前を変える必要がありますが、名前に番号を振る方法と配列にする方法ではどちらがいいでしょうか?

それよりもっといい方法をご存じであれば教えてください。

よろしくお願いします。

html

1<!-- name属性に番号をつける --> 2<form> 3<input type="text" name="goods_name_1"> 4<input type="text" name="goods_price_1"> 5<input type="text" name="goods_name_2"> 6<input type="text" name="goods_price_2"> 7<input type="text" name="goods_name_3"> 8<input type="text" name="goods_price_3"> 9</form>

html

1<!-- name属性を配列にする --> 2<form> 3<input type="text" name="goods[1][name]"> 4<input type="text" name="goods[1][price]"> 5<input type="text" name="goods[2][name]"> 6<input type="text" name="goods[2][price]"> 7<input type="text" name="goods[3][name]"> 8<input type="text" name="goods[3][price]"> 9</form>

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

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

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

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

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

guest

回答3

0

ベストアンサー

作業を簡略化するなら配列ですね

PHP

1<form method="get"> 2name:<input type="text" name="goods[1][name]" value="a"> 3price:<input type="text" name="goods[1][price]" value="50"><br> 4name:<input type="text" name="goods[2][name]" value="b"> 5price:<input type="text" name="goods[2][price]" value="100"><br> 6name:<input type="text" name="goods[3][name]" value="c"> 7price:<input type="text" name="goods[3][price]" value="150"><br> 8<input type="submit" value="go"> 9</form> 10<?PHP 11$goods=filter_input(INPUT_GET,"goods",FILTER_DEFAULT,array('flags'=> FILTER_REQUIRE_ARRAY)); 12var_dump($goods); 13?>

ただ、上記の参照方法ですと、データの型が一定ではないのでこまかいバリデートができません
一次配列を使うとわかりやすいかも

以下、nameはaかbのみ通す
priceは1~100の間のみ有効

PHP

1<form method="get"> 2name:<input type="text" name="name[]" value="a"> 3price:<input type="text" name="price[]" value="50"><br> 4name:<input type="text" name="name[]" value="b"> 5price:<input type="text" name="price[]" value="100"><br> 6name:<input type="text" name="name[]" value="c"> 7price:<input type="text" name="price[]" value="150"><br> 8<input type="submit" value="go"> 9</form> 10<?PHP 11$name=filter_input(INPUT_GET,"name",FILTER_VALIDATE_REGEXP,array('flags'=> FILTER_REQUIRE_ARRAY,'options'=>array('default'=>"",'regexp'=>"/^[ab]+$/"))); 12var_dump($name); 13$price=filter_input(INPUT_GET,"price",FILTER_VALIDATE_INT,array('flags'=> FILTER_REQUIRE_ARRAY,'options'=>array('default'=>0,'min_range'=>0,'max_range'=>100))); 14var_dump($price); 15?>

PHPのフィルタについてはこちらを参照ください

投稿2016/07/15 02:06

yambejp

総合スコア114863

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

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

msx2

2016/07/15 04:58

ご回答ありがとうございます。 前者の方法で、1件のデータをひとまとめで受け取る方法がわかりやすくて良さそうです。入力値のチェックもそれぞれ個別にやる予定ですので。 配列にすることのデメリットって何かあるでしょうか?
yambejp

2016/07/15 05:05

私の運用してきた限りデメリットはありません 配列として使う場合の最大のメリットはcheckboxを利用する時だと思います <form> c1:<input type="checkbox" name="c[]" value="1"> c2:<input type="checkbox" name="c[]" value="2"> c3:<input type="checkbox" name="c[]" value="3"> <input type="submit" value="go"> </form> <?PHP $c=filter_input(INPUT_GET,"c",FILTER_DEFAULT,array('flags'=> FILTER_REQUIRE_ARRAY)); var_dump($c); ?>
msx2

2016/07/15 05:24

デメリットがないということで安心しました。 そう言われてみればチェックボックスは嫌でも配列にしますよね。
guest

0

慣れてない人もぱっと見て分かりやすいのは前者
サーバー側の処理に便利なのは後者ってとこでしょか。

余談ですが、名前or型番がわかれば値段はおのずと決まるのでは?
値段の表示はするにしても、送る必要はない気がします。
また、名前の表示はするとして、それとは別途 hidden で
名前をまとめたのを送るってのもありかもしれません。

投稿2016/07/15 05:12

takasima20

総合スコア7460

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

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

msx2

2016/07/15 05:38

ご指摘の通りですが、あくまでも例なので実際にはこのようなコードを書いているのではありません。ショッピングカートを例にするなら個数とかにした方が適切でしたね(汗) 質問の意図としては「同じレコードの繰り返し的なデータ」をフォームから送信する場合にどうするのがいいのか?ということでして、皆様のご意見より配列として送信することで便利になりこれといったデメリットもないとわかり疑問を解消することができました。ありがとうございます。
guest

0

後者のほうがPHP側でそのまま連想配列で受け取れるので楽ですね。

PHP

1$data = $_REQUEST["data"]; 2echo $data[1]["name"];

投稿2016/07/15 01:47

masaya_ohashi

総合スコア9206

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

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

msx2

2016/07/15 04:54

ご回答ありがとうございます。 配列の方が便利というメリットがあるんですね。 配列にすることによるデメリットって何かあるでしょうか?
masaya_ohashi

2016/07/15 05:05

重箱の角をつつくようなことをすればデメリットも出てくるかもしれませんが、私にはデメリットは思いつきませんね。テキストを解析するよりは最初から連想配列になっているほうが99.9%くらいはメリットが高いと思います。
msx2

2016/07/15 05:23

ありがとうございます!これで安心して配列を使えます。 ご指摘の通り実はテキストをループで解析して不便だったので…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問