🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2723閲覧

HTMLでループ毎にhiddenに要素を格納する

K_Y_M

総合スコア100

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/11/25 02:22

前提・実現したいこと

HTML初心者なのですが、HTML上でforeachでのループ毎に、ボタンを生成、hiddenに要素を格納し、
ボタン押下時にpostしたいです。
例えば、$valueが以下の配列を保持している場合
value=[order_no=1,name=a,kind=1,flag=1],
[order_no=2,name=b,kind=2,flag=2],
[order_no=3,name=c,kind=3,flag=3]
「a」のボタンを押したら、order_no=1,name=a,kind=1,flag=1
「b」のボタンを押したら、order_no=2,name=b,kind=2,flag=2
「c」のボタンを押したら、order_no=3,name=c,kind=3,flag=3
をpostされる様にしたいです。

発生している問題・エラーメッセージ

order_no、name、kind、flagを、ループ毎に格納したいのですが
プールの最終行で書き換わってしまいます。
上記例ですと、「a」「b」「c」すべてのボタンで
order_no=3,name=c,kind=3,flag=3
がpostされてしまいます。

該当のソースコード

html

1<?php foreach($value as $key=>$item):?> 2 <input type="hidden" name="order_no" value="<?= $item["order_no"]; ?>"> 3 <input type="hidden" name="name" value="<?= $item["name"]; ?>"> 4 <input type="hidden" name="kind" value="<?= $item["kind"]; ?>"> 5 <input type="hidden" name="flag" value="<?= $item["flag"]; ?>"> 6 <button type="submit"><?= $item["name"]; ?></button> 7<?php endforeach;?>

試したこと

ループ毎にhiddenのnameを変える方法を模索したのですが
可能であればnameはループ毎に変えずに実現をしたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。$

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

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

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

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

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

kei344

2020/11/25 05:19

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答2

0

ボタンごとに複数の内容のことなるパラメータをおくるなら
formを分けるのが現実的です。
そうでないならjsでパラメータを入れ替える処理などが必要になるでしょう

投稿2020/11/25 04:53

yambejp

総合スコア116661

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

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

K_Y_M

2020/11/25 05:02

ご回答ありがとうございます。 ボタン毎にformを作成する様に修正してみます。
guest

0

ベストアンサー

可能であればnameはループ毎に変えずに実現をしたいです。

であれば、ループごとに(ボタンごとに)formを分ける、
という手がありますね。
現状は、foreachの外側にformタグがあると思いますが、
それをforeachの内側に入れる感じです。

あるいは、hiddenは1セットだけにして、
押されたボタンに応じて、JSでhiddenのvalueを変更してから
submitするとか。

投稿2020/11/25 03:54

gpsoft

総合スコア1323

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

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

K_Y_M

2020/11/25 05:00

ご回答ありがとうございます。 formを含めてループする様に修正してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問