PerlのCGIでフォームのテキスト配列をPerlで取得するには?

このQ&Aのポイント
  • PerlのCGIを使用してフォームのテキスト配列を取得する方法について教えてください。
  • 通常は、フォームで同じ名前のデータを取得することはありませんが、同じ名前の場合のデータの取得方法がわかりません。
  • フォームで同じ名前のデータが配列となっている場合、そのデータを取得する方法を教えてください。
回答を見る
  • ベストアンサー

PerlのCGIでフォームのテキスト配列をPerlで取得するには?

フォームで通常は同じ名前のデータを取得することは無いのですが 表計算のように同じ名前の場合、データの取り出し方がわかりません。 以下、通常の1件の場合のソースです。 #!/usr/bin/perl $| = 1; use strict; our %in; use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); require 'jcode.pl'; require 'cgi-lib.pl'; # #-----分岐----- &ReadParse; # 配列でない場合 my $namae = $in{'namae'} print "$namaeで名前が1件表示される"; # これをフォームで namaeが配列になった場合、 #<input type="text" name ="namae"> #<input type="text" name ="namae"> #<input type="text" name ="namae"> # のような場合、3件取得する場合 exit; __END__

  • CGI
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

パラメータのデコード処理で使用するモジュールによって、やり方は変わってきますが、cgi-lib.pl と CGI.pm の場合は下記のようになります。 cgi-lib.pl :  対象のパラメータが収納された変数を \0 を区切り文字として分割する。 CGI.pm :  リストコンテキストで値を受け取る。 例) cgi-lib.plを使う場合 ---------------------------- require "cgi-lib.pl"; &ReadParth; # デコード処理 @hoge = split(/\0/, $in{hoge}); # \0 で分割 ------------------------------------------------ 例) CGI.pmを使う場合 -------------------------------- use CGI; $query = new CGI; # 新しいCGIオブジェクトの作成 @hoge = $query->param('hoge'); # パラメータhogeの内容の受け取り ------------------------------------------------

参考URL:
http://www.futomi.com/lecture/form/cgilib.html#3.2,http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm#FETCHING_THE_VAL

関連するQ&A

  • 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
  • フォームから値を受け取る方法について

    例えば <form method="post" name="frm" action="mail.php">名前<input type="text" name="namae"><br> 住所<input type="text" name="jyuusyo"><br> 電話番号<input type="text" name="denwa"><br> 職業<input type="text" name="syokugyou"><br> 年齢<input type="text" name="nenrei"><br> <input type="submit" value="送信"><br> </form> というフォームがあるとして、それをmail.phpで 名前を取得する場合$_POST['namae']と書く以外で フォームの1番目の値を取得するというような書き方はあるのでしょうか? frmのパラメータの数(上記の場合5コ)というのは取得出来るのでしょうか? ご存知の方教えてください。お願いします。

    • ベストアンサー
    • PHP
  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • JavaScriptでフォーム内配列要素の要素数

    いつもお世話になっております へんな質問で申し訳ございません CMSなどを使っているとフォーム内に配列形式になった名称をよく見かけるのですが 仮に下記のような場合に JavaScript内で各フォームの各々の要素数を取得することは可能でしょうか? <form name="f"> <input type="text" name="scf[配列1][0]" value="" class="widefat"> <input type="text" name="scf[配列1][1]" value="" class="widefat"> <input type="text" name="scf[配列1][2]" value="" class="widefat"> <input type="text" name="scf[配列2][0]" value="" class="widefat"> <input type="text" name="scf[配列2][1]" value="" class="widefat"> <input type="text" name="scf[配列2][2]" value="" class="widefat"> <input type="text" name="scf[配列2][3]" value="" class="widefat"> </form> 例えばJavaScriptで var nLenA = formname(scf[配列1]).length; var nLenB = formname(scf[配列2]).length; とすると nLenAの値は3 nLenBの値は4 という具合に配列数を取得してこれらを制御したいと考えています おいそがしいところ申し訳ございませんが わかる方がいらっしゃいましたらご教授お願い致します

  • フォームのname値を配列にしてJavaScriptでフォームのチェックをする方法

    JavaScriptでフォームの半角数字のチェックをしたいのですが、 form内容をCGI(PHP)に渡すためname値を配列にしないといけないのですが、 以下のスクリプトだとエラーが出てしまいます。 *実際はif(isNaN~)と<input~>をループで書き出しており、行数が不特定なので それぞれ別のname値を使うことができない状態です。 <script language="JavaScript"> function check() { if(isNaN(document.form1.hoge[0].value)){ alert("値は半角数字で入力してください。"); return(false); } if(isNaN(document.form1.hoge[1].value)){ alert("値は半角数字で入力してください。"); return(false); } return(true); } </script> <form method="post" action="xxx.cgi" onSubmit="return check()" name="form1"> <input type="text" name="hoge[0]"> <input type="text" name="hoge[1]"> </form> 特にCGIに渡す必要がなければ <input type="text" name="hoge"> <input type="text" name="hoge"> としてやればチェックができるのですが、どうしても次の 処理があるためname値を配列にする必要があります。 解決方法がわかる方がおられましたらご教授ください。 以上よろしくお願いいたします。

  • Perl/CGIについて

    #!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $jcode = './jcode.pl'; $to = 'ha***@***.ne.jp'; #$from = ''; $subject ='名鉄と地下鉄の直通運転'; # 文字コードライブラリの読み込み require $jcode; # メール送信 &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae\n"; print " $naiyou\n"; print "メールを送信しました\n"; end #確認表示の所で表示が改行されない。

    • ベストアンサー
    • Perl
  • 入力フォームにおける配列データに関して

    こんにちは。お世話になっております。 タイトルにあるように、フォームの中に入力されたデータを配列として、POSTするようなものを作成しました。 こんな感じ。 <p>ファイル</p> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <input name="fl[]" type="file" size="50"><br> <p>キーワード</p> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> <input type="text" name="keyword[]" size="18"><br> このフォームは、ファイルをアップロードし、かつ各ファイル毎に関連するキーワードを入力・登録させるためのものですが、データをPOSTしたとき、ファイルもキーワードも配列としているので、ファイル1段目とキーワード1段目。ファイル2段目とキーワード2段目・・・といった形で配列に格納されるものと思っておりましたが、ファイルがローカル上の同じフォルダ内にあるものに限っては、配列への格納順が保たれるのですが、違うフォルダからアップロードさせると、配列への格納順が保たれないことに気付きました。 そもそも、上記のようなフォームの作成は誤っているものなのか? それとも、このような場合、違う形式でのフォームを作成すべきなのか?などなど・・ 経験の乏しい私には解決策が見出せずに、今回投函させていただいた次第です。 お忙しい中恐縮ですが、アドバイスなど頂戴出来れば幸いです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • Webフォームについて

    OCNの無料ホームページサービスで、Webフォームを作成しました。 (団体への加入申込みフォームです) 下記のフォームで、未入力欄がある場合、   ・未入力を再度促す画面に戻るには?   ・入力した内容を確認して送信するには?   ・送信が終わって「ありがとうございました」旨を知らせる画面を表示するには?     (OCNサービスに標準仕様でも送信thank you画面があるが、画面を閉じる機能がない) HTMLタグが判らないので、ご教授をお願いします。 <html> <head> <title> サンプルフォーム </title> </head> <b>△○○△会加入フォーム</b></p> <FORM METHOD="post" ACTION="/cgi-bin/formmail.pl"> <INPUT TYPE="hidden" NAME="recipient" VALUE="△△@○○.ocn.ne.jp"> <INPUT type="hidden" NAME="subject" value="登録" /><BR> あなたのE-mail<BR> <INPUT TYPE="TEXT" NAME="email"><br> あなたの氏名<BR> <INPUT TYPE="TEXT" NAME="氏名"><br> 住所<BR> <INPUT TYPE="TEXT" NAME="住所" /><br> コメント<BR> <INPUT TYPE="TEXT" NAME="コメント"><br> <INPUT TYPE="submit" ACTION="/cgi-bin/formmail.pl" VALUE="送信" METHOD="post"> <INPUT TYPE="reset" VALUE="クリア"><br> </form> </div> </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

専門家に質問してみよう