アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://oshiete.goo.ne.jp/qa/7451675.html

すみません、3回目の質問です。
相変わらず変数の値がうまく渡りません。

3つのページ(ファイル)に分かれていまして
a 入力ページ
b 入力確認ページ
c メール送信ページ
の構成になっています。

a,入力ページが
print $q->start_html(-title=>"*****", -BGCOLOR=>'#ffffff'),
#$q->p('Content-type: text/html\n\n'),
#$q->header(-charset=>"Shift_JIS"),
$q->p('<body bgcollor="#ffffff" text="#000000" link="#0000ff" vlink="#ff00ff">'),
$q->p('<FONT color="blue">****FONT>'),
$q->hr,
$q->p('<form method="post" action="***.cgi">'),# 送信ボタンで送信するデータここから
$q->p('<FONT color="blue">【***】</FONT>'),
$q->p('<INPUT TYPE="text" NAME="name" VALUE="" SIZE="25" MAXLENGTH="25">'),
$q->p('<FONT color="blue">【***】</FONT>'),
$q->p('<INPUT TYPE="text" NAME="menberno" VALUE="" SIZE="25" MAXLENGTH="25">'),
$q->p('<FONT color="blue">【***】</FONT>'),
$q->p('<select name="question" size="1" multiple="multiple">'),
$q->p('<option selected="selected" value="aaa">aaa?</option>'),
$q->p('<option selected="selected" value="bbb">bbb?</option>'),
$q->p('<option selected="selected" value="ccc">ccc?</option>'),
$q->p('</select>'),
$q->br,
$q->p('<FONT color="blue">【****】</FONT>'),
$q->p('<INPUT TYPE="text" NAME="ans" VALUE="" SIZE="25" MAXLENGTH="25">'),
$q->p('<input type=submit value="送信">'),
$q->p('</form>'),# 送信データここまで
$q->hr,
$q->end_html;

となっています。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
b.入力確認ページが
$formdata = "最初は空っぽ";
print "$formdata<BR>";
if ($ENV{'REQUEST_METHOD'} eq "GET") {# GETでの受信
$formdata = $ENV{'QUERY_STRING'};
print "Get=$formdata";
}
else {# POSTでの受信
read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
print "POST=$formdata";
}
print "$formdata<BR>";#ここも空っぽ・・・・
####################################################################################
# 表示部
####################################################################################
#print $q->header(-charset=>"Shift_JIS");
print $q->start_html(-title=>"******", -BGCOLOR=>'#ffffff'),
$q->p('<meta http-equiv="content-type" content=text/hetm; charset=Shift_JIS>'),
$q->p('<form method="post" action="mail.cgi" value=$formdata>'),# 送信ボタンで送信するデータここから
$q->p('<FONT color="red">'),
$q->p('***'),
$q->p('***'),
$q->p('</FONT>'),
$q->p('***********'),
$q->hr,
$q->p('<input type=submit value="****">'),
$q->p('</form>'),# 送信データここまで
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
となっていますが、受信したはずのデータが空っぽのようなのです。
何も表示されません。
色々調べてみたのですが、よくわかりませんでした。
教えて頂きたいです。

A 回答 (1件)

$qは何でしょう?



おそらくCGIオブジェクトだと思います。そうであるなら
http://perldoc.jp/docs/modules/CGI-2.89/CGI.pod より
> 新しい問い合わせオブジェクトの作成(オブジェクト指向スタイル):
> $query = new CGI;
> これは(POSTとGETメソッドの両方からの)入力を解析し、 $queryと呼ばれるperl5オブジェクトに格納します。
と、あります。つまり、
> if ($ENV{'REQUEST_METHOD'} eq "GET") {# GETでの受信
(略)
> print "POST=$formdata";
>}
の部分はまったく無意味なコードです。CGIモジュールを使う理由の一つは、こういうコードを書かなくても、簡単にパラメータ受けとれる、ということです。
内容はparamメソッドで取りだせます。


・これが出力したHTMLを「ソースを見る」等で確認しました?
pメソッドは<p>タグの構造をperl上で表現するためのものです。
$q->p( "aaaa", $q->strong("BBB") , "ccc" )
→ <p>aaaa<strong>BBB</strong>ccc</p>
といったように。こうすると、Perlでの文法の構造と、HTMLの文法構造が一致するわけです。

それをまったく無視してるので、できあがったソースが無茶苦茶になってます。
そのせいで、そもそものデータが送られてない可能性もあります。

formを書くなら http://perldoc.jp/docs/modules/CGI-2.89/CGI.pod# … あたりを読んでください。
正しい文法かどうかもわからないなら、各種チェッカーがありますから、使ってください。
http://validator.w3.org/
http://openlab.ring.gr.jp/k16/htmllint/index.html
http://users.skynet.be/mgueury/mozilla/ (firefoxのアドオン)


・前の質問(http://oshiete.goo.ne.jp/qa/7453554.html)から
> ラクダ本の上巻は必須でしょうか?

下巻は、当然、上巻の続きですから、上巻を読んでいること前提で書かれています。
他の資料で上巻相当のことを理解しているのなら不要かもしれません。
が、これまでのやりとりを見ていると、とてもそうには見えません。
ラクダ本はあまり初心者向けではないので、今すぐに、とは言いませんが、将来続けていくなら読んでおいた方がいいです、
    • good
    • 0
この回答へのお礼

大変詳しいご指摘ありがとうございます!
htmlの知識が足りないことがわかりましたので、そちらから勉強していきたいと思います。
htmlもよくわかっていないので、まずはhtmlで表示を作ってから、CGIプログラムに落とし込む、といった作り方をしていこうと思います。

本当にありがとうございました。

お礼日時:2012/05/08 10:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!