• ベストアンサー

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/

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

  • ベストアンサー
  • 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