- ベストアンサー
スカラー変数から数字を取り出してパラメータとして外部に渡したい
perl初心者です。 ショッピングカートCGIを利用して、合計額をあらわす変数から数字を取り出して、パラメータとしてFORMで別のGCIに渡したいのですが、方法がわかりません。 まずショッピングカートCGIで、合計額を計算して変数「$GOKEI」に入れました(例.計算結果=1500)。 この$GOKEIから1500を取り出して、「_price」というパラメータで別のCGIに渡したいのです。 <form action="別のcgi.cgi" method="post"> <input type="hidden" name="_price" value="$GOKEI"> <input type=submit value="支払う"> </form> この表現では、「_price」に合計金額の1500が入らず、エラーとなってしまいます。 ご教授いただけましたら幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
<form action="別のcgi.cgi" method="post"> <input type="hidden" name="_price" value="$GOKEI"> <input type=submit value="支払う"> </form> ↑この部分は、「当然」ショッピングカートのCGIの中に書いてあるんですよね? CGIの外では $GOKEI などの変数の中身は読めませんよ? CGIの中に記されているという前提で、 print 文は '' ではなく "" で囲むんで有りますか? '' で囲んだ場合は変数 $GOKEI は展開されずそのまま文字列とされてしまいますよ。
その他の回答 (2)
- marimo_cx
- ベストアンサー率25% (873/3452)
>素人で申し訳ありませんが、教えていただけると助かります。 何を教えたら良いのか余計わからなくなりました。(情報を出し惜しみしているので) ただなんとなく解ったのはフォームが違うドメインへ飛ぶようにしてますね?(でなければ仕様がわからないなんて有り得ない) そうだとしたら安全性や信頼性はどうやって確保してるんですか? 訪問者がNISとか使ってたら警告が出るか、不審サイトとしてはねると思います。
補足
情報を出し惜しみしているわけではなく、説明のしかたがよくわからないのです。素人とおもっておゆるくし下さい。 まずご指摘のとおり、別のドメイン(契約しているクレジット決済業者のCGI)にフォームを飛ばしています。 契約している業者 → http://www.cubit.co.jp/sgp_faq.html こちら側のショッピングカート(CGIレスキューさんの「簡易ショッピングバスケットシステム」を利用)を使っています。 http://www.rescue.ne.jp/cgi/cargo/ 決済業者のCGI(どのようなCGIかは不明です)に飛ぶときには、契約IDと決済金額をパラメータとして渡す必要があります。 簡易ショッピングバスケットのCGIで合計額を計算してくれるので($GOKEI)、それを「_price」というパラメータで決済業者のCGIに渡すつもりなのですが、それがうまくいきません。 <form action="業者のcgi.cgi" method="post"> <input type="hidden" name="_price" value="$GOKEI"> <input type=submit value="支払う"> </form> ではうまくいかず、業者のCGIが「金額が正しくありません」といってきます。 ちなみに$GOKEIは正しく計算されています。 説明が至らない点があればお詫びします。
- marimo_cx
- ベストアンサー率25% (873/3452)
一体何エラーが出るのですか? $GOKEI = '計算結果=1500'; だったとしてもPerlがエラーを吐く事は無いはずですが。
補足
説明不足ですみませんでした。 オンライン決済業者のCGI(詳細不明)に、「_price」パラメータで金額を渡さなければならないのです。 まず、うまくいくパターンですが: <form action="業者のcgi.cgi" method="post"> <input type="hidden" name="_price" value="1500"> <input type=submit value="支払う"> </form> こうると、オンライン決済業者のCGIが、金額「1500」を正しく表示します。 もちろんこれでは「1500円」に固定になってしまいますので、ここを「$GOKEI」として可変(計算結果を反映させた変数)にすることを考えたのですが: <form action="業者のcgi.cgi" method="post"> <input type="hidden" name="_price" value="$GOKEI"> <input type=submit value="支払う"> </form> これではオンライン決済業者のCGIが、「金額が正しくありません」と答えます。 オンライン決済業者のCGIの中身が不明なのでなんともいえないのですが、 <input type="hidden" name="_price" value="$GOKEI"> では、「$GOKEI」の中身(金額)が_priceパラメータに入っていないような気がします。 素人で申し訳ありませんが、教えていただけると助かります。
お礼
わかりました! 実は、ショッピングカートのCGIで、変数$GOKEIを「見やすく」するために、3桁でカンマを打つようなプログラムになっていました。 1 while $GOKEI =~ s/(.*\d)(\d\d\d)/$1,$2/g; そのため、4桁以上の金額になると、カンマが付されて、「_price」パラメータに数字として代入できていないためでした。 カンマを打つ前に、別の変数に代入して、それから「_price」パラメータに代入するという措置をとったところ、うまくいきました! 本当にお手数をおかけしました。