• ベストアンサー

CGIプログラムで得た結果を一行テキスト領域に入れるには?

フォームのaction で呼び出したdic.cgi が計算をして、二つの値$i,$maxを出し、それを、2つ用意した一行テキスト領域それぞれに入れたいのですが、どうやったらよいのでしょうか? <form action="dic.cgi"> <input type=text name="count" value="$i"> <input type=text name="total" value="$max"> form> ではエラーになりました。 どなたか、どうか教えて下さい。

  • Perl
  • 回答数13
  • ありがとう数18

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.13

cgi-lib.plで &ReadParse(*f); を行っているのなら私が書いた QUERY_STRING を解析するロジックはいりません。 ReadParseがその処理ですから。$tango = $f{'tango'}と同様に取得できます。また、POST/GET、どちらのmethodでも $f{'hoge'}に格納してくれるので formの methodを POSTにすれば URLに不要な文字列が入りません。 また、ReadParseを使うことで %xxと書かれた部分の解析(変換)も行ってくれます。 では、私が書いたものの間違いを訂正しつつ動くように改造します。 form表示部分を <INPUT type="submit" name="search" value="単語検索"> <INPUT type="submit" name="search" value="↑"> <INPUT type="submit" name="search" value="↓"> と直して下さい。 前後しますが判定部分を if ($f{'search'} eq '単語検索') { #単語検索 } elsif ($f{'search'} eq '↑') { #デクリメント処理 } elsif ($f{'search'} eq '↓') { #インクリメント処理 } > print <<EOD; > Content-type: text/html; charset=sjis-jp\n\n"; > これは?? Content-type: text/html; charset=sjis-jp (↑ここを必ず1行空けること) です。 #私もてさぐりの所があるので冗長的な回答になってすいません。

tonka729
質問者

お礼

yatokesaさま、おかげさまでできました。ゴールインです!感激です。手取り足取りご指導を受けました。感謝しております。これでひとまずこのページの基本部分ができました。 あとはFrame1に希望のニュースサイトを表示、それを記憶、一覧、選択し、入力部分はもっと改善して、検索表示される見出し語を表示するname=tango とはまた別に一行入力領域type=text name=inclimentbox を設置して、インクリメント表示方式で、一字入力毎に収録単語を先読みして下のtangoとtextarea=result に検索結果を示す、としたいと思います。  そんな構想なんですが、次に最初に解決したい問題は、textarea内の表示に<BR>が出てしまっている点です。print $data という表示の仕方を念頭に入れたテキストデータ$data の<BR>をどのようにすれば、うまく改行表示として使えるでしょうか?  yatokesa さま、この質問はあらたなスレッドでさせていただきますので、どうか、また引き続きご指導をいただきたく存じます。

その他の回答 (12)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.12

すいません、1日空いてしまいましたが、現状がどのようになっているか把握できませんので、現状の問題点について補足いただけますか?(お礼と補足がどちらの最後の書き込みか分からなかったので...) dic.cgiの後ろに ? で続く文字列は formに書かれた内容をブラウザが送る文字列です。これはformのmethodに GETを指定してるからです。元々tonkaさんが書かれていたソースには何も指定していなかったので GETで送ればよいのかと思いました(省略時はGET)。 methodに POSTを指定すれば URLには書かれずに送信されます。この場合 CGI(Perl)には標準入力で formの値が渡されますので perlでその値を読み出す方法が変わります。GET/POSTで受け取る方法は様々なところで解説されているので割愛します。 > ところで表示の文字化けはどうすれば解消できるのでしょうか? CGIが SHIFT_JISで 単語検索結果がそれ以外の文字コードなのでしょうか?それでしたら検索結果の文字コードに合わせて CGIの文字コードを保存し直し、ヘッダーのcharsetもそのコードに合わせるのが最も楽でしょう。

tonka729
質問者

お礼

こちらこそ、ありがとうございました。なんと心強い応援をしていただいていることか! 検索が行われない状態が解決できません。ソースの一部をご覧下さい。 require 'cgi-lib.pl'; &ReadParse(*f); $tango = $f{'tango'}; #print "Content-type: text/html; charset=sjis-jp\n\n"; @str = split ("&", $ENV{'QUERY_STRING'}); foreach $param (@str) { ($e, $v) = split ("=", $param); $f{$e} = $v; } $i = $f{'nummer'}; $max = $f{'total'}; $tango = $f{'tango'}; chomp $tango; # 辞書を読む #ファイルの各行を配列に一括して読み込む。 open(IN, "GermJ.txt"); @list = <IN>; close(IN); $max = $#list; if ($f{'submit'} eq '単語検索') { #単語検索 for ($i=0; $i<$max; $i++) {$data = @list[$i]; $pp=index($data, $tango.' /// '); if ($pp==0) {$pp=index($data,' /// '); $data=substr($data, $pp+4); $data=~ s/\\n/<BR>/g; last; } } } elsif ($f{'submit'} eq '↑') { #デクリメント処理 $i--; $data = @list[$i]; $pp=index($data,' /// '); $data=substr($data, $pp+4); $data=~ s/\\n/<BR>/g; } elsif ($f{'submit'} eq '↓') { #インクリメント処理 $i++; $data = @list[$i]; $pp=index($data,' /// '); $data=substr($data, $pp+4); $data=~ s/\\n/<BR>/g; } print <<EOD; Content-type: text/html; charset=sjis-jp\n\n"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY bgcolor="#b08317"> #<P> </P> <FORM method="GET" action="dic.cgi" name="tangoform"> [略] <form name="result"> <textarea>$data</textarea> </form> </BODY> </HTML> EOD 原因はどこにあるのでしょう。。。もしお教えいただければ幸いです。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.11

> *これでいいのでしょうか?まるで自信ありません。 %で指示するときはあまり意味がありませんが、残りの幅は勝手に計算してね、ぐらいの意味です。 > Perlスクリプトのどこで設定したらよいのでしょうか? 何も設定しなくて大丈夫ですよ。初回のdic.cgiの実行では当然 QUERY_STRINGに何も設定されていない状態ですから、$FORM{'nummer'}やその他には値がセットされていない状態ですが、Perlは変数を初期化しなければ空の値を返すでしょうから、プログラム上ではそれを期待したプログラムを作ればよいのです。 初回の表示ではブランクが表示されればいいのですから、変数を何もいじらなければ期待したブランクが表示されるはずです。

tonka729
質問者

お礼

yatokesa様、フレームが出てきませn. 、書きましたが、私のミスでした。出ました。検索結果が出ないのは、私の検索部分の書き方に問題があるに違いありません。調べてみます。どうも失礼しました。ところで表示の文字化けはどうすれば解消できるのでしょうか? <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> を書き直す必要がありますか?

tonka729
質問者

補足

yatokesa様、ご親切なアドバイスを引き続きいただきありがとうございます。 前回のご返事に書きましたあのtangokensaku.htm をApache2でテストしています。が、ブラウザーで呼び出してもフレームが出てきませんし、dic.cgiを実行していません。エラーはでませんでした。  もっとも、ブラウザでいきなりdic.cgiを実行させるとおかげさまで、初期画面表示に成功します。フレームなしですが。(ただ、単語を入れて検索させようとすると、ブラウザのアドレス(D)にエラーのような文字が出ました  原因が、初心者の私にはどうも分かりません。お教えいただけると幸いです。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.10

dic.cgi --- @str = split ("&", $ENV{'QUERY_STRING'}); foreach $param (@str) { ($e, $v) = split ("=", $param); $FORM{$e} = $v; } $i = $FORM{'nummer'}; $max = $FORM{'total'}; if ($FORM{'submit'} eq '単語検索') { #単語検索 } elsif ($FORM{'submit'} eq '↑') { #デクリメント処理 } elsif ($FORM{'submit'} eq '↓') { #インクリメント処理 } print <<EOD; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY bgcolor="#b08317"> <P> </P> <FORM method="GET" action="http://www.***.com/***.cgi" name="tangoform"> <INPUT size="20" type="text" name="tango"> <INPUT type="submit" name="tangosubmit" value="単語検索"> <INPUT type="submit" name="prev" value="↑"> <INPUT type="submit" name="next" value="↓"> <INPUT size="8" type="text" name="nummer" value="$i"> / <INPUT size="9" type="text" name="total" value="$max"> </FORM> <div align=right> <INPUT type="submit" value="URLを登録"> <SELECT size="1" name="URLlistbox"> <OPTION value="bbbb" selected>aaaa</OPTION> </SELECT> </div> <form name="result"> <textarea>$result_of_meaning</textarea> </form> </BODY> </HTML> EOD --- 適当ですがこんな感じでしょう。 <FRAMESET rows="50%,*"> <FRAME name="frame1" src="hoge.html"> <FRAME name="frame2" src="dic.cgi"> </FRAMESET> このようにフレームを変更すればよいです。

tonka729
質問者

補足

yatokesa 様、見捨てずにお教えいただき、どうもありがとうございます。 次のようなhtm ファイルを作って、Apache2でテストを始めました。dic.cgiのパスがApache2ディレクトリにしてあります。 tangokensaku.htm の中身を以下のように書きました。 <head><title>情報拾い読み・単語検索サイト<title></head> <FRAMESET rows="50%,*"> <FRAME name="frame1" src="hoge.html"> <FRAME name="frame2" src="c:\Apache2\htdocs\dic\dic.cgi"> </FRAMESET> </html> *これでいいのでしょうか?まるで自信ありません。 dic.cgi のほうも御教示いただいたスクリプトに切り替えました。が、プログラム冒頭のフォーム部品"nummer"や"単語検索ボタン","↓","↑"などが画面上にまだ書かれていない状態でブラウザはdic.cgiを読みに行きますね。肝心の"tango"のボックスもまだありませんから、検索も行わず、$result_of_meaningは獲得できていないままの状態でおわってしまっていると思います。  フォーム部品をどう、Perlスクリプトのどこで設定したらよいのでしょうか? このプログラムの構成をお教えいただき、目から鱗が落ちるおもいです。こういう分岐をさせれば、私の前回の疑問は解消ですね。  すみません、引き続き御教示をぜひお願い申し上げます。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.9

>私ができているのはForm から値を取得、 >CGIで処理(検索と結果表示)。できないでいるのは、 >画面上にあらかじめ設けてある二個の一行入力領域に、 >処理結果のpointer とデータ総量を書き込むことです。 そうですね、CGI/Perlでは無理です。サーバーサイド側のプログラムではクライアント側(ブラウザ)に文字列を送るだけの能力(HTTP通信)しかありませんから、クライアント側に既に送ってしまったhtmlを操作することはできません。 DHTMLやflashなども単ページ内での動作しかサポートしないでしょうから、(フレームに限らず)ページをまたがって内容を書き換えるには JavaScriptしかないでしょうね。#私はJavaScriptはよく知りません。 ただ、私個人の意見(というかポリシー)として、万人向けのwebページの場合、JavaScriptの動作を期待した機能の作り込みはあまり賛成したくないものです。イントラネット内での使用など、クライアント側の能力(機能)がわかっているのであればこの限りではありません。 プログラムの単純さと労力とを考えると、dic.cgiに入力フォームを表示させ、結果を textareaに表示させる方が楽な気がしたので#8ではアドバイスとして提案しました。 #6補足 >target="form2"; >document.tangoform.nummer.value= $i; >document.tangoform.total.value= $max; このスクリプトはどこに表示させるのでしょう? dic.cgi内(frame3)で表示しなければ動きませんよ。このとき、frame2を参照するのなら、window.parent.frame2.document.tangoform.number.value = $i; のようになると思います。#たぶん^^;)

tonka729
質問者

補足

だんだん分かってきました。Perl の本を見ても入力値をGetすることばかり書かれていて、逆にその値を、たとえば1つインクリメントして、textarea に入れることは書かれていないので、それはできないのですね。当初の構想をあきらめます。  #8のアドバイスに従って試みてみようと思います。 すでに御教示に従って次のようにしてあります。 print "<FORM action=\"dic.cgi\" name=\"tangoform\" target=\"frame2\">\n"; print "<input type=text name=\"number\" value=\"$i\">\n"; print "<input type=text name=\"total\" value=\"$max\">\n"; print "</form>\n"; この結果,ふたつのtextarea "number","total"が画面に生まれて値がそれぞれ入りました。 で次に、このnumber値を、ボタンを押したらインクリメントしたいのですが、どうすればnumber値を得られるのですか?  とりあえず、この一つだけをご質問いたします。 (第2ぺーじへ回るべき古い質問として扱われ始めたので、そろそろ、これらの質問を新規に出すべきでしょうか?->GOO 管理者の方へ)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.8

すいません、ようやく意味が飲み込めました。 フレーム間でデータの受け渡しをしたいと言うことだったんですね。 フレームを3つに分ける理由は何でしょう? 2つのフレームにして、単語検索のフォームを含むCGIを下のフレームに表示、単語の検索結果は<textarea>に表示するようにするとかのほうが色々悩まなくてすむと思いました。

tonka729
質問者

補足

一番最後に書きました内容は、確かに、フレーム間でデータの受け渡しができないので、教えていただきたい、ということです。  でも、もともとはそれよりも、フォームから受け取った値を基にCGIプログラムを動かした後、得た値をこんどは別の(フレームは同じ)一行入力領域に書き込みたい、ということだったのです。値$iをname=countに、値$maxをname=total に入れたいのです。  私の質問が大変稚拙なので伝わらないような気がしています。  もう一度書きます。  私ができているのはForm から値を取得、CGIで処理(検索と結果表示)。できないでいるのは、画面上にあらかじめ設けてある二個の一行入力領域に、処理結果のpointer とデータ総量を書き込むことです。

  • feininger
  • ベストアンサー率41% (74/180)
回答No.7

このとき結果が別フレームへ表示されましたよね? なので1~3は target="frame2" で。 4になったら target="frame3" と「targetも変更する」とよいかと。 ただ、フレームをいろいろコントロールしたい場合はJavaScriptを併用させる必要がでてくる可能性もありますので、そのときはJavaScriptの方へ質問したほうがよいかも。

tonka729
質問者

補足

次のようにフレームを指定しても利きませんでした。 そこで疑いが。frame3に表示できているのは、単に、HomepageBuilder のtarget 属性設定でframe3に設定しているお陰であって、このperl スクリプトではframe操作が実現していないのではと。 print "<form action=\"dic.cgi\" name=\"tangoform\" method=\"POST\" target=\"frame3\">\n"; print "<input type=text name=\"nummer\" value=\"$i\">\n"; print "<input type=text name=\"total\" value=\"$max\">\n"; print "</form>\n"; #frame2 へも表示できるか? print "<FORM action=\"dic.cgi\" name=\"tangoform\" target=\"frame2\">\n"; print "<input type=text name=\"nummer\" value=\"$i\">\n"; print "<input type=text name=\"total\" value=\"$max\">\n"; print "</form>\n"; それとも、すでに書きましたが、print <<"OEL";...でJavaSkript行を書く方向で検討すべきでしょうか?

  • feininger
  • ベストアンサー率41% (74/180)
回答No.6

こういうCGIを検討してみてください。 1)GETやPOSTでデータが送られてきたかどうかをチェック 2)データがなかった場合は空の入力フォームを表示 3)データがあった場合はvalueにデータを入れて入力フォームを表示 4)すべての入力データが揃ったら結果を表示(結果は別フレームに表示させてもOK) つまりCGIで入力フォームを丸々表示させるということです。 (No.2で訊いたのはそういうこと) 入力フォームはdicpage.htm。処理はdic.cgi。 このような構成で希望していることを実現させようとすると、「dic.cgiでdicpage.htmファイルを書き換える」という処理になってしまいます。これはかなり面倒です。フレームがからむと特に。 ・・・このあたり、CGI vs JavaScriptでの得手/不得手という感じかな?

tonka729
質問者

補足

feininger 様、おっしゃるとおり、No.2でのご指摘にもかかわらず、わたしは、何とかして、dicpage.htm (フレームで3つに区切られています) と dic.cgi を共存させようとしています。上記の1)~4)はできていると言えると思うのですけど。。ただ4)の(結果は別フレームに表示させてもOK)を実現できていません。次のようにしてもだめでした。変数$i,$max の値を別フレームに出せません。 print <<"EOL"; <SCRIPT language="JavaScript"><!-- target="form2"; document.tangoform.nummer.value= $i; document.tangoform.total.value= $max; //--> </SCRIPT> EOL 初心者なので申し訳ありません。どうかよろしくご指導下さい。フレーム設計を放棄したくありません。理由は、最上のframe1にURLで独・伊語のニュースを表示したいのです。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.5

ごめんなさい、私が勘違いしていましたね。#1さんは適切な回答をされていると思いますよ。 $i, $maxに期待した値が格納されているのなら print文で問題なく出力されます。 固定の数値を form/input text で出力する理由は分かりませんが、valueに値をセットする方法は間違いではありません。#1さんの仰るように ' (シングルクォート) " (ダブルクォート)の使い方、\エスケープ等を見直されることをお薦めします。 また参考までに print <<EOD; <form action="dic.cgi"> <input type=text name="count" value="$i"> <input type=text name="total" value="$max"> </form> EOD という書き方もできますし、 printf ("<input type=text name=\"count\" value=\"%d\">", $i); と言う書き方もできます。

