• 締切済み

perlでpostが受け取れない

perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

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

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

本当に送られてますか?? 送信先を http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi にして確認する。

nodadev
質問者

お礼

ORUKA様。 お返事ありがとうございます。http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgiからあれこれ検索しているうちになんとかなりました。 受け取りたいFORMに<fieldset>を入れたらできました。まったくもう。。。GETでできたと思ったのはURLに付けたものをQUERY-STRINGで取れてただけでした。 初心者で申し訳ない次第ですが、またよろしくお願いします。

関連するQ&A

  • CGI間のデータ送信について(perl)

    perlのcgiで詰まってしまったので質問します。 現在困っていることは、cgiからcgiへの変数の値の受け渡しについてです。 色々調べてやってみたのですが、うまくいきません。 送信側で print "<form action = \"sendmail.cgi\" method=\"post\">"; print "<A href =\"sendmail.cgi?$array1[0]&$array1[1]&$array1[2]&$array1[3]\">sendmail.cgi</A>"; print "<input type=\"submit\" value=\" ボタンです。 \">"; print "</form>"; として 受信側で # postでもgetでも受信できるようにする if ($ENV{'REQUEST_METHOD'} eq "GET") { $data = '1'; $testmsg = "GETで受信"; $formdata = $ENV{'QUERY_STRING'}; print("$formdata<BR>"); } elsif ($ENV{'REQUEST_METHOD'} eq "POST"){ # こちらを使用している $data = '2'; $testmsg = "POSTで受信"; $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$formdata,$ENV{'CONTENT_LENGTH'});# $dataに受信する print("$formdata<BR>"); } else { $data = '3'; $testmsg = "受信することができませんでした。<BR>"; } としてpostにて受信しようとしています。 postのif文には入ったようなのですが、データが空っぽで何も入っていないようなのです。 何が原因なのでしょうか?助けてほしいです。

    • 締切済み
    • CGI
  • $.postとPerlのデータ受け渡しについて

    現在、 $.postを使ってPerlにリクエストを送り、帰ってきた値を表示するという事をしたいのですが、Internal Serverエラーとなりますが、どこにエラーがあるのかがわからない状態です。 実行権限などは与えています。 以下に書いたプログラムを貼りますので、間違いがありましたら是非教えていただきたいです。 HTML index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Test Page</title> <script type="text/javascript" src="../lib/jquery/jquery-1.3.2.js"></script> <script type="text/javascript" src="./JS/test.js"></script> </head> <body> <form id="form01"> <input type="text" name="title" id="title01" value="post"><br> <input type="button" value="post" onClick="getValue()"> </form> <div id="res_title"></div> </body> </html> JavaScript test.js function getValue(){ //フォームのデータ取得 var pos_title = $('#title01').attr('value'); //var comment = $('#comment').attr('value'); //フォームデータのPOST送信+コールバック $.post("./cgi-bin/post.pl", {"title" : pos_title}, disp); } function disp(data){ $('div#res_title').html(data); } Perl post.pl #!/usr/bin/perl -w use strict; use warnings; my $formdata; if ($ENV{'REQUEST_METHOD'} eq "GET") { $formdata = $ENV{'QUERY_STRING'}; } else { read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'}); } return $formdata;

  • apache1.3とperlでCGI

    超初心者です。 windows XPでapache1.3 と active perl 5.1.2をインストールして、 CGIを動作させたいと考えています。 http://localhostを入力してapacheの起動画面は表示されていること を確認しました。 その後httpdconfに下記を追加しました。 AddHandler cgi-script .cgi .pl AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl <Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> C:\Program Files\Apache Group\Apache\cgi-binに既存で存在する printenv.plを実行しようとするとファイルのダウンロードの画面が出てきて 実行されません。printenv.plは下記のようにperl.exeへのパスだけ変更しました。 #! C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } どうすればCGIが実行できるようになるのでしょうか? ご教授ください。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • perlの文でわからないところがあります。(2)

    こんにちわwindwsです。パールの文章でわからない箇所があります。先輩の皆さま、どうか宜しくお願いします。以下に文章を書きます。 (1) BEGIN {$ENV{PATH} = "/bin/usr/bin";   delete @ENV{pw (IFS CDPATH ENV BASH_ENV)};  ●sub unindent;} 特に●のヵ所はどう考えたら良いのか解りません。サブルーチンを宣言しているのですか?サブルーチンの戻り値を呼び出しているのでしょうか? (2) <FORM ACTION="/cgi/program.cgi" METHOD="POST"> <INPUT TYPE="hidden" NAME="id" ● VALUE="e07a08c4612b0172a162386ca558c6"> ここの●の行で識別子VALUEの値は誰がどのようにして決めるのですか? 宜しくお願いします。

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

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • 標準入力からデータが読込めない

    現在perlにてcgiを作成しています。 以下のようなcgiを作成したのですが、POSTで受取ったデータが 標準入力より取得できません。 解決策、又は、調査方法等ご存知の方いらっしゃいましたら教えてください。 --------- a.cgi -------- #!/usr/bin/perl print "Content-type: text/html\n\n"; if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); }else{ $buffer = $ENV{'QUERY_STRING' }; } print <<"HTML"; <HTML><HEAD><TITLE>テスト</TITLE> <META http-equiv=Content-Type content="text/html;"> </HEAD> <BODY> <FORM id=Form1 name=Form1 action=a.cgi method=post> HTML print <<"HTML"; <INPUT type=hidden value=aaa name=text1> <INPUT onclick="return confirm('送信します。よろしいですか?');" type=submit value=送信 name=Button1> </FORM> </BODY> </HTML> HTML exit; -------------------------------------------------- $ENV{'REQUEST_METHOD'} は POST を取得できていますし、 $ENV{'CONTENT_LENGTH'} も文字数は取得できています。 どうか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • mod_perlとディレクトリ

    以下のhttpd.confでAliasをコメントアウトして、 http://localhost/a/にアクセスすると、 Perlの【$ENV{MOD_PERL}】の部分が【mod_perl/2.0.2】と表示されますが Alias / c:/usr/Apache2/VirtualHost/mylink-info/public_html/a/ を有効にして、 http://localhost/にアクセスすると、 Perlの【$ENV{MOD_PERL}】の部分が【】となり、どうもmod_perlで動作していないです。 そうかといって、 <Location /a>を<Location />として全体をmod_perlすると sample.htmlなど cgi以外が正しく動作しないので、困っています。 mod_perlで動作するのは特定のディレクトリ(例えば /cgi-bin)の下限定として、 アクセス時に http://localhost/のようにあたかもpublic_htmlの下にあるように動作したいです。 #Alias / c:/usr/Apache2/VirtualHost/mylink-info/public_html/a/ #=== conf/httpd.conf ( mod_perl 2.x ) <IfModule mod_perl.c> LoadFile "C:/usr/local/bin/perl58.dll" PerlRequire "C:/usr/Apache2/conf/startup.pl" <Location /a> PerlSendHeader On SetHandler perl-script PerlResponseHandler ModPerl::PerlRun #PerlHandler Apache::Registry Options +ExecCGI PerlOptions +ParseHeaders Allow from all </Location> </IfModule>

    • ベストアンサー
    • Perl
  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI
  • CGIでフォームデータを取得できません

    CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }

    • 締切済み
    • CGI
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう