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

このQ&Aのポイント
  • フリーソフトのCGIを利用してメールフォームを設定しましたが、うまくいきません。
  • 送信した際に一部しか表示されず、正常に受信できません。
  • さくらレンタルサーバーを利用しています。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

質問には肝心なところが書いてないので... FORMのenctype属性値 text/plain はダメだと思います。ファイル添付は無いですからデフォルト(application/x-www-form-urlencode)のままで良いはずです。削除してください。

marimo-k
質問者

お礼

okmotokun様 指示どおり、text/plainを削除したら、メール内容がすべて届きました。 ありがとうございます。 質問が中途半端だったにもかかわらず、大変すばらしい回答をいただき、ありがとうございます。 また、初心者なので、なぜ解決できたか意味さえわからないままですが、数日間苦しんでいましたので、本当に感謝しています。 以上です。

関連するQ&A

  • メールフォームで必須項目の仕方

    メールフォームで必須項目を入力しないと送信できないようにするにはどうすればいいでしょうか? 現在は以下のとおりに書いてありますが、必須項目に書いてなくても送信できてしまいます。 <form method="post" action="CGI"> <h3>お問い合わせフォーム</h3> <p>*は必須項目です。</p> <table> <tbody> <tr> <th>お問い合わせ内容*</th> <td><textarea name="お問い合わせ内容" class="l" cols="40" rows="12"></textarea></td> </tr> <tr> <th>お名前(漢字)*</th> <td><input type="text" name="お名前(漢字)" class="m"></td> </tr> <tr> <th>お名前(フリガナ)*</th> <td><input type="text" name="お名前(フリガナ)" class="m"></td> </tr> <tr> <th>E-Mail*</th> <td><input type="text" name="E-mail" class="l"></td> </tr> <tr> <th>電話番号(半角)*</th> <td><input type="text" name="電話番号" class="l"></td> </tr> </tbody> </table> <input type="submit" value="  送信  " class="button"></form> また必須項目が未入力のときにエラーメッセージ(「お名前が未入力です。」など)を出したいのですがどのようにすればいいですか?

    • ベストアンサー
    • CGI
  • ビルダーで問い合わせフォームの設定

    会社でホームペジ制作中ですが、問い合わせフォーム(ビルダー既存の物)と雇用の履歴書フォームを作り メールで、送信させたいのですが、送信ボタンに此方のアドレスをリンク設定するだけかと 思ってましたが・・・・全然だめです。 しかし本屋その他の質問やメーユフォームなど検索しましたが、 私の頭では、理解できませんでした。 HTMLなどをどのように変更するのか・・・ビルダーの部品を使う場合・・・また 他におすすめのレンタルやフリーの物がありますか、 もう 考えすぎて・・・頭や目がヒクヒク(笑) 簡単なものがよいのですが・・・ 計画では住所をプルダウンさせたり、チエックボタンつけたりしたかったのですが・・・ 初心者なので、 サルでもわかる説明お願いします。 現在OCNを使ってます。 <form method="get" action=""> <h3>お問い合わせフォーム (電話、FAX,でも合せて受け付けております。)</h3> <p>業務内容についてのお問い合わせは、下記にて承っております。</p> <p>*は必須項目です。</p> <table width="548" height="332"> <tbody> <tr> <th width="145" height="25">お問い合わせ内容*</th> <td height="25"><textarea name="message" class="l" cols="40" rows="12"></textarea></td> </tr> <tr> <th width="145">会社名*</th> <td><input type="text" name="name" class="m"></td> </tr> <tr> <th width="145">ご担当者(フリカナ)*</th> <td><input type="text" name="name" class="m"></td> </tr> <tr> <th width="145">御担当者名(漢字)*</th> <td><input type="text" name="kana" class="m"></td> </tr> <tr> <th width="145">E-Mail*</th> <td><input type="text" name="email" class="l"></td> </tr> <tr> <th width="145">電話番号(半角)*</th> <td><input type="text" name="tel" class="l"></td> </tr> <tr> <th width="145">FAX番号(半角)</th> <td><input type="text" name="fax" class="l"></td> </tr> </tbody> </table> <a href="mailto:私のアドレス.ocn.ne.jp?Subject=BIG1%20%96%E2%82%A2%8D%87%82%ED%82%B9"><input type="submit" value="  送信  " class="button"></a></form>

  • CGIメールフォームの件名について

    ホームページ上にCGIで動作するメールフォームを作成しました。実際にmailform.htmlとmailform.cgiをアップロードして、正常に送信先のメールアドレスにメールフォームの内容が送信されてきました。 しかし届いたメールの件名は(件名なし)と表示されます。 CGIプログラムに関してほとんど知識が無いので、mailform.html mailform.cgiはテンプレートを使用しています。 mailform.htmlの内容に件名を追加して、実際に届くメールに件名が表示されるようにするには、CGIファイルにどう記述すればよいでしょうか。 <mailform.htmlの内容> <TABLE> <TBODY> <TR> <TH nowrap>お問い合わせ内容</TH> <TD colspan="2"><TEXTAREA name="Kansou" rows="5" cols="50"></TEXTAREA></TD> </TR> <TR> <TH nowrap>お名前</TH> <TD colspan="2"><INPUT name="Namae" size="50"></TD> </TR> <TR> <TH nowrap>電子メール</TH> <TD colspan="2"><INPUT name="Mail" size="50"></TD> </TR> <TR> <TH nowrap>電話番号</TH> <TD colspan="2"><INPUT name="Tel" size="50"></TD> </TR> <TR> <TH nowrap></TH> <TD align="center"><INPUT type="submit" value=" 送る "></TD> <TD align="center"><INPUT type="reset" value=" リセット "></TD> </TR> </TBODY> </TABLE> <mailform.cgiの内容> require 'jcode.pl'; #Get the input read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); #Split the name-value pairs @pairs = split (/&/,$buffer); foreach $pair(@pairs) { ($name, $value) = split(/=/, $pair); #Un-Webify plus signs and %-encoding $value=~tr/+/ /; $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $FORM{$name} = $value; if ( $name ne "to" ) { push (@fields, $name) unless (grep(/^$name$/, @fields)); } } # ### 送信フォーマット # $mail_msg = ""; foreach $field (@fields) { $mail_msg = "$mail_msg-----------------------------------------------\n"; $mail_msg = "$mail_msg($field) $FORM{$field}\n"; } $mail_msg = "$mail_msg-----------------------------------------------\n"; # ### ShiftJis to Jis # &jcode'convert(*mail_msg, 'jis'); open(MAIL,"| $mailprog $mailto")|| die "Can't open $mailprog!\n"; print MAIL $mail_msg; close(MAIL); # ### Make the person feel good for writing to us # print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n"; print "<BODY bgcolor=\"#9dffff\">\n"; print "<H2 align=\"center\">送信いただき、ありがとうございました!</H2>\n"; print "</BODY></HTML>\n"; よろしくお願いします。

    • ベストアンサー
    • CGI
  • <FORM TYPE="subumit">でデータをCGIに飛ばして、画面には別のHTMLを表示する。

    #submitでデータを飛ばす(A.cgi)処理以外にもう一つウィンドウを開いて(B.html)中継をした上で(B.html)からリンクで(A.cgi)に飛ばせたいと思います。ちなみに質問No.994791も私の疑問に近いのかとも思い参照しましたが初心者でわかりません。 print "<td><form action=\"$script\" method=\"GET\">\n"; #認証後の投稿ページ画面へ(forum.cgiへパラメータを渡す/forum.cgi?id=$id&pw=$pw)へ飛ぶ print "<table align=\"center\"><tr><td>\n"; print "<tr><th><UL><LI>すでにパスワード取得済みの方はこちらからどうぞ</th>\n"; print "<tr><th>ログインID<th><input type=text name=id size=8></tr> \n"; print "<tr><th>パスワード<th><input type=password name=pw size=8></tr> \n"; print "<tr><th colspan=2><input type=submit value=' 認証する '></tr> \n"; #この辺に入れるのかな? #やりたい処理をまとめると<FORM TYPE="subumit">でデータをCGIに飛ばして、画面には別のHTMLを表示する。 #CGI入力されたデータを一個飛ばしてCGIで利用したいためです。 print "<td><input type=hidden\">\n"; print "</td></tr></table>\n"; print "<P><table align=center>\n"; print "<UL><LI> <a href=\"$postmail\">パスワードを新規取得の方</a> はこちら \n"; #認証の前処理:会員登録画面(postmail.html)へ飛ぶ#2004.12.6 print "<LI> <a href=\"$pwmake?mode=change\">パスワードを変更の方</a> はこちら \n"; print "</table></form>\n</body></html>\n"; exit;

    • 締切済み
    • CGI
  • ラジオボタンで入力し、その結果をCGIで表示するプログラム

    htmlで <html> <head> </head> <body> <form method="get" action="question.cgi"> <table width="50" height="" border="1" bordercolor="black" bgcolor="white" cellSpacing="0" cellpadding="5"> <tr><th>/</th><th>yes</th><th>no</th></tr> <tr><th>1</th><td><input type="radio" name="char1"></td> <td><input type="radio" name="char1"></td></tr><br> <tr><th>2</th><td><input type="radio" name="char2"></td> <td><input type="radio" name="char2"></td></tr><br> <tr><th>3</th><td><input type="radio" name="char3"></td> <td><input type="radio" name="char3"></td></tr><br> <tr><th>4</th><td><input type="radio" name="char4"></td> <td><input type="radio" name="char4"></td></tr><br> </table> <input type="button" value="送信" ><input type="reset" value="リセット"><br> </form> </body> </html> と書き、C言語でCGIを書き、ラジオボタンを押して送信ボタンを押すと 1:yes,2:no,3:no,4:yesなどと文字列で出力したいのです。 getメソッドがいいのかpostメソッドいいのかも教えていただければうれしく思います。 (この質問ではgetメソッドを使っていますが、あまり気にしないでください)

    • ベストアンサー
    • CGI
  • フォームメールへ引き継ぐ値が表示されないことがある。

    Perl 5.6.1、cgi-lib.pl 2.17、jcode.pl 2.11です。 以下のソースで、htmlファイルより引き継いだ値(theme,number,day)をたまに取り込めていないというか、これらの値だけ表示されていないことがあるようです。 私の環境では再現できておりません。 ユーザーの環境に依存するようなソースコードなのでしたら変更したいと思っております。 どなたかご教授よろしくお願いいたします。 #!/usr/local/bin/perl require "./cgi-lib.pl"; require "./jcode.pl"; &ReadParse; $text = $in{'theme'}; &jcode'convert(*text, 'sjis'); $in{'theme'} = $text; $text = $in{'number'}; &jcode'convert(*text, 'sjis'); $in{'number'} = $text; $text = $in{'day'}; &jcode'convert(*text, 'sjis'); $in{'day'} = $text; print<<'end_mark'; Content-type: text/html <html> <title>XXX</title> </head> <form action="/cgi-bin/XXX.cgi" method="post"> <table> <tr> <td>テーマ/</td> <td> end_mark print "<input type=\"hidden\" name=\テーマ\" value=\"$in{'theme'}\">$in{'theme'}</td></tr>\n"; print<<'end_mark'; <tr><td>番号/</td><td> end_mark print "<input type=\"hidden\" name=\"番号\" value=\"$in{'number'}\">$in{'number'}</td></tr>\n"; print<<'end_mark'; <tr><td>日時/</td><td> end_mark print "<input type=\"hidden\" name=\"日時\" value=\"$in{'day'}\">$in{'day'}</td></tr>\n"; print<<'end_mark'; <tr> <td>会社名(正式名)</td><td> <input type="text" name="_会社名"></td></tr> <tr> <td> <input type="submit" value="申込み" name="submit"> <input type="reset" value="リセット" name="reset"> </td> </tr> </table> </form> </body> </html> end_mark

    • 締切済み
    • CGI
  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • 掲示板スパム対策(改造)1行追加でエラー

    書き込み文字が変換されるタイプの掲示板です。 1行追加、アップした後に、サーバーのエラーが出るのですが、 どこが悪いのかわかりません。 #HTMLドキュメントのヘッダー宣言 ~省略~ #投稿フォームを作成 ~省略~ print "<td align=center>名前</td>\n"; print "<td><input type=text size=34 name=name value=" . $COOKIE{'name'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>E-mail</td>\n"; print "<td><input type=text size=34 name=email value=" . $COOKIE{'email'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>見出し</td>\n"; #返信の場合は、見出しを挿入 if ($FORM{'flags'} eq 'return') { print "<td><input type=text size=34 name=subject value=RE:" . $FORM{'subject'} . "></td>\n"; } else { print "<td><input type=text size=34 name=subject></td>\n"; } print "</tr>\n"; print "<tr>\n"; print "<td align=center>内容</td>\n"; print "<td align=center><textarea name=comment rows=3 cols=34></textarea><br>\n"; if ($FORM{'flags'} eq 'return') { print "<input type=submit value=$FORM{'subject'}へ返信>\n"; print "<input type=hidden name=ress value=$FORM{'code'}>\n"; } else { print "<input type=submit value=新規投稿>\n"; } print "ガードコード<input type=text name="guard" size=8>\n"; #スパム対策用で追加●●●●●●●●●● print "</form>\n"; (TっT)

    • ベストアンサー
    • CGI
  • form id、nameの番号振りなおし

    jqueryとphpにてフォームを作成しています。 フォームの追加、削除できるシステムを作っており、 フォームの追加はできたので、削除した際のinputのnameやidの番号を振り直しができず困っています。 商品1<br> <a href="javascript:void(0);" class="del" id="del_1">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][1][sir]" value="<?php echo $item[data][1][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][1][name]" value="<?php echo $item[data][1][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][1][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> <a href="javascript:void(0);" id="add">フォームの追加</a> としており、 「フォームの追加」をクリックすると 商品2<br> <a href="javascript:void(0);" class="del" id="del_2">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][2][sir]" value="<?php echo $item[data][2][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][2][name]" value="<?php echo $item[data][2][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> 商品3<br> <a href="javascript:void(0);" class="del" id="del_3">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][3][sir]" value="<?php echo $item[data][3][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][3][name]" value="<?php echo $item[data][3][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> ができるようにPHPにてSESSION管理をおこなっています。 追加はできたのですが、 上記のフォーム4つほど出した後に商品2を削除した場合の商品1、商品3、商品4の各nameの番号(item[data][*][sir]、item[data][*][name]、item[data][*][num]の*部分) 振りなおしができず困っています。 いくらやってもできないため、どなたかソースを教えていただけないでしょうか。 宜しくお願いいたします。

  • 配布されてるCGIをダウンロードしたのですが

    CGIは超がつくほどの初心者ですがサーバーへは無事に接続できたみたいです。 でも、接続時にCGIプログラム?から指定のIDが見当たりません。 このように表示されます。 それで質問させていただきたいのです。 IDとパスワードを入力する必要があるとCGIの説明にも載ってたので、 任意のIDとパスワードを入力する。と でもどこに入力すればいいのか? 詳しい方か分かる方が入たら教えてください。 print "<tr><td align=\"right\">User ID</td><td><input type=\"text\" name=\"usr\" value=\"\"></td></tr>\n"; print "<tr><td align=\"right\">Password</td><td><input type=\"password\" name=\"pass\" value=\"\"></td></tr>\n" 超初心者ですいません。

    • 締切済み
    • CGI