tonka729
質問者

お礼

printで出力すると、どうしてもフォームの値入力ボックスができてしまい、そこにこの二つの変数$i, $max が入ってしまいます。  そうではなくて、何とかして上部右端の二つのボックス(左端ではなく)にこの値を入れて、次の見出し語をアクセスするときのポインタとしたいのです。やはりprint によるのでしょうか? ほんとに、皆様お助けいただいて感謝しております。どうか、さらに引き続きご指導をお願いいたします。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.4

><input type=text name="count" value="$i"> ><input type=text name="total" value="$max"> このようにHTMLに書いても$i, $maxはperlの変数にはなりません。valueはhtmlでテキストボックスを表示するときの初期値になります。 perlでform上のテキストボックスに入力された値を読み出すには、formのmethodがGETの場合、環境変数 QUERY_STRING、POSTの場合は標準入力で渡された値を適切に加工して受け取る必要があります。

tonka729
質問者

お礼

皆様、ご親切に御教示いただきありがとうございます。 できればいいと願っておりますのは、ある二つの一行入力ボックス(nameは"count"と"total")に、単語のポインタと全単語数をperlプログラムで入れることなんです。printメソッドではだめだということは分かりました。  よろしくお願いします。

  • feininger
  • ベストアンサー率41% (74/180)
回答No.3

他のところでも質問されている内容を見てふと気付きました。 まず、提示されているソースは次のどれですか? 1)ファイル *.cgi の一部を抜き出したモノ(つまりperlスクリプト) 2)*.cgi を実行後、その結果のHTMLソースを抜き出したモノ(つまり実行結果) 3)*.htmファイルの一部を抜き出したモノ たぶん2かな?と仮定すると・・・ perlではダブルクォーテーションとシングルクォーテーションでそれぞれ意味が異なります。 下記はよく似ていますが出力結果はまったく異なります。  print "---$data---";  print '---$data---'; 前者の場合、実行すると ---abc--- のように$dataの値が出力されます。 後者の場合、実行すると ---$data--- のように「そのまま」出力されます。

関連するQ&A

  • javascriptでCGIを実行するには

    htmlタグ <form method="post" action="・・・/cgi-bin/gogo.cgi"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> 上記で送信ボタンを押すとcgi側でnameを受け取れますが、 以下の場合はcgiは動作するのですが、nameを受け取れません、 受け取れる方法を教えてください。 <script type="text/javascript" language="javascript"> <!-- function gogo(){ document.write('<img src="・・・/cgi-bin/gogo.cgi">'); } // --> </script> </head> <body> <form method="post" action="javascript:gogo()"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> </form>

  • 送信先CGIの選択

    <form method="post" action="file.cgi"> <input type="hidden" name="password" value="xxx"> <input type="hidden" name="action" value="zzz"> <input type="text" name="name" size="50" value=""> </form> この場合、送信先CGIがfile.cgiに固定されていますが、action="送信先"をリストボックス等を使って複数選択できるようにしたいと考えています。可能でしょうか?

    • ベストアンサー
    • Perl
  • 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の組み方、メールフォームの作り方などがあれば教えてください。

  • チェックボックス(CGI)のズレをなくすにはどうすればよいでしょうか?

    現在メールフォームを勉強中です。チェックボックスの項目を1つだけ設定していますが、チェックを外せば下の項目が上に一段ズレて送信されてきます。 チェックが外されていてもその項目だけ“空白”もしくは“チェックなし”とかに出来ますでしょうか?お手数ですが、ご教授ください。 【html側】 <form method="POST" action="mail.cgi"> <input type="text" name="01"> <input name="checkbox" type="checkbox" value="on"> <input type="text" name="02"> <input type="text" name="03"> <input type="submit" value="確認画面"> </form> 【cgi側】 $form0 = "01"; $form1 = "チェック"; $form2 = "02"; $form2 = "03"; if($form0 eq ""){ $form_input0 = ""; } else { $form_input0 = "<p class=\"text\">$form0 = $VALUE_DATE[0]</p>";} if($form1 eq ""){ $form_input1 = ""; } else { $form_input1 = "<p class=\"text\">$form1 = $VALUE_DATE[1]</p>";} if($form2 eq ""){ $form_input2 = ""; } else { $form_input2 = "<p class=\"text\">$form2 = $VALUE_DATE[2]</p>";} if($form3 eq ""){ $form_input3 = ""; } else { $form_input3 = "<p class=\"text\">$form3 = $VALUE_DATE[3]</p>";} <FORM method="post" action="mail.cgi"> <INPUT type="hidden" name="$form0" value="$VALUE_DATE[0]"> <INPUT type="hidden" name="$form1" value="$VALUE_DATE[1]"> <INPUT type="hidden" name="$form2" value="$VALUE_DATE[2]"> <INPUT type="hidden" name="$form3" value="$VALUE_DATE[3]"> <INPUT type="submit" value="この内容で送信する"></FORM> $mbody .= "\n"; $mbody .= "フォームより以下の内容が送信されました。\n"; $mbody .= "\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; $mbody .= "・$form0:$VALUE_DATE[0]\n"; $mbody .= "\n"; $mbody .= "・$form1:$VALUE_DATE[1]\n"; $mbody .= "\n"; $mbody .= "・$form2:$VALUE_DATE[2]\n"; $mbody .= "\n"; $mbody .= "・$form3:$VALUE_DATE[3]\n"; $mbody .= "=============================================================\n"; $mbody .= "\n"; ソースは文字制限の関係で省略しています。解りにくいですが、宜しくお願いします。

    • 締切済み
    • CGI
  • cgiの記述方法について

    よろしくお願いします。 お問い合わせフォームを作成したくhtmlに以下の記述をしました。 やはり、これではフォームは機能しないようで、form action="../・・ にまだ何かを記述する必要があるようなのですが、書籍を見ても解決出来ずに困っております。 どなた様か、ご指導の程よろしくお願いします。 ご指導いただくにあたり、どこまでの説明が必要なのか分からなかったため、このようなご説明になってしまいましたが、よろしくお願い致します。 【html】 <form action="../cgi-user/questionform.cgi" method="post"> <p>お名前 <br /><input type="text" name="メルマガお名前" size="40" /> </p> <p>メールアドレス <br /><input type="text" name="email" size="40" /> </p> <p> <input type=submit value="登録" /> <input type="reset" value="リセット" /> </p> </form>

    • ベストアンサー
    • CGI
  • javascriptからCGIへの値渡し

    cookieは利用しない方向で考えています。 HTML上のdocument.form01.のsubmitが押下されたら一度手入力されたデータ(userinput)を加工し、 別のフォームform02.valueに格納してtest.cgiにPOSTで投げる動作を期待しています。 下記だとページ遷移無しで一時的な格納まで確認しましたが CGIへの送信が機能していないようです。 どの様にすべきでしょうか? [html] <script type="text/javascript"> <!-- function onSubmit() { document.form02.sendform.value = '\"' + document.form01.userinput.value + '\"'; document.form02.submit(); } --> </script> <body> <form name="form02" method="POST" action="test.cgi"> <input type="hidden" name="sendform" value=""> </form> <form method="POST" action="" name="form01"> <input type="text" name="userinput"> <input type="submit" value"送信" onclick="return onSubmit();"> </form> </body> </html>

  • CGI初心者です

    sub html でフォームに入力してもらい、 sub kekka で入力情報を確認し、 sub shori でテキストファイルに登録。 というプログラムを考えているのですが、 フォームから入力されたデータが入った変数$in{'name'} が、sub shori に移ると消えてしまいます。 いろいろ試行錯誤したのですが分かりませんでしたので 教えていただけたらと思います。 以下がサンプルのソースです。 #!/perl/bin/perl require './jcode.pl'; require './cgi-lib.pl'; &ReadParse; if($in{'action'} eq "set"){&kekka;} elsif($in{'action'} eq "sss"){&shori;} else{&html;} sub html{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト1</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="set">\n 名前<br><input type=text name="name" size="30" MAXLENGTH="30"><br>\n <input TYPE="submit" value="確認"><INPUT type="reset" value="リセット">\n </form>\n </body>\n </html>\n EOM } sub kekka{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト2</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="sss">\n name = $in{'name'} <input TYPE="submit" value="登録">\n </form>\n </body>\n </html>\n EOM } sub shori{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト3</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n name = $in{'name'} </form>\n </body>\n </html>\n EOM }

    • ベストアンサー
    • Perl
  • CGIプログラムがうまく作動しないのですが

    OCNのPage On に簡単な入力フォームのCGIが載っており,それをホームページビルダーのIモード版に利用しようと,HTMLに貼りつけるのですが,なかなかうまくいきません。 (提供されているCGI) <FORM METHOD="post" ACTION="/cgi-bin/formmail.pl"> <INPUT TYPE="hidden" NAME="recipient" VALUE="???@???.ocn.ne.jp"> [題名]:<INPUT NAME="subject" SIZE="30"><BR> [氏名]:<INPUT NAME="name" SIZE="30"><BR> [E-mail]:<INPUT NAME="email" SIZE="30"><BR> [コメント]:<INPUT NAME="comment" SIZE="30"><BR> <INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> (以上) [題名]と[コメント]の部分は必要ないので,この部分は削除し,代わりに [性別][年齢][職業]といったものを[氏名]の下に次のように作って追加したのですが…。 [性別]:<INPUT NAME="sex" SIZE="6"><BR> [年齢]:<INPUT NAME="age" SIZE="6"><BR> [職業]:<INPUT NAME="occupation" SIZE="10"><BR> ちなみに最後の「送信」の部分を押すと「氏名}の部分の情報だけが送信されます。 どこに問題があるのかご教示頂ければ非常に助かります。 よろしくお願いします。

  • formタグ

    HTMLで、formを使用し、CGIへテキストエリアのデータをpostしたいと 考えております。 テキストエリアを3つ、ボタンを1つ設けるならば 通常以下のようにすると思います。(必要部分の抜粋) <form action="foo1.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行"> </form> こうすると、実行ボタンをクリックすると、text1、text2、text3のテキストエリアに 記述されているテキストが送信されますが、ここにボタンをもう一つ設け、 上記3つのデータを別のCGIに送信したいのですが、 この場合どのようにHTMLを記述したらよいでしょうか? 新たに下記のようにformタグを設けると、テキストエリアは6つになってしまいますし。。。 <form action="foo2.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行2"> </form> どなたか分かる方情報頂けますか。

    • ベストアンサー
    • HTML
  • 1つのフォームで2つのcgiにデータを送るには

    どうぞよろしくお願いします。 テキストエリアにデータ入力して送信ボタンを押すと、 入力した内容が2つのcgiに送られるというようにしたいのですが、こういったことは可能でしょうか? イメージとしては下記のような感じです。 <form action="CGI名1" action="CGI名2" method="POST"> <inpu type="text" name="text1" size="32"> <input type="submit" value="送信"> </form> 両方の送信結果を別々のウインドウで表示します。 もしformタグでは不可能な場合、何か代換法がありましたらよろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう