• ベストアンサー

CGIのフォームメールで送信した値をTABLEで表示しています。横二列ではなく、一部、横五列に変更したい

Perlで書いたCGIプログラムを使って、申し込みフォームを作成し、送信先をOutlookExpressのメーラーにしてHTML形式で表示しています。 サーバーはLINUX、メールを見ているPCはWindows98SEです。 CGIのプログラムはサンプルを使用しましたが、たいていのサンプルは、 フォームのnameの値とvalueの値を順に並べています。 foreach (0..$count-1) { print OUT "<TR><TD>$DATA_N[($_)]</TD><TD>$DATA_V[($_)]</TD></TR>\n"; } という具合にです。 ($DATA_N[($_)]はnameの値で、$DATA_V[($_)]がvalueの値です。) でも、この場合だとTABLEも横二列のものをずらっと並べるだけになってしまいます。一部、横五列に変更したいのですが。。 その場合は、フォームメールから送られるnameとvalueの値を順に並べるのではなく、それぞれ送信するデータに値をつけ、テーブルに入れ込む形になると思うのですが、いまいち、プログラムが分かりません。 私はCGIの初心者なので、いつもCGIのサンプルを使用し、一部変更しながら活用しています。なので、最初からCGIを書くとなると、どうも分からなくなってしまいます。 どなたかアドバイスお願いします。 できれば、プログラムも書いて教えて頂けると有り難いです。 参考にしたのは、下記のアドレスのものです。 (但し、これはテキスト形式で送信されています) http://www.rescue.ne.jp/cgi/webform/

  • CGI
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • KUJIYA
  • ベストアンサー率34% (53/152)
回答No.2

$DATA_N[($_)]は、$DATA_N[0],$DATA_N[1]....ですから 具体的に何番目の要素はどこに配置したいと考えるならforeachではなく、 <TR><TD>$DATA_N[0]</TD><TD colspan=4>$DATA_V[0]</TD></TR> と数字を具体的に配置して書けばいいと思います。 foreachを使っているのは、たぶん汎用のcgiで要素数を 自由に設定できるようにするためでしょう。

ponsuke777
質問者

お礼

できました!!数字を入れれば良かったんですね。 どうもありがとうございました!

その他の回答 (2)

回答No.3

一部の項目だけ回答が複数ある、ということですかね? 使用されているサンプルスクリプトを拝見すると、 データの名前と値を必要に応じて取得しているようですので、 複数の値を持たせたい項目の名前の箇所を以下のように書き換えると良いかと・・・。 if($name eq "hogehoge"){ push(@hogehoge,$value); } この場合は「push(@DATA_N,$name); push(@DATA_V,$value);」のように入れずに、任意の場所で「push(@DATA_N,"hogehoge"); push(@DATA_V,"");」のようにするか、何もせずに任意の場所で出力します。 例えば「push(@DATA_N,"hogehoge"); push(@DATA_V,"");」とした場合ですと、 foreach (0..$count-1) { if($DATA_N[($_)] eq "hogehoge"){ print OUT "<TR><TD>hogehoge</TD>"; foreach $hogehoge(@hogehoge){ print OUT "<TD>$hogehoge</TD>"; } print OUT "</TR>\n"; }else{ print OUT "<TR><TD>$DATA_N[($_)]</TD><TD COLSPAN=".$#hogehoge.">$DATA_V[($_)]</TD></TR>\n"; } } という感じです。複数の値を持たせたい項目がいくつもある場合は、上記のループを更に改良させます。その場合は、結合するセルの数を設定するところ(COLSPAN)の値を工夫する必要があります。

ponsuke777
質問者

お礼

プログラムも書いて頂き、ありがとうございました。 一部の項目だけ回答が複数ある訳ではなかったのですが、 今後の参考になりました。 ありがとうございました!!

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは A_NAME A_VALUE B_NAME B_VALUE ・・・ Z_NAME Z_VALUE の様な並びのTABLEを A_NAME  B_NAME  C_NAME  D_NAME  E_NAME A_VALUE B_VALUE C_VALUE D_VALUE E_VALUE にしたいという事でしょうか?

ponsuke777
質問者

お礼

そうゆうことだったんですが、解決しました。 ありがとうございました!

関連するQ&A

  • フォームメールへ引き継ぐ値が表示されないことがある。

    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メールフォームの件名について

    ホームページ上に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
  • メールフォームを作成したのですがエラーと表示されてしまいます。どこがいけないのですか?

    お世話になります。当方初心者です。是非助けていただきたく思います。 いろんなサイトでよくあるようにメールフォームを作成してCGIプログラムでメールを送信できるようにしたいと思い、以下のようにhtmlを作成しました。CGIはAppsPageさんのサイトでお借りしてkisomail3rdというCGIを使いました。http://apps.cside.com/cgi/ レンタルしているサーバはロリポップです。http://www.lolipop.jp/?mode=manual&state=hp&state2=cgi CGIでロリポップが指定しているPERLパス・SENDMAILパスを変更してパーミッションも700に設定したのですが、何故かCGIエラーという表示が出て、うまく作動してくれません。初心者ゆえどこか基本的なことを見落としていると思います、どうか教えてください。 ■HTMLソースです。 <form action="kisomail2nd_1_05/kisomail2nd/sendmail.cgi" method="post" class="style1"> <table> <tr> <td>会社・店舗名</td> <td class="kakikomi"><input type="text"name="name"size="40"/></td> </tr> <tr> <td>お名前</td> <td class="kakikomi"><input type="text"name="name2"size="40"/></td> </tr> <tr> <td>郵便番号</td> <td class="kakikomi"> <input type="text"name="zip1"size="3"maxlength="3"/> - <input type="text"name="zip2"size="4"maxlength="4"/> </td> </tr> <tr> <td>都道府県</td> <td class="kakikomi"> <select name="prefecture"> <option value=""selected="selected">選択してください </option> <option value="日本国外" >日本国外</option> <option value="北海道" >北海道</option> <option value="青森県" >青森県</option> (以下略) </select> </td> </tr> <tr> <td>市町村・番地</td> <td class="kakikomi"><input type="text"name="add1"size="40"/></td> </tr> <tr> <td>E-Mail</td> <td class="kakikomi"><input type="text"name="mail"size="40"/></td> </tr> <tr> <td>電話番号</td> <td class="kakikomi"><input type="text"name="name2"size="40"/></td> </tr> <td>お問い合わせの種類</td> <td class="kakikomi"> <input name="category"type="radio"value="このサイトについてのお問い合わせ"/>お見積り<br/> <input name="category"type="radio"value="その他お問い合わせ"/> その他お問い合わせ</td> </tr> <tr> <td>お問い合わせ内容</td> <td class="kakikomi"><textarea name="contact" cols="40" rows="15"></textarea></td> </tr> </table> <div> <input type="submit" value=" メール送信 "> <input type="reset" value=" リセット "> </div> </form>

    • ベストアンサー
    • CGI
  • フォームから送信される値について教えてください

    ある人とwebのフォームを作成する話をしていて、相手の方からフォーム のテキストやチェックボックスなどinput要素では、name属性は必須では なくid属性が必須で、ブラザーからはidとvalueの組み合わせがサーバに 送信されるといわれました。 私の認識としては 「一般にHTMLのフォームをサーバーへ送信する時には、 get・postに かかわらずブラウザが自動的にFORMの子要素内のnameとvalueの値の ペア(name=value&name=valueというような値)を送信する」 だということを話したところ。 getに関しては今もそうかもしれないが、現在のpostの場合はidとvalueの 値のペアが送信され、それをサーバで処理しているというようなことを 言われました。 私自身phpやperlを使っています、ブラウザからの送信方法は get・postで違うが、送られてくる内容はpostの場合もnameとvalueの 組み合わせだと認識しています。 実際にスクリプトを作成して、テストしてもidとvalueの組み合わせは サーバ側のプログラムでは取得できませんでした。 相手の方が言うように最近のブラウザー(クライアント)はサーバに id=valueの組み合わせを送信するものや場合によってそのように振る舞う ことがあるのでしょうか。 この件に関して詳しい方、ご教授いただけないでしょうか。 できればRFC等の確かな資料をお示しいただけると助かります。

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

    メール送信フォームを作成しているのですが、 悩み続けて1週間たちました(とほほ) 今自分自身で理解してる事は System=Linux Server=Apache PHP=4.23 sendmail_path=/usr/sbin/sendmail -t -i Configure Command=--enable-mbstring と言う事で mb_send_mailが使えるのは確認できました。 ページは下記のように記載してあります。 エラーはでませんが、メールが届きます。 わかる方教えていただけますでしょうか? 一部省略しています。 <FORM METHOD="POST" ACTION="<?php echo $PHP_SELF; ?>" ENCTYPE="text/plain"> <TABLE BORDER="0" CELLSPACING="2" CELLPADDING="2"> <TR> <TD><INPUT TYPE="text" NAME="from" SIZE=40></TD> </TR> <TR> <TD > <SELECT NAME="to"> <OPTION VALUE="---">---</OPTION> <OPTION VALUE="xxx@xxx.com">商品</OPTION> </SELECT> </TD> </TR> <TR> <TD > <textarea name="message" ></textarea> </TD> </TR> <TR> <TD > <nput type="hidden" name="actionモ VALUE=post> <input type="hidden" name="subject" value="質問"> </TD> </TR> </TABLE> </FORM> <?php function SendMessage(){ global $to,$subject,$meessage,$from; if(mb_send_mail($to, $subject, $meessage, $from)){ print "メールが送信されました。$to"; } else { print "メールの送信に失敗しました"; } } if($action == "post"){ SendMessage(); } else{ } ?>

    • ベストアンサー
    • PHP
  • JavaScriptでテーブルのソートを実行した結果でフォーム送信

    ttp://neil.fraser.name/software/tablesort/ こちらを参考にして JavaScriptでテーブルの並び替えをしてみたんですが 並び替え自体は出来たんですが FormのPOST送信がうまくできません IE6では正常なんですが FireFoxではパラメータを取得することができません ソース例 ================================ ・・・・ <script language='javascript1.2' src='tablesort.js'></script> </head> <body> <table> <THEAD> <tr> <td label="nocase"></td> <td label="nocase">名前</td> <td label="case">メールアドレス</td> </tr> </THEAD> <TBODY> <form name="userlist" method="POST" action="aaa.asp"> <tr> <td><input type="radio" name="UserNo" value="0"></td> <td>太郎</td> <td>taro@sample.com</td> </tr> <tr> <td><input type="radio" name="UserNo" value="1"></td> <td>次郎</td> <td>jiro@sample.com</td> </tr> <tr> <td><input type="radio" name="UserNo" value="2"></td> <td>三郎</td> <td>saburo@sample.com</td> </tr> </TBODY> </table> <input type="submit" value=" 動作 "> </form> ================================ tablesort.jsを改良したり HTMLを工夫することによって どのブラウザでも正常に動作するようにするには ならないでしょうか?

  • CGI メールフォームからBCCのアドレスにメールが送信できない(Perl)

    初心者で簡単なメールフォームを作成しております。 宛先となる支店を選択後、メールのTOにその支店のアドレスが入り、メールは受信できます。同時にBCCにも一人のアドレスを入力してメールを送信したいのですが、BCCにはメールが届きません。 以下に抜粋したソースを記述しますので、どなたかご教授願います。 --------------------- HTML 部分 ------------------------------ <form action="./cgi/●●/sendmail.cgi" name="myform" method="POST"> <table> <tr><td>あなたのメールアドレス</td> <td><input type="text" name="email" size="60" maxlength="60"></td> </tr> <tr><td>お問合せ先の支店を選択</td> <td><select name="address"> <option value="" selected>選択してください</option> <option value="aaaaa@domain.jp">A支店</option> <option value="bbbbb@domain.jp">B支店</option> <option value="ccccc@domain.jp">C支店</option> </select> </td> </tr> <tr> <td><input type="submit" name="submit" value="送 信"></td> <td><input type="reset" name="reset" value="キャンセル"></td> </tr> </table> </form> --------------------- cgi 部分 ------------------------------- require '../cgi-lib.pl'; require '../jcode.pl'; $sendmail = '/usr/sbin/sendmail'; $bcc_address = 'bccbcc@gmail.com'; $email = $in{'email'}; $address = $in{'address'}; &jcode'convert(*email,'sjis'); &jcode'convert(*address,'sjis'); $message = <<EOF; Subject: 質問 From: $email Errors-to: $email Reply-To: $email ------------------------------------------------------------- 質問内容 ------------------------------------------------------------- [お客様のメールアドレス] $email EOF open(MAIL,"|$sendmail $address"); print MAIL $message; print MAIL "BCC: $bcc_address\n"; close(MAIL); print <<EOF; Content-Type: text/html <html> <head> <title>送信しました</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> ●お客様のメールアドレス $email<br> </body> </html> EOF

  • CGI メールフォームからBCCのアドレスにメールが送信できない(Perl)

    初心者で簡単なメールフォームを作成しております。 宛先となる支店を選択後、メールのTOにその支店のアドレスが入り、メールは受信できます。同時にBCCにも一人のアドレスを入力してメールを送信したいのですが、BCCにはメールが届きません。 以下に抜粋したソースを記述しますので、どなたかご教授願います。 --------------------- HTML 部分 ------------------------------- <form action="./cgi/sendmail.cgi" name="myform" method="POST"> <table> <tr><td>あなたのメールアドレス</td> <td><input type="text" name="email" size="60" maxlength="60"></td> </tr> <tr><td>お問合せ先の支店を選択</td> <td><select name="address"> <option value="" selected>選択してください</option> <option value="aaaaa@domain.jp">A支店</option> <option value="bbbbb@domain.jp">B支店</option> <option value="ccccc@domain.jp">C支店</option> </select> </td> </tr> <tr> <td><input type="submit" name="submit" value="送 信"></td> <td><input type="reset" name="reset" value="キャンセル"></td> </tr> </table> </form> --------------------- cgi 部分 -------------------------------- require '../cgi-lib.pl'; require '../jcode.pl'; $sendmail = '/usr/sbin/sendmail'; $bcc_address = 'bccbcc@gmail.com'; $email = $in{'email'}; $address = $in{'address'}; &jcode'convert(*email,'sjis'); &jcode'convert(*address,'sjis'); $message = <<EOF; Subject: 質問 From: $email Errors-to: $email Reply-To: $email -------------------------------------------------------------- 質問内容 -------------------------------------------------------------- [お客様のメールアドレス] $email EOF open(MAIL,"|$sendmail $address"); print MAIL $message; print MAIL "BCC: $bcc_address\n"; close(MAIL); print <<EOF; Content-Type: text/html <html> <head> <title>送信しました</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> ●お客様のメールアドレス $email<br> </body> </html> EOF

    • ベストアンサー
    • Perl
  • メールフォームの内容を送信者にも控えがとれるようにしたい

    下記の件で困っています。 HTMLの中で、メルフォを設けました。 <form method=post action="フォームデコードサービス"> <input type=hidden name="_mailto" value="***@*****.ne.jp"> <input type=hidden name="_subject" value="件名"> <input type=hidden name="_location" value="http://戻りURL.htm"> <table border="0" cellpadding="5" cellspacing="0" width="900"> <tr> <td width="150">氏名</td> <td colspan="2" width="700">     <input type="text" size="30" name="氏名"></td> </tr> ・ ・ ・ <p> <input type="submit" value="submit"> <input type="reset" value="reset"> </p> </form> 最初はデコードサービスを使わなかったのですが、Macから送信されるデータが文字化けする為、使うことにしました。 しかし、そうすると、送信者に送信内容が残らなくなってしまいました。 送信者の手許にもコピーが残るようにしたいので、お知恵を拝借できれば幸いです。 よろしくお願い致します。

  • POSTを配列として送信し、キーと値を一覧で表示

    formに入力した値をPOSTを配列として送信し、 そのキーと値の一覧表を作ってみようとしたのですが、 思うように動いてくれません。何が間違っているのでしょうか。 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>POSTを配列で送信して取得する</title> </head> <body> <?php if($_SERVER[REQUEST_METHOD]=="POST"){ if(isset($_POST["submit_no"])){ echo "<table border=\"1\"><tr><td>番号</td><td>内用</td><tr>"; while($key_no = key($_POST[no])+1){ //+1は番号を1から表示させるため $values = htmlspecialchars($_POST[no],ENT_QUOTES); echo <<< EOS <tr> <td>$key_no</td> <td>$values</td> </tr> EOS; } echo "</table>"; } } ?> <form action="post_hairetu.php" method="POST" enctype="multipart/form-data"> 1<input type="text" name="no[]" value="" /><br /> 2<input type="text" name="no[]" value="" /><br /> 3<input type="text" name="no[]" value="" /><br /> <input type="submit" name="submit_no" value="送信" /> </form> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう