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

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

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

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

PHP

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

Smarty

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

Q&A

解決済

1回答

2230閲覧

PHP SmartyのPOST処理について

homemademenu

総合スコア12

POST

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

PHP

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

Smarty

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

0グッド

0クリップ

投稿2018/07/31 06:12

SmartyでのPOST処理について質問です。

テンプレート側でforeachを使用して、スライダーのinputとボタンを複数(可変です)配置し、
POST処理で各行のスライダーの入力値とボタンのvalueを取得しようとしています。
以下のような(一部省略)コードを実行すると、
ボタンのvalueは正確に取得できますが、スライダーの値はforeachで生成した一番
最後の行の値が返されます。

例えば以下の3行がforeachで生成された場合、

1行目 inputのvalue=60、 buttonのvalue=5
2行目 inputのvalue=100、buttonのvalue=2
3行目 inputのvalue=40、 buttonのvalue=1

2行目のボタンをクリックすると、buttonのvalue=2は取得できますが、
inputのvalueは3行目の40が返ってきてしまいます。

質問の仕方が悪くて申し訳ありませんが、
何かアドバイスをいただけると助かります。
宜しくお願い致します。

lang

1$param = $_POST["per"]; 2$param2 = $_POST["id"]; 3$smarty->assign('param', $param); 4$smarty->assign('param2', $param2);

lang

1<form action = "form.php" method = "POST" onsubmit="return check()"> 2{foreach from=$food item="f" key=key} 3<tr> 4<!-- スライダー処理 --> 5<input name="per" class="input-range" id="rangeinput" type="range" min="0" max="100" step=10 value={$q[$key]} oninput="document.getElementById({$no[$key]}).value=this.value"> 6</td> 7<td> 8<!-- スライダーOUTPUT --> 9<output id={$no[$key]}>{$q[$key]}</output> 10</td> 11<td> 12<!-- POST処理 --> 13<button type="submit" class="square_btn2" name='id' value={$no[$key]}>更新</button> 14</td> 15</tr> 16{/foreach} 17</form>

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

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

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

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

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

guest

回答1

0

ベストアンサー

同name、同IDになっているためです。同IDは直接は関係ありませんが「1画面に1つ」という原則は守らなければなりません。
別name、別IDを設定し、取得する際もforeachで回して取得してください。

投稿2018/07/31 06:20

m.ts10806

総合スコア80731

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

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

homemademenu

2018/07/31 06:36

ご回答ありがとうございます。 勉強をはじめたばかりで「1画面に1つ」という原則は知りませんでした。 固有nameをSmartyの変数で設定するまでは出来たのですが、 押されたボタンの行にあるinputを取得する場合は、 php側でforeachをどのように使えばよいのでしょうか。
m.ts10806

2018/07/31 06:38

tpl側で$foodをforeachされてますので、それと同じループを作り、固有nameでPOSTから取得してください。
homemademenu

2018/07/31 10:01 編集

すみません。色々考えたのですが解決方法がわかりません。 1行目 input(name=1)のvalue=60、 button(name=12)のvalue=5 2行目 input(name=2)のvalue=100、button(name=22)のvalue=2 3行目 input(name=3)のvalue=40、 button(name=32)のvalue=1 例えば2行目にあるボタンをクリックした場合に、 2行目の2個のvalue(100と2)を取り出すにはphp側でどのようなコードを書けばよいのでしょうか。foreachと$_POSTの組合せ方がどうしてもわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問