人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP5とSmartyによる処理分岐アイデアの質問です。
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>&nbsp;
<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文字に収まらないので、下のコメントに続きがあります。

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:Smarty ひとつ まら アイデア カテゴリ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nandedarou
●60ポイント

●方法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という変数名を変えます。

毎度毎度ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