• 締切済み

FORMを教えてください

全くの素人で、どなたか教えて下さい。 <HTML> <TITLE>TEST</TITLE> <BODY> <FORM ACTION="test.cgi" METHOD="POST"> 氏名<INPUT TYPE="TEXT" NAME="name"> 住所<INPUT TYPE="TEXT" NAME="tokoro"> <INPUT TYPE="Submit" value="データ送信"> <INPUT TYPE="Reset" value="リセット"> </FORM> </BODY> </HTML> 名前と住所を記入して送信ボタンを押したら記入した内容が表示されるCGIプログラムを教えて下さい。 #!/usr/local/bin/perl print "Content-Type: text/html"; print "<html>\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; #受け取ったデータを表示する print "氏名=$in{'namae'}\n"; print "住所=$in{'tokoro'}\n"; print "</body>\n"; print "</html>\n"; exit; とした場合 氏名= 住所= しか表示されません。 何が足りないのでしょうか?

みんなの回答

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.5

こんにちは No.4です 別のことしててなんで文字化けするのかと思ったら1箇所間違えてました(--;) <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift-JIS"> です いつもはUTF-8でやってるので変更したらスペルミスをしてしまいましたm(_ _)m

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.4

こんにちは ライブラリィの読み込みやデコード処理をしてください ライブラリィ(jcode.pl)のインストール(同じディレクトリ内に保存) http://www.lrlab.to/rd/jcode.html #!/usr/local/bin/perl # ライブラリー取り込み require './jcode.pl'; # デコード処理 &decode; # 表示部の読み込み &html; # 表示部詳細 sub html { print "Content-type: text/html\n\n"; print <<"EOM"; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shit-JIS"> <title>TEST</title> </head> <body> EOM print "氏名=$in{'name'}<br>\n"; print "住所=$in{'tokoro'}\n"; print "</body></html>\n"; exit; } # デコード詳細 sub decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } undef(%in); my @buf = split(/&/, $buf); foreach (@buf) { my ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # SJISコード変換 &jcode::convert(\$val, 'sjis'); # エスケープ $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s/</</g; $val =~ s/>/>/g; $val =~ s/\r\n/<br>/g; $val =~ s/\r/<br>/g; $val =~ s/\n/<br>/g; $in{$key} = $val; } }

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

その記述では、readで読み込んだデータは$PostDataに格納されます。 以下のように書けばとりあえず表示するだけならできるでしょう。 (ついでにContent-Typeの後には改行が2つ必要。) 読み込んだデータを使いやすい形に加工して $in{'namae'}のようにして参照できるようにする方法については、 適当な解説サイトなり書籍なりみてくださいな。 (ANo.2の参考URLとか) ------------------------------------------- #!/usr/local/bin/perl read (STDIN, $PostData, $ENV{'CONTENT_LENGTH'}); print "Content-Type: text/html\n\n"; print "<html>\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; #受け取ったデータを表示する print "<pre>$PostData</pre>\n"; print "</body>\n"; print "</html>\n"; exit;

参考URL:
http://perl.misty.ne.jp/13.html
oyajipu
質問者

補足

すみません、ご紹介頂いた(ANo.2の参考URL)を見たのですが 読み込んだデータを使いやすい形に加工して $in{'namae'}のようにして参照できるようにする方法がいまいちわかりません。超ど素人でさっぱりです。

回答No.2

フォームに入力された値は、プログラム自信がその値を自分から受け取りにいかないとだめなんです。 oyajipuさんのコードにはその値を受け取る仕組みが無いので、フォームに何を入力しても表示されないのです。 肝心の受け取り方法ですが、oyajipuさんの場合はPOSTメソッドなので (<FORM ACTION="test.cgi" METHOD="POST">)、 read (STDIN, $PostData, $ENV{'CONTENT_LENGTH'}); としてやれば、$PostDataにフォームに入力された値が「一行で一気に」格納されるはずです。 後は、プログラムが処理しやすい形に加工してやればOKです。 参考URLもどうぞ。

参考URL:
http://www.futomi.com/lecture/form/index.html
oyajipu
質問者

補足

早速のご回答ありがとうございます。 次のように read (STDIN, $PostData, $ENV{'CONTENT_LENGTH'}); を記述すればいいのでしょうか? ------------------------------------------- #!/usr/local/bin/perl read (STDIN, $PostData, $ENV{'CONTENT_LENGTH'}); print "Content-Type: text/html"; print "<html>\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; #受け取ったデータを表示する print "氏名=$in{'namae'}\n"; print "住所=$in{'tokoro'}\n"; print "</body>\n"; print "</html>\n"; exit;

noname#36508
noname#36508
回答No.1

name, tokoro に値が代入されていないからでしょう

関連するQ&A