• ベストアンサー

スカラー変数から数字を取り出してパラメータとして外部に渡したい

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が入らず、エラーとなってしまいます。 ご教授いただけましたら幸いです。

  • Perl
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • sion_fs
  • ベストアンサー率36% (152/416)
回答No.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 は展開されずそのまま文字列とされてしまいますよ。

FrogAM
質問者

お礼

わかりました! 実は、ショッピングカートのCGIで、変数$GOKEIを「見やすく」するために、3桁でカンマを打つようなプログラムになっていました。 1 while $GOKEI =~ s/(.*\d)(\d\d\d)/$1,$2/g; そのため、4桁以上の金額になると、カンマが付されて、「_price」パラメータに数字として代入できていないためでした。 カンマを打つ前に、別の変数に代入して、それから「_price」パラメータに代入するという措置をとったところ、うまくいきました! 本当にお手数をおかけしました。

その他の回答 (2)

  • marimo_cx
  • ベストアンサー率25% (873/3452)
回答No.2

>素人で申し訳ありませんが、教えていただけると助かります。 何を教えたら良いのか余計わからなくなりました。(情報を出し惜しみしているので) ただなんとなく解ったのはフォームが違うドメインへ飛ぶようにしてますね?(でなければ仕様がわからないなんて有り得ない) そうだとしたら安全性や信頼性はどうやって確保してるんですか? 訪問者がNISとか使ってたら警告が出るか、不審サイトとしてはねると思います。

FrogAM
質問者

補足

情報を出し惜しみしているわけではなく、説明のしかたがよくわからないのです。素人とおもっておゆるくし下さい。 まずご指摘のとおり、別のドメイン(契約しているクレジット決済業者の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)
回答No.1

一体何エラーが出るのですか? $GOKEI = '計算結果=1500'; だったとしてもPerlがエラーを吐く事は無いはずですが。

FrogAM
質問者

補足

説明不足ですみませんでした。 オンライン決済業者の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パラメータに入っていないような気がします。 素人で申し訳ありませんが、教えていただけると助かります。

関連するQ&A

  • 計算結果を変数に代入

    とあるサービスの料金計算フォームを制作しています。 特定の場合のみ料金が割引されるので、if構文で条件分岐してみたところ、 計算結果(小計)にはうまく反映されるのですが、いくつかの小計を合計すると、 if構文で分岐する前の(つまり割り引き前の)値段で計算されてしまいます。 // 小計1 var total_01 = document.form_test.price_01.options [document.form_test.price_01.selectedIndex].value * document.form_test.goods_01.options [document.form_test.goods_01.selectedIndex].value + document.form_test.price_02.options [document.form_test.price_02.selectedIndex].value * document.form_test.goods_02.options [document.form_test.goods_02.selectedIndex].value ; // 小計1 document.form_test.F-total_01.value = total_01; // 小計1を表示 if (document.form_test.price_01.options [document.form_test.price_01.selectedIndex].value != 0 && document.form_test.price_02.options [document.form_test.price_02.selectedIndex].value != 0) {document.form_test.F-total_01.value = total_01 - 500;} // 両方で-500 if (total_01 <= 0) {document.form_test.F-total_01.value = 0;} // 合計 var total_all = total_01 + total_02 + total_034; // 合計 document.form_test.F-total_all.value = total_all; // 合計を表示 小計を表示する <INPUT TYPE="text" NAME="F-total_01" VALUE="0"> に出てきた値を、そのまま次の計算に代入できれば 解決するのではないかと思うのですが、行き詰ってしまいました。 どうかアドバイスをよろしくお願いいたします。

  • 自動計算の合計金額を次ページで表示

    いつも『教えて!goo』を活用させていただきありがとうございます。 またお世話になます。 今回はJavascriptで自動計算させた合計金額を、別ページで表示させることで困っております。 同じページで合計金額の表示はでき、それを基にパラメータで引き渡そうとしているのですが、なかなかうまくいきません。 同じページで合計金額の表示のタグ構成は以下のとおりです。 <自動計算側ページ:index.html>============ <html> <head> <SCRIPT language="JavaScript"> <!-- function cal(f){ var price=0; for(var i=0;i<f.length;i++){ if(f[i].type=="radio" && f[i].checked) price+=parseInt(f[i].value); } f.price.value=price; } //--> </SCRIPT> </head> <body> <form> <p> <input type="radio" name="group1" value="30" />金:30円 <input type="radio" name="group1" value="20" />銀:20円 <input type="radio" name="group1" value="10" />銅:10円 </p> <p> <input type="radio" name="group2" value="400" />ダイヤモンド:300円 <input type="radio" name="group2" value="300" />サファイア:200円 <input type="radio" name="group2" value="200" />ルビー:100円 <input type="radio" name="group2" value="100" />アメジスト:100円 </p> <p> <input type="radio" name="group3" value="3000" />リチウム:3,000円 <input type="radio" name="group3" value="2000" />チタン:2,000円 <input type="radio" name="group3" value="1000" />白金:1,000円 </p> <hr /> <p><input type="button" value="合計金額を計算" onClick="cal(this.form)" /><br /> 合計:<input type="text" name="price" style="text-align:right" size="10" />円</p> </form> </body> </html> <p><input type="button" value="合計金額を計算" onClick="cal(this.form)" /><br /> 合計:<input type="text" name="price" style="text-align:right" size="10" />円</p> の箇所を<input type="submit" value="次ページで計算" />に書き換えて、 function cal(f){内に var pram="price="+price location.href="price.html?"+price; return false; を追記し、以上でテストすると <index.html?group1=30&group2=300&group3=1000#>といった風に radioボタンのnameとvalueが付いてしまい<price.html>にリンクしません。 以下に<合計金額表示ページ:price.html>も明記させていただきますので 皆様には、大変ご迷惑をおかけしますが、何卒ご回答の程よろしくお願い申し上げます。 <合計金額表示ページ:price.html>============ <html> <head> <SCRIPT language="JavaScript"> <!-- function pramWrite() { var pram=location.search; if (!pram) return false; pram=pram.substring(1); document.form1.price.value=pram; } //--> </script> </head> <body onload="pramWrite()"> <form name="form1" action="#"> 合計:<input type="text" name="price" style="text-align:right" size="10" />円 </form> </body> </html>

  • Windowsから既存WebのFORMのSubmitにパラメータをわたす。

    1.Windowsから既存Webのcgiにパラメータを渡して、表示されるデータをローカルのDBに保存したい。 以下が、WebのFORMのSubmit部分で、submit後に表示されるWebデータを取得したいのです。<form action="http://www.XXX.jp/cgi.exe" method=POST> <input type=HIDDEN name="CNAME" value="/list"> <input type=SUBMIT value="一覧"> </form> どの様にすれば、実現できますでしょうか? よろしくお願いします。

  • perl 変数 代入

    恐れ入ります。 Perlで、フォームから送信して、変数に代入したいのですがうまくいきません。 print qq!<form action="./xxx.cgi" method="get">!; opendir(DIRHANDLE, "./xxx"); foreach(readdir(DIRHANDLE)){ next if /^\.{1,2}$/; print qq! <input type="checkbox" name="$_" value="$_"> <input type="submit" value="送信"></form> とし、ディレクトリ内のフォルダ名をnameに格納してxxx.cgiへ送信します。 xxx.cgi側では、 #!/usr/bin/perl use cgi; $form = CGI->new; として、送信されたデータを次々と代入したいのですが、どのようにしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • パラメータが受け取れません。

    パラメータが受け取れません。 input.php と inputData.phpがあります。 input.phpには入力フォームと、登録ボタン押下時に 自画面を呼び出し、入力チェックを行っており、エラーの場合 エラーメッセージを表示、エラーではない場合、inputData.phpに 画面遷移しますが、パラメータが受け取れません。 *input.php if(empty($_POST["name"])){ $err ="えらー"; }else{ header("Location:http://localhost:8080/aaa/inputData.php"); } <form action="input.php" method="post"> <input type="text" name="name" value="aaa"> <input type="submit" name="name" value="bbb"> </form> このようなやり方はできないのでしょうか? お分かりになる方ご教授よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ボタンでパラメータを渡すには

    下記の場合、ボタンでフォーム内のパラメーターをリンク先に渡すにはどうしたらいいでしょうか?どなたかご教授下さい。 --------------------------------------------------- <form action="login.html" name="Form1" onsubmit="return checkItem(Form1)"> <input type="text" name="userId" size="24"><br> <input type="password" name="password" size="24"><br> <input type="submit" value="ログインする"><br> <input type="button" value="過去のデータを見る" onClick="location.href='history.html'"> </form> ---------------------------------------------------

    • ベストアンサー
    • HTML
  • フォームよりCGIへ複数の値をPOSTしたい…。

    はじめまして。 現在、ショッピングカートのCGIを利用するためにHTMLを調整しています。 【単一商品の場合】 <FORM action="cgi-bin/cart/cart.cgi" method="POST"><INPUT type="hidden" name="shouhinnumber" value="0001"><INPUT type="hidden" name="shouhinmei" value="高級シャンプー"><INPUT type="hidden" name="kakaku" value="3000"> あとはセレクトフォームで数を選択して送信すれば正常に料金計算されるのですが、これが、内容量によって料金が異なる場合、どのようにHTMLを組めばよろしいのでしょうか。 ラジオボタンでそれぞれの行にINPUTを入れたが、先頭のINPUTしか認識せず、フォーム文を複数作るとマージンが空き、複数選択が可能になってしまう。 なお、CGIをいじるのは危険なので、HTML内でどうにかしたい・・・。 つまり・・・ 高級シャンプーの 260mlが1800円 500mlが3000円 というように単一商品名で代金が異なるものを1つのフォーム内でCGIへ送信できないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ラジオボタンでうまくするには・・・・

    初めまして。 現在下記のプルダウン形式で、一つの価格が同じなので問題なく動くのですが <FORM action="cart/sys/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> <SELECT name=sur> <OPTION value="" selected>購入数量</OPTION> <OPTION value=1>1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</SELECT> <INPUT type=submit value=カートに入れる> </FORM><BR> <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> </FORM> 同じ商品で1・2・3・4・5のそれぞれに単価が変わる設定をしたいのですが、うまくいく方法が見つからないです。 ラジオボタン形式で作ってみたものの・・・・ <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=submit value=カートに入れる> </FORM> <FORM> <INPUT type="radio" name="name1" value="2000">1袋<BR> <INPUT type="radio" name="name1" value="3900">2袋<BR> <INPUT type="radio" name="name1" value="5800">3袋<BR> <INPUT type="radio" name="name1" value="7500">4袋<BR> <INPUT type="radio" name="name1" value="8500">5袋</FORM> としてみましたがうまくいきません。 なにか方法ございましたら、ご教授いただければと思います。

    • ベストアンサー
    • HTML
  • cgiへのパラメータについて

    htmlのformで入力した名前をcgiで受け取ると"encstr"となります。 エンコードした文字列を受け取るにはどのようにすれば良いか教えてください。 <form name="js"> お名前:<input type="text" name="txtb" value=""><br> <input type="button" value="送信" onclick="gogo()"><br> </form> <script type="text/javascript" language="javascript"> <!-- function gogo() { var str1=document.js.txtb.value; var encstr = encodeURI(str1); document.write('<img src="/cgi-bin/gogo.cgi?namae=encstr">'); } // --> </script>

  • 変数と関数の使い方について質問です。

    変数と関数の使い方について質問です。 現在JavaScriptを勉強しています。(超初心者ですのでバカな質問だと思いますがすみません)、変数を宣言して関数の中で使おうとしているのですが、うまく行きません。 以下のように書いて計算をしたいのですが。 <html lang="ja"> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- var moneyin = document.form1.text1.value; var moneyout = document.form1.text2.value; function zandaka(){ document.form1.text3.value=moneyin-moneyout; } --> </script> <title>簡単計算機</title> </head> <body> <h1>簡単計算機</h1> <hr> <h2>収支計算</h2> <form name="form1"> <p>収入&nbsp;<input type="text" value="0" class="right" name="text1">円</p> <p>支出&nbsp;<input type="text" value="0" class="right" name="text2">円</p> <p>残高&nbsp;<input type="text" value="0" class="right" name="text3" onfocus="zandaka()">円</p> </form> </body> </html> 関数の中に変数の宣言をすればうまく行くのですが、関数の外で変数の宣言をすると結果がNaNになります。 なぜでしょうか?変数は関数の外でまとめてしても良いのではないのでしょうか?? この考え方自体が間違いでしょうか? バカな質問だとは思いますが、よろしくお願いいたします。

専門家に質問してみよう