http://q.hatena.ne.jp/1174771937の続きなのですが、複数テーブルから多次元配列を作成しフラグを立て、Smartyテンプレートでデータをforeachでループ出力しています。
その際、フラグのif判断で以下のように処理させて表示していました。
{foreach item=item from=$shop_cat_merge}
<strong>{$item.shop_cat_name}</strong>{$item.shop_sub_cat_name}
<div id="cat_info">
{if $item.shop_cat_flag == "1"}
<a href="{$url_shop}?type=wakeschool_modify&action=form&shopid={$shop_id}">更新</a>
<a href="{$url_shop}?type=wakeschool_delete&action=confirm&shopid={$shop_id}&catid={$item.shop_cat_id}&subcatid={$item.shop_sub_cat_id}">削除</a>
{else}
このカテゴリは未登録です。<a href="{$url_shop}?type=wakeschool_regist&shopid={$shop_id}&catid={$item.shop_cat_id}&subcatid={$item.shop_sub_cat_id}">登録</a>しますか?
{/if}<br />
</div>
{/foreach}
メンバーはメンバー専用画面で複数のショップを登録でき、そのショップはshop_idで管理され、ショップひとつに対し上記処理を行わせようとしています。
GET取得だと他人のデータをいじれてしまうので、POST取得に変えようとしていますがここでつまずいています・・・。
500文字に収まらないので、下のコメントに続きがあります。
●方法1
それぞれのボタンのformタグを独立させるという方法。つまり、ボタンの数だけ、formがあるということ。
●方法2
ラジオボタンやリストボックスでユーザーに選択させる方法。
●方法3
JavaScriptを使う方法(※ユーザーがJavaScriptを有効にしてない場合や、そもそもJavaScriptが動作しないブラウザを使用している場合、機能しなくなります。)
一応、簡単に方法3を解説します。(JavaScriptを学んでない場合は意味が分からないかも知れません。)
foreachでループする際、formタグのname属性にそれぞれのフォーむ固有の名前をつけます。例えば、
<form name="Form{$item.shop_cat_id}-{$item.shop_sub_cat_id}" action="{$PHP_SELF}" method="post">
JavaScriptで、それぞれのボタンのinputタグのtype属性を"button"とし、そのインプットタグのonClickイベントで、別途JavaScriptで書いた関数(←例えば、PostValue関数)を呼び出します。呼び出す際に、2つの引数(フォームとボタンの種類)を渡します。
<input type="button" value="更新" onClick="PostValue(Form{$item.shop_cat_id}-{$item.shop_sub_cat_id},'modify')">
その関数で、クリックされたボタンの種類に応じて、受け取ったformの中のtypeとactionのvalueに値を設定し、そのフォームをsubmitします。
なお、私の経験からいうと、INPUTタグにname="action"があると、formタグのaction属性と区別がつかなくなり、JavaScriptが誤動作することがあります。JavaScriptを使うならば、nameに"action"は使わない方がいいです。
なるほど・・・
PHP処理で悩んだら、HTMLの持つ機能やJavaScriptなど別な手段を考える。
なんもかんもPHPで考えていました。またひとつ学びました。
JavaScriptはあまり使ったことがありませんが、何回か実装したことがあるので少々わかります。
(3)の方法を今から試してみます。
> INPUTタグにname="action"があると、formタグのaction属性と区別がつかなくなり、JavaScriptが誤動作する・・・
他のフォームで思いっきり使ってました^^;
こういう忠告は非常にありがたいです。
早速、全てのactionという変数名を変えます。
毎度毎度ありがとうございます。