• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl cgiの変数の受け渡しができません。3)

Perl CGIの変数の受け渡しができない

kmeeの回答

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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#pod125011 あたりを読んでください。 正しい文法かどうかもわからないなら、各種チェッカーがありますから、使ってください。 http://validator.w3.org/ http://openlab.ring.gr.jp/k16/htmllint/index.html http://users.skynet.be/mgueury/mozilla/ (firefoxのアドオン) ・前の質問(http://okwave.jp/qa/q7453554.html)から > ラクダ本の上巻は必須でしょうか? 下巻は、当然、上巻の続きですから、上巻を読んでいること前提で書かれています。 他の資料で上巻相当のことを理解しているのなら不要かもしれません。 が、これまでのやりとりを見ていると、とてもそうには見えません。 ラクダ本はあまり初心者向けではないので、今すぐに、とは言いませんが、将来続けていくなら読んでおいた方がいいです、

kmwrod
質問者

お礼

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

関連するQ&A

  • 無駄な改行を何とかしたいです

    perl cgiでまだまだわからないことだらけなので、まだ質問します・・・ print $q->start_html(-title=>"画面", -BGCOLOR=>'#ffffff'), $q->header(-charset=>"Shift_JIS"),# Content-type: text/htmlを書き出します $q->p('<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#ff00ff">'), $q->p('<FONT COLOR="red">aaa</FONT>'), $q->hr, $q->p('<form method="post" action="ppp.cgi">'), $q->p('<FONT color="blue">【a】</FONT>'), $q->p('<INPUT TYPE="text" NAME="mmm" VALUE="" SIZE="25" MAXLENGTH="25">'), $q->p('<FONT color="blue">【b】</FONT>'), $q->p('<INPUT TYPE="text" NAME="nnn" VALUE="" SIZE="25" MAXLENGTH="25">' $q->p('<FONT color="blue">【c】</FONT>'), $q->p('<INPUT TYPE="text" NAME="ttt" VALUE="" SIZE="25" MAXLENGTH="25">' $q->p('<FONT color="blue">【d】</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->p('<FONT color="blue">【e】</FONT>'), $q->p('<INPUT TYPE="text" NAME="ans" VALUE="" SIZE="25" MAXLENGTH="25">'), $q->p('<FONT color="blue">【f】</FONT>'), $q->p('<textarea name="freeans" rows="5" cols="30" value="$initText" wrap="hard">$initText</textarea>'), #$q->p('<textarea name="freeans" rows="5" cols="30" value=$initText wrap="hard">あいうえお </textarea>'), $q->p('<input type=submit value="送信">'), $q->p('</form>'),# 送信データここまで $q->end_html; としているのですが、表示のほうが 【a】 テキストボックス入力欄 【b】 テキストボックス入力欄 【c】 テキストボックス入力欄 ・・・ と、テキストボックス入力欄の上下に改行が入っていしまいます。 消す方法はございますか?pタグがダメなんでしょうか? それとContent-Type: text/html; charset=Shift_JIS が最上部に表示されてしまいます。        $q->header(-charset=>"Shift_JIS"),# Content-type: text/htmlを書き出します の行が原因だということはわかるのですが・・・・変更方法がわからないです。 教えて頂きたいです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • POST からの受け渡しができません・・・

    教えてくださいm(__)m <FORM action="<? echo $PHP_SELF; ?>" method="POST"> :(ここにはif文がはいっています。) : print "お名前:<BR>\n"; print "<input type=\"text\" name=\"handle\" size=\"16\" maxlength=\"30\" value=\"<? echo ($handle); ?>\"><br><br>\n"; print "性別:<BR>\n"; for (reset ($sex_tbl); $key = key ($sex_tbl); next ($sex_tbl)) { echo (" <OPTION value=\"" . $key . "\""); if ($key == $sex) echo (" SELECTED"); echo (">" . $sex_tbl[$key] . "\n"); } print "PRポイント:<BR>\n"; print "<input type=\"text\" name=\"pr\" size=\"16\" maxlength=\"30\" value=\"<? echo ($pr); ?>\"><br><br>\n"; print "<CENTER><input type=\"submit\" value=\"次の人!\"></CENTER><br>\n"; print "<input type=\"hidden\" name=\"page\" value=\"kekkapage\">\n"; print "<input type=\"hidden\" name=\"handle\" value=\"" . $_POST['handle'] . "\">\n"; print "<input type=\"hidden\" name=\"sex\" value=\"" . $_POST['sex'] . "\">\n"; print "<input type=\"hidden\" name=\"pr\" value=\"" . $_POST['pr'] . "\">\n";←80 </FORM> : : ↑なのですが、 「・・・on line 80」エラー表示になりうまくいきません。 の部分が原因と表示にはなっているのですが…。 助けてください。 宜しくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • メールフォームで送信

    ラジオボタンとチェックボックスを選択しその結果をメールフォームにて送信出来るようにしたいのですが、可能でしょうか? ラジオボタンとチェックボックスの選択はこちらで http://okwave.jp/qa/q8072037.html これをメールフォームで送信するのですが、 最後にメールフォームを付け加えました。 これで、ラジオボタンとチェックボックスの選択されたものと合計も一緒に送信は可能でしょうか? 皆様ご教授の程お願いします。 <br> 下記の項目もどうぞ <br> <font color="#ff0000" size="1"><b> ※ </b></font>のついている項目は<font color="#ff0000"><b>必須</b></font>です。 <form method="post" action="CGIのURI"><br> <p> <br> <font color="#ff0000" size="1"><b> ※ </b></font>氏名:<input name="氏名" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>年齢:<input name="年齢" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>メールアドレス <input name="mail" class="form-textline01" maxlength="100" value="" type="text"><br> <font color="#ff0000" size="1"><b> ※ </b></font>住 所 <input name="address" class="form-textline03" maxlength="1000" value="" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>電話番号 <input name="tel" class="form-textline01" maxlength="20" value="" type="text">例) 123-456- 7890 <br> <font color="#ff0000" size="1"><b> ※ </b></font><br> <input name="性別" value="男" checked="checked" type="radio"> 男  <input name="性別" value="女" type="radio"> 女<br> <br> メダルの項目:<br> <input name="properties" value="CellPhone" type="checkbox"> マラソン <input name="properties" value="Car" type="checkbox"> 体操 <input name="properties" value="Car" type="checkbox"> 水泳 <input name="properties" value="Car" type="checkbox"> サッカー <input name="properties" value="Car" type="checkbox"> フットサル<br> <input name="properties" value="Car" type="checkbox"> バスケット <input name="properties" value="Car" type="checkbox"> バレー <input name="properties" value="Car" type="checkbox"> 野球 <input name="properties" value="Car" type="checkbox"> 相撲 <input name="properties" value="Car" type="checkbox"> スケート<br> <input name="properties" value="Car" type="checkbox"> スノボ <input name="properties" value="Cottage" type="checkbox"> セクシーコマンド<input name="properties" value="Car" type="checkbox">その他 <br> <br> 認定資格:<input name="資格" type="text"> <br> 好きな果物:<br> <select name="好きな果物"> <option>りんご</option> <option>みかん</option> <option>バナナ</option> <option>パイナップル</option> </select> <br> <textarea name="freeans" rows="4" cols="40">自由に意見を記述してください</textarea><br> <input value="送信" type="submit">  <input value="取り消し" type="reset"> </p> </form> <br> <br> ご協力ありがとうございました・・・<br> <br> </body> </html>

  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • CGIがうまくいかないので困っています

    フリーソフトのCGIを利用してメールフォームを設定しましたが、うまくいきません。困っていますのでどなたか助けてください。 送信した際にこのような表示があり、確かに受信できますが、一部しか表示しません。 さくらレンタルサーバー利用です。 *は自分のアドレス Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit MIME-Version: 1.0 To: ****@***.ocn.ne.jp From: ****@***.ocn.ne.jp Subject: HPからのお問い合わせ message = name name以外にも入力箇所がいくつもあるのに、message=とnameしか送られてきません。 htmlは次の通りです。 <form action="mail/mail.cgi" style="font-weight : normal;color : rgb(102, 102, 102);" method="post" enctype="text/plain"> <h3>お問い合わせフォーム</h3> <p>*は入力の必須項目です。</p> <table> <tbody> <tr> <th>お問い合わせ内容*</th> <td><textarea name="message" class="l" cols="40" rows="12"></textarea></td> </tr> <tr> <th>お名前(漢字)*</th> <td><input type="text" name="name" class="m"></td> </tr> <tr> <th>お名前(フリガナ)*</th> <td><input type="text" name="kana" class="m"></td> </tr> <tr> <th>E-Mail*</th> <td><input type="text" name="email" class="l"></td> </tr> <tr> <th>電話番号(半角)*</th> <td><input type="text" name="tel" class="l"></td> </tr> <tr> <th>FAX番号(半角)</th> <td><input type="text" name="fax" class="l"></td> </tr> </tbody> </table> <input type="submit" value="  送信  " class="button"> <input type="reset"><input type="hidden" name="to" value="******"></form> <hr> CGIは #!/usr/local/bin/perl # ★ perlのパス名 # ★ 送信先メールアドレス $mailto = '******'; # ★ サブジェクト(件名) $subject = 'HPからのお問い合わせ'; # ★ メール送信コマンド $mailcmd = '/usr/sbin/sendmail'; # ★ -fオプションの有無 $usefoption = 1; # ★ 送信結果メッセージ(ヘッダ) # <<END_OF_DATA ~ END_OF_DATA の間を好みにあわせて変更してください。 $header = <<END_OF_DATA; <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <title>メール送信結果</title> </head> <body> <h1 style=\"color:#36f;font-size:14px;\">メール送信結果</h1> <hr> <p>下記内容でメールを送信しました。ありがとうございました。</p> <hr> END_OF_DATA # ★ 送信結果メッセージ(フッタ) # <<END_OF_DATA ~ END_OF_DATA の間を好みにあわせて変更してください。 $footer = <<END_OF_DATA; <hr> <a href="../index.html">[戻る]</a> </body> </html> END_OF_DATA #==================================================================== # 自己診断機能。 #==================================================================== # メール送信がうまく動作しない時に、 # http://~/~/wwwmail.cgi?test の形式で呼び出してください。 if ($ENV{'REQUEST_METHOD'} eq "GET") { print "Content-type: text/html; charset=Shift_JIS\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>WwwMail自己診断</title>\n"; print "</head>\n"; print "<body>\n"; print "<p>CGIは正常に動作しています。</p>\n"; unless (-f $mailcmd) { print "<p>$mailcmd がありません。</p>\n"; } unless (-x $mailcmd) { print "<p>$mailcmd が実行可能ではありません。</p>\n"; } unl

    • ベストアンサー
    • Perl
  • ユーザ入力が表示されない原因を教えてください。

    CGI初心者です。基礎を勉強しただけなのでまだまだ理解が足りないせいかもしれません。現在データ検索のカスタマイズをしています。 ユーザが入力したものを検索条件の一部にと考えているのですが、なかなかできません。どこがいけないのかおしえていただけないでしょうか? インプット print "<P>● 業 務 <input type=text name=P2 size=30>\n"; アウトプット print "<td valign=top nowrap><font color=\"$t_color\">■</font> <B>業 務</B><br>\n"; print "<select name=P2 >\n"; print "<option value=\"99\" selected>指定なし\n"; $i =99; foreach $line (@lines) { ($name,$value) = split(/\,/,$line); chop; if ($name ne '') { $i++; $names{($name)[0]}++; $n++; } } foreach (keys %names) { print "<option value=\"$_\">[$_]\n"; } print "</select></td>\n"; と表記してます。クッキーを利用して反映できるようにはしていて、 入力したものを、登録内容の確認や、削除するときやメンテするときにはちゃんと表示されています。

  • メール問い合わせフォームがうまく表示されません

    現在ホームページを作成していて、 メール問い合わせフォームをうめこんだのですが、 必要事項を入力して「送信する」ボタンをおしてメール送信画面に移ると、 入力した文字が化けてしまいます。 どなたか修正方法をお教えいただけませんでしょうか。 宜しくお願い致します。 ≪HTML メール問い合わせ部分≫ <div class="contactBox clearfix">ヘアレスキュー・カプラに関するご質問・お問い合わせは、以下のフォームよりご連絡 ください。 <br> <form method="post" action="mailto:info@ka***.jp"> <p>お名前<br> <input size="20" name="name" type="text"></p> <p>メールアドレス<br> <input size="40" name="mail_address" type="text"></p> <p>性別<br> <input name="gender1" value="1" type="checkbox">男性  <input name="gender2" value="1" type="checkbox">女性</p> <p>お問い合わせ内容<br> <select name="seg"> <option selected="selected">選択してください</option> <option value="1">メニューについて</option> <option value="2">料金について</option> <option value="3">予約について</option> <option value="4">ヘアスタイルについて</option> <option value="5">その他</option> </select> </p> <p>詳細<br> <textarea rows="5" cols="60" name="comment"></textarea></p> <p><input value="送信する" type="submit"></p> </form> </div>

  • HTMLをおしえてください。

    こちらはPC初心者です。 HTMLここまでつくりました。 名前 <INPUT TYPE="text" NAME="name"><br> ハンドルネーム <INPUT TYPE="text" NAME="name"><br> 好きな色は? <SELECT NAME="color"> <OPTION SELECTED>選んでください。</OPTION> <OPTION VALUE="red">赤</OPTION> <OPTION VALUE="blue">青</OPTION> <OPTION VALUE="yellow">黄</OPTION> </SELECT><br> 行きたい国は?<br> <INPUT TYPE="checkbox" NAME="usa" VALUE="on">アメリカ<br> <INPUT TYPE="checkbox" NAME="china" VALUE="on">中国<br> <INPUT TYPE="checkbox" NAME="france" VALUE="on">フランス<br> <INPUT TYPE="checkbox" NAME="germany" VALUE="on">ドイツ<br> 感想<br><TEXTAREA NAME="comment" ROWS="4" COLS="30"></TEXTAREA><br> <INPUT TYPE="submit" VALUE="送信"><INPUT TYPE="reset" VALUE="書き直し"> </FORM> </BODY> 送信ボタンをおすとアウトルックが起動するようにしたいです。 書き直しボタンを押すと全部リセットできるようにしたいです。 どうかご指導の方をよろしくおねがいします。

  • 計算ができません

    こんにちは 以下のようなプログラムを書きましたが、文字列として扱われるみたいです。 計算させるにはどのようにしたらよいでしょうか? <html> <body> <form action="uektori.php" method="POST"> <input type="text" name="suuji1"> <select name="tasu"> <option value="+" selected>+</optinon> <option value="-" >-</optinon> <option value="*" >*</optinon> <option value="/" >/</optinon> </select> <input type="text" name="suuji2"> <input type="submit" value="送信"> <?php $a=($_POST['suuji1']); $b=($_POST['tasu']); $c=($_POST['suuji2']); $d="$a$b$c"; print "<br>"; print "$d"; ?> </body> </html> 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CGI(Perl)を作ったがうまく実行されない

    度々すみません。 ~~~~HTML~~~~ <FORM action="test.cgi" method="POST" NAME="FORM"> <div>最大攻撃力:<INPUT type="text" NAME="att"><br></div> <div>防御力:<INPUT type="text" NAME="def"><br></div> <div>クリティ時与ダメ:<INPUT type="text" NAME="cyo"><br></div> <div>クリティ時被ダメ:<INPUT type="text" NAME="chi"><br></div> <div>EXD時与ダメ:<INPUT type="text" NAME="eyo"><br></div> <div>EXD時被ダメ:<INPUT type="text" NAME="ehi"><br></div> <INPUT type=submit value="実行"> <INPUT type=reset value="リセット"></TD> </FORM> ~~~~CGI~~~~ #! c:/perl/bin/perl if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair(split(/&/,$query)) { ($l_set,$value) = split(/=/,$pair); $form{$l_set}=$value; } $att=$form{'$att'}; $def=$form{'$def'}; $cyo=$form{'$cyo'}; $chi=$form{'$chi'}; $eyo=$form{'$eyo'}; $ehi=$form{'$ehi'}; $hi=int((($chi*2+$def)+(($ehi*2+$def)/1.2))/2); $yo=int(((($att-$cyo*2)*2)+(($att*1.2-$eyo*2)*2))/2); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN"> <html> <head><title>被ダメテスト</title></head> <body><p>相手攻撃力は約<b>$hi</b>です。</p> <p>相手防御力は約<b>$yo</b>です。</p></body> </html> END このまま数値を入力して実行しても、「0」と出てきてしまいます。 読み込み(代入?)が出来ていないのでしょうか? 間違えている部分があればご指摘ください。 ※コンパイラはApacheです。

    • ベストアンサー
    • Perl