今javascriptを使用し、下記のようなフォームの作成を考えています
(参考にしたスクリプト→http://d.hatena.ne.jp/Mug/20060414/1145023696)
--------------- Sample Form ---------------
1,[Selectbox A]
2,[Selectbox B](Selectbox Aの選択内容に応じて選択肢が変わる)
2,[Selectbox C](Selectbox Aの選択内容に応じて選択肢が変わる)
--------------- Sample Form ---------------
上記のようなフォームで
<select name="hoge">
<option value="12000">商品1</option>
<option value="14000">商品2</option>
</select>
とした場合に、value値と商品名にあたる部分両方をPOSTしたいのですが
このようなときはどのように処理(PHP,もしくはjavascriptで)をすればよいでしょうか
一番参考になった回答をいただけた方に200P差し上げます
よろしくお願いします
1,[Selectbox A]
2,[Selectbox B](Selectbox Aの選択内容に応じて選択肢が変わる)
2,[Selectbox C](Selectbox Aの選択内容に応じて選択肢が変わる)
この部分は出来ている、という認識でいいですか?
>value値と商品名にあたる部分両方をPOSTしたい
やり方はいくつかあります。
簡単な順番から。
1. POSTで飛んできたvalueを判定して、商品名を入れてしまう。
この場合$_POST[hoge]を判定して、12000なら商品1だな!という判定式を入れます。
confirm.php if($_POST["hoge"] == "12000"){$date = "商品1";} elseif($_POST["hoge"] == "14000"){$date = "商品2";} もしくは if($_POST["hoge"] == "1"){$date = "商品1";$date2 = "12000";} elseif($_POST["hoge"] == "2"){$date = "商品2";$date2 = "14000";}
・メリット
selectのvalueを0とか1にしておくと、selectedIndexなどの命令が使いやすい
簡単
・デメリット
改変が大変すぎ
2.valueに全部情報をいれて、あとで分割する
<option value="12000xxx商品1">商品1</option>
このような形にして、confirm.phpで分割させる
confirm.php $_POST["hoge"] = ereg_replace("x{4}","xxx",$_POST["hoge"]); $date = split("xxx",$_POST["hoge"]; //$date[0]に12000、$date[1]に商品1が入る if($date[1] == ""){$errer = 1;}
・メリット
改変がしやすい
情報をいくつも飛ばせる(例えば12000xxx商品xxx商品です)
・デメリット
split文字を攻撃で普通に使われたら致命的にバグる(HTMLソースを見れば、split文字がばれてしまう)
3.セレクト項目を変更したら、hiddenのinputに、商品の名前をいれてPOST
・メリット
……
・デメリット
大変なわりにメリットがない
思いつくのはこのぐらい。
セキュリティ的には、改変が大変だけど1の方法が一番です。
ただ、2のほうがスマートだし改変も楽ですね。
2にセキュリティを加えれば問題はありません
いまはif($date[1] == ""){$errer = 1;}しか書いてないですけど、そのシステムの仕様などにあわせて、エラーチェックをするように書けばOKかと
JAVAScriptのほうでは特にプログラム変更はせず、データを下記のように変更しておく。
<option value="12000:商品1">商品1</option> <option value="14000:商品2">商品2</option>
受け側がphpであるならば$_POST[hoge]や$_GET[hoge]をコロン(:)でsplit
ここでは金額+商品名という形にしたのでコロン(:)で挟んでみましたが
区別できるようなものならば何で挟んでも結構です。
Javascriptで送信する方法のサンプル。
(連動云々とはあまり関係なく使えるはずです。)
<script type="text/javascript"> function sample(F){ F.elements['hoge2'].value= F.elements['hoge'].options[F.elements['hoge'].selectedIndex].text; } </script> <form action="~" onsubmit="sample(this)"> <input type="hidden" name="hoge2">←商品名格納・送信用 <select name="hoge">・・・以下略
コメント(0件)