• 締切済み

CGIに変数を送る際のアドレス

メールフォームに変数を送ろうとしています。 ただ、送り元がデザインの制約で<FORM>のボタンではなく、<A>のリンクになってしまってます。 <A>で変数を送ろうとすると、 href="./mail.cgi?hen1=xx&hen2=xxx" という形ですよね。そうすると、アドレス欄に変数がすべて載ってしまいますよね。 これをどうにかして非表示にすることは出来ないのでしょうか?(いわゆるtype=hidden的な事) または、<FORM>内で文字列をボタンにすることは可能なのでしょうか?

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

みんなの回答

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.8

> <A href="./mail.cgi?hen1=xx&hen2=xxx"> この場合で取れて、 "<FORM name=\"form\" method=\"post\" action=\"../mail/mail.cgi\"> こっちだと取れない・・ メソッドがGETの場合とPOSTの場合なので、データの取り方違いますけど、大丈夫ですか? ちなみに前者(GET)の場合、$ENV{'QUERY_STRING'}から取得できますが、 後者(POST)の場合read STDIN, $query, $ENV{'CONTENT_LENGTH'};こんな感じの取得になるかと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

#6補><A href="./mail.cgi?hen1=xx&hen2=xxx">方式だとちゃんと表示(取得)されるんです。 そういえば、 #2では action=\"../mail/mail.cgi\" になっていますね。 action=\"./mail.cgi\" ではないのですか?

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.6

#1,3です。 > 何か間違っているでしょうか? 見た感じ、フォームの書式に間違いはないようですね。 実は送られていないのではなく、取得方法が間違っているということはないですか?

master-3rd
質問者

補足

返答ありがとうございます。 <A href="./mail.cgi?hen1=xx&hen2=xxx">方式だとちゃんと表示(取得)されるんです。 フォームにしたからといってそっちを変更する必要は無いと思っていたのですが、何か変えないといけなかったでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#4で\"するのを忘れていました! Perlなら print qq(<FORM name="FORM1" method="post" action="../mail/mail.cgi">\n); でもいいかも

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

print "<FORM method=\"post\" action=\"../mail/mail.cgi\">\n"; を print "<FORM name="FORM1" method=\"post\" action=\"../mail/mail.cgi\">\n"; とか名前を付けてやります。 print "<span onclick=\"document.FORM1.submit()\">&nbsp;&nbsp;$name について問い合わせメールを出す&nbsp;&nbsp;</span>\n"; 付けた名前を指定してやります

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.3

#1です。 こんな感じでしょうか。アンカータグのhref属性は適当な値を入れておいて問題ないです。 フォーム名には formタグでname属性を指定して、それを使います。 onclickでのreturn(false)でアンカータグでの遷移を抑制しています。 <form method="post" action="mail.cgi" name="mail_form"> </form> <a href="#" onclick="document.test_form.submit();return( false );">問合せ</a> また、#2さんの方法でも同様です。 #2さんの方法そのままだと文字列部分がクリック出来るかどうかわからない為、<u>タグでアンダーラインにしたり、style="cursor:pointer"でカーソルを変えたりすると良いのではないでしょうか。

master-3rd
質問者

補足

返答遅れてすみません。 リンクとして機能する(文字色反転・カーソル変化)し、ちゃんとリンク先にも移動するのですが、hiddenの内容を送ってくれません。 print "<FORM name=\"form\" method=\"post\" action=\"../mail/mail.cgi\">\n"; print "<TD>\n"; print "<input type=hidden name=li_no value=$no>\n"; print "<input type=hidden name=li_old value=$old>\n"; print "<input type=hidden name=li_name value=$name>\n"; print "<a href=\"#\" onclick=\"document.form.submit();return( false );\">&nbsp;&nbsp;$name について問い合わせメールを出す&nbsp;&nbsp;</a>\n"; print "</TD>\n"; print "</FORM>\n"; 何か間違っているでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

><FORM>内で文字列をボタンにすることは可能なのでしょうか? このことのためにリンクにしているのだったら <button type="submit">文字列</button> とすればいいと思います。 あるいは、形がボタンになってはいけないのだったら <span onclick="document.フォーム名.submit()">文字列</span> のようにすればいいと思います。

master-3rd
質問者

補足

>形がボタンになってはいけないのだったら これを実現したかったんです。 で、やってみましたがうまく出来ません。 print "<TR>\n"; print "<FORM method=\"post\" action=\"../mail/mail.cgi\">\n"; print "<TD>\n"; print "<input type=hidden name=li_no value=$no>\n"; print "<input type=hidden name=li_old value=$old>\n"; print "<input type=hidden name=li_name value=$name>\n"; print "<span onclick=\"document.フォーム名.submit()\">&nbsp;&nbsp;$name について問い合わせメールを出す&nbsp;&nbsp;</span>\n"; print "</TD>\n"; print "</FORM>\n"; print "</TR>\n"; まずは、ボタンをクリックできませんでした。 さらに、「フォーム名」には何を当てはめればよいのでしょう?

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

こういう方法ではいかがでしょうか? ページ内にFormを用意 変数を全てHidden属性で用意 リンクを用意 ※リンク自体は機能しないようにしておく リンクをクリックした時にJavaScriptを使用してページ内のフォームを実行させる。

master-3rd
質問者

補足

>ページ内にFormを用意 方法OKです。 >変数を全てHidden属性で用意 これも方法OKです。 >リンクを用意 これも方法OKです。 >※リンク自体は機能しないようにしておく ?どうしたら良いのでしょう? >リンクをクリックした時にJavaScriptを使用してページ内のフォームを実行させる。 ?どうしたら良いのでしょう? ちなみに、変数を送ろうとするページ(リンク元ページ)は別のCGIなのですが、問題ないのでしょうか?

関連するQ&A

  • "$"を変数に入れる

    CGIを改造中です。 変なことをしているかもしれませんが、変数に$と別の変数を入れたいんです。 「xx.cgi?h=1」でCGIに変数を送り、$hensuuに「$hen1」と代入したいんです。 で、以下のようにやってみました。 $hensuu = '$hen'; もちろん、「print "$hensuu\n";」とすると「$hen」と表示します。 $hensuu = '$hen'$h;や $hensuu = '$hen'"$h";とすると、エラーになりストップします。 どのようにしたらうまくいくのでしょうか?

    • ベストアンサー
    • Perl
  • cgiから別のcgiへの変数の渡し方

    cgiからべつのcgiを起動するとき、 アドレス/a.cgi?xxx=aaa で変数xxxにaaaを入れてa.cgiに渡せると聞きましたが a.cgiでは、どのように受け取ればいいのでしょうか? コーディング例とかをお願いします。

    • ベストアンサー
    • CGI
  • CGI1からCGI2への変数の受け渡しと表示

    他のご質問読んでもわからなくて笑 CGIの知識は、書いてあるとおりに設定を変えたりhtmlとか書き出すところの内容変えたり…いらないところに#を付けて、うごくかなぁってドキドキしている程度です(笑)わかりにく。 今回は、まず、キリ番のCGI-Aがあります。そのCGI-Aはキリ番GETしたら登録formが出てきます。登録があったらメールが管理人宛てにくるんです、その時、変数で、フォームで書いてもらった内容+その人の取ったカウント数・時間・エージェント・HOSTが、一緒に記載されてきます。 CGIではこんな感じ↓ print MAIL "時間 : $adate\n"; print MAIL "ホスト: $ahost\n"; print MAIL "使用PC: $kuag\n"; print MAIL "名前 : $aname\n"; print MAIL "カウント : $acount\n"; print MAIL "メール: $email\n"; ってちゃんと送られてきます。 で、この変数なんですが、同ディレクトリにあるメールフォームのCGI-Bに渡して(CGI-Aで登録したら必ずCGI-Bにくると)、CGI-Bが送るメールにも乗せたいのです。CGI-Bのなかのメールの雛型?の部分に ここです↓ #メール内容 $body.="取得時間 : $adate\n"; $body.="ホスト : $ahost\n"; $body.="使用PC : $auag\n"; $body.="メール : $email\n"; $body.="内容 : $nowdate\n"; 内容ってのはCGI-Bのメールフォームに書いてもらったことを表示します。でその上の4つなんですが、それがCGI-Aの変数で、これをCGI-Bのメールに一緒に送らせたいわけです。 そこで、CGI-Aの変数をCGI-Bに持ってくるにはどうするか、素人なりに考えて #キリ番からの情報取得 require "./CGI-A.cgi"; とか考えて書いてみて、やったんですが、見事に失敗しました。どうすれば変数だけをわたせますか?教えてください。 不適切な表現とかありましたら勘弁してください。 補足など、待ってます。

    • ベストアンサー
    • CGI
  • CGIの組み方が解りません

    会社のHP制作しているのですが、 見積もりフォーム作ろうと思っています。 <FORM action=http://●●●.jp/●●●cgi method=POST >←良く解りません <INPUT type="hidden" name="mailto" value="●●●@●●●.jp"> <INPUT type="hidden" name="subject" value="見積もり依頼"> <INPUT type="hidden" name="location" value="formend.html"> どこかのサイトを拝見してこのような感じで行ったのですが、 最初のform actionが良く解りません。 そもそもCGIをどのようにつくり設置するのか根本的なことが良く解りません。 何処か解り易く説明しているcgiの組み方、メールフォームの作り方などがあれば教えてください。

  • ブラウザを使用しないでプログラムから変数を送る方法

    通常、 ・GETの場合 <a href=http://www.xxx.co.jp?a=1>submit</a> ・POSTの場合 <form method=post action="xxx.cgi"> <input type=hidden name=a value=1> <input type=submit value=submit> </form> のなどのHTMLでクリックまたはSUBMITボタンを押すとその特定のURLのWWWサーバーに変数が送られますよね。 これをブラウザを使用せず、サーバーのプログラム(perl)を使用して、そのプログラムを実行すると プログラムで指定した特定のURLのwwwサーバー(port 80)に変数を送る方法書き方を教えて下さい。 GETの場合、POSTの場合それぞれ教えてください。 通常、ブラウザがしていることを、プログラムでしたいと思っています。 よろしくお願いします

    • ベストアンサー
    • CGI
  • javascriptのフォームデータをCGIで複数行取得

    javascript内の変数を複数行のフォームでCGIに渡したいのです。 その際のコードが document.write("<form name='form1' action='xxx.cgi' method='post' enctype='text/plain'>"+           "<input type='hidden' name='state' value=''>"+           "<input type='hidden' name='state2' value=''>"+           "</form>"+           "<input type='button value='送信' onClick='tocgi(a,b)'>");       tocgi(n1,n2){       document.form1.state.value=n1;       document.form1.state2.value=n2;       document.form1.submit();        } なのですが、a、bの値がそれぞれ10、20だった時、一行目のフォームデータは出力されるのですが、2行目が出力されないのです。実行結果でいうとstate=10ですね。引数を一つにしても同じでした。何がいけないのか、全然わかりません…。それとも、CGIのコードの書き方に問題があるのでしょうか。でも、CGIの方は変えずに単純にHTMLで記述すると上手くいくみたいなんですよね。どなたかわかる方がいたら助けて下さい!

    • 締切済み
    • CGI
  • 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
  • cgiにSSLをつけたい

    ショッピングバスケットのCGIを使っております。 そこで買い物カゴの中身(cargo.cgi)をSSLに対応したいのです。 色々試してみたのですが、 <a href="https://sslhost.xxx.com/~iroiro8/test.html">SSLのページへ</a> このリンクからだとちゃんと次のtest.htmlでは画面右下に鍵のマークがついていました。 そして、 <a href="https://sslhost.xxx.com/~iroiro8/cargo/cargo.cgi">SSLのページへ</a> このリンクからでもちゃんと次のcargo.cgiでは画面右下に鍵のマークがついていました。 でも、次のような商品選択からformを使ってオーダーするようなリンクからだと <form method=post action="https://sslhost.xxx.com/~iroiro8/cargo/cargo.cgi"> <input type=hidden name="action" value="regist"> <input type=hidden name="goods" value="りんご"> <input type=hidden name="unit" value="600"> <table width="100%"> <tr> <td width="42%"><font>S : 600円</font></td> <td width="16%"> <div><font>個数</font></div> </td> <td width="20%"> <select name="amount"> <option value="1">1</option> <option value="2">2</option> </select> </td> <td width="23%"> <input type=image src="../image/order.gif"> </td> </tr> </table> </form> 次のページのcargo.cgiでは画面右下に鍵のマークではなく、ストップマークみたいなアイコンになり、 その上、オーダーしたはずの商品がカゴの中に入っていないのです。 私は何か根本的なことを見逃しているのでしょうか。

    • ベストアンサー
    • CGI
  • htmlからcgiに変数を配列にして渡すとき

    フォームにて、質問1,2,3…と入力してもらい、 1を答えないで2を答えるとか、 2を答えないで3を答えるとかを排除したいので、 変数を配列にして受け取りたいのです。 とりあえず今のところはこうなってます。↓ #htmlファイル# <INPUT type="text" size="30" name="situmon[1]"> <INPUT type="text" size="30" name="situmon[2]"> ... としてcgiに持っていき、 #cgiファイル# for($i=1; $i<=4; $i++){ if($form{'situmon[$i]'} eq "" && $form{'situmon[$i+1]'} ne ""){ &error; #→エラーメッセージサブルーチン exit; } } のようにして受け取ろうとしてるのですが、うまくいきません。 上のようにhtmlではどう書くべきか、cgiではどう受け取るべきかを教えてくだされば嬉しいです。

    • ベストアンサー
    • CGI
  • フォーム内容の記述と、CGIファイルの関連はどのように?

    基礎的な質問でしょうが、どなたか教えて下さい・・。 フォームタグで、 「 <body> <form action="cgi-bin/xx.cgi" method="post"> フォーム(ラジオボタンなど)の内容の記述 </form></body> 」 の記述の中で、「xx.cgi」のファイルはどのように作成すればよいのでしょうか。そして全てのフォームに対応するcgiファイルがあるのでしょうか。そのCGIファイルをフォルダ(cgi-bin)にアップロードすればよいのですか?。ホームページを作成してもフォームタグに対するCGIの解説が記載されていませんので・・。

    • 締切済み
    • CGI

専門家に質問してみよう