みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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/

投稿日時 - 2003-06-23 10:52:38

QNo.582604

困ってます

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

$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で要素数を
自由に設定できるようにするためでしょう。

投稿日時 - 2003-06-23 11:12:09

お礼

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

投稿日時 - 2003-06-23 14:05:19

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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)の値を工夫する必要があります。

投稿日時 - 2003-06-23 11:36:00

お礼

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

投稿日時 - 2003-06-23 14:06:50

ANo.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
にしたいという事でしょうか?

投稿日時 - 2003-06-23 11:00:32

お礼

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

投稿日時 - 2003-06-23 14:07:54

あなたにオススメの質問