dポイントプレゼントキャンペーン実施中!

CGI初心者で大変困っています。。。
現在、CGIで入出金帳簿をつけるようにしています。
フォームで入力してCSVに保存する所まで完成しました。

そこから、FTPでCSVファイルをダウンロードして、CSVを開いて、ExcelとしてSUMとかで縦を足したり、エクセルのオートフォーム等で、科目別に並べ替えたりしています。。。。

これをWeb上で実現し、最後は印刷までしたいのですが。。。

内容は「日付」「摘要」「入金額」「出金額」「備考」です。
serch.cgiを作成して、日付とか摘要で検索できて表示まではできるようになりました。
しかし、金額の合計の求め方やどこにソースを書けばいいのか?
まったくわかりません。
どうすれば可能でしょうか?
いろんなサイトを見てもわかりませんでした。。。

A 回答 (4件)

 済みません、スクリプトを良く見ないでコメントしてしまいました。


このスクリプトが全てではなく、@NEWがどのようにcsvとかブラウザーに表示するのかが分らないのですが。
push(@NEW,$data2); の @NEWに入れ込んでいるので、

else { push(@NEW,$data2); $hit++; }
}
の下に、

$goukei = ",,,$nkin,$skin,";
または、
$goukei = "$nkin,$skin";
と記して、
push(@NEW,$goukei);

ではどうでしょうか。

またテストとして、push(@NEW,$goukei); の下に、

$test = join("\n", @NEW);
&error('エラー',"$test");

の2行を追記して、アクセスすると、エラー表示のところにズラズラ出て最後に合計金額とかがでていませんか?
 出ていてもいなくても、あとでこの2行を削除してください。

 教えて頂いたhtmlのソースの方は、@BASE = ; と記述ミスがありました。@BASE = <IN>; だと思います。
    • good
    • 0
この回答へのお礼

すみません。いろいろ親切に教えていただきましたが、
500サーバーエラーがずぅ~っと出てきて結局断念しました。。。
初心者でご迷惑をおかけいたしました。。。
ありがとうございました。

お礼日時:2007/11/10 21:24

「foreach $num ($FF .. $#BASE) {」の上に、


$skin = $nkin = '0';
と記して、

「# 摘要(一致)」の下に、
$nkin += $inmoney;
$skin += $outmoney;
と記します。

else { push(@NEW,$data2); $hit++; }
}
の下に、

print "入金:$nkin<br>";
print "出金:$skin<br>";

で表示されると思います。

この回答への補足

やっぱり500エラーが出てしまいます。。。
何度もいろんなやり方をしたのですが。。。

合計を求めないと正常に動いてくれるCGIですので。。。
ソースを張ります。
間違えてませんよね??
何度もすみません。

http://www.jin.ne.jp/gioia/serchcgi_testpage/ind …

補足日時:2007/11/08 12:22
    • good
    • 0

この回答への補足

すいません(^^;
せっかくお返事をいただいたのですが、CSVファイルから値を引っ張って合計する方法がわかりませんでした(^^;

補足日時:2007/11/07 17:40
    • good
    • 0

>>日付とか摘要で検索できて表示まではできるようになりました。


 この表示の時には、foreachやwhileを使い、入金額や集金額の変数もループされると思います。

foreachやwhileの前に、$sum_nyukin = '0'; $sum_shukkin = '0'; と記して、
 ループの中に、$sum_nyukin += 入金変数;、$sum_shukkin += 出金変数; を記します。
ループが終わった後に、

 print "入金総計:$sum_nyukin <br>";
 print "出金総計:$sum_shukkin";

 とかで表示されると思います。

serch.cgiは知りませんので、あくまで想像にて失礼いたします。

この回答への補足

ご説明ありがとうございます。。。
早速やってみましたが、500エラーが出てきました(^^;

serch.cgiはレスキューさんのデータベースCGIを参考にしてますので。。。
ここに書いてもいいのでしょうか??

printの表示部分は意味がわかるんですが・・・
************************************************************
■入力
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
if ($buffer eq "") { &error('エラー','使い方が間違っています.'); }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

($name,$value) = split(/=/, $pair);
$name2 = $name;
$value2 = $value;
$FORM2{$name} = $value;

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'euc');

$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\n//g;
$value =~ s/\r//g;
$value =~ s/\t//g;
$value =~ s/\,//g;

#フォーム変数へ
$FORM{$name} = $value;
}
#■検索処理
if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); }
@BASE = <IN>;
close(IN);

if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; }
$TO = $FF + $page - 1;
if ($TO > $#BASE) { $TO = $#BASE; }
$hit = 0;
$next_num = '';

foreach $num ($FF .. $#BASE) {

$data = $data2 = $BASE[$num];
&jcode'convert(*data,'euc');
($m,$d,$tekiyou,$inmoney,$outmoney,$bikou) = split(/\,/,$data);
# 摘要(一致)

if ($FORM{'tekiyou'} ne 'all') {

if ($tekiyou eq $FORM{'tekiyou'}) { ; } else { next; }
}

# 検索終了処理
if ($hit == $page) { $next_num = $num; last; }
else { push(@NEW,$data2); $hit++; }
}

補足日時:2007/11/07 17:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!