• ベストアンサー

cgi計算方法

ちょっと土つぼにはまって抜け出せない状態です。 以下のような状態の表があったとします。 商品名  |  昨日  |  今日  | 全体 みかん  |   5   |   3   |   8 上記のような表をcgiを使ってかいています。 それぞれ<input style=text… といったような感じでかいて、ログファイルに書き込んで、読む、というような状態にしてあります。 昨日のデータは NAME="kinou" VALUE="$FORM{'kinou'}" 今日のデータは NAME="kyou" VALUE="$FORM{'kyou'}" のようになっています。 全体を計算するのに、 昨日の分と今日の分を足しても、合計が出てくれません。 どのようにしたらよいでしょうか?

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

  • ベストアンサー
noname#25358
noname#25358
回答No.3

 #2の方のお礼のところに書かれている、合計の VALUE オプション部分の記述の仕方にミスがあります。  これではHTMLに計算させようとしていることになってしまいます。  合計用の変数は、このロジックだと必要です。  位置付けとしては、「Perl 言語を使ってHTML言語で書かれたソースを出力する」ということになりますので、Perl とHTMLの区別をはっきりさせることが重要です。

KODAMAR
質問者

お礼

やはりダメですか。 おとなしく変数つくります。 ありがとうございました。

その他の回答 (3)

  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.4

print "<TD WIDTH=65 CLASS=BOTTOMSOLID ALIGN=CENTER><INPUT STYLE=TEXT CLASS=TEXT SIZE=4 NAME='goukei' VALUE=\"".($FORM{'kyou'}+$FORM{'kinou'})."\"></INPUT></TD>\n"; でどうでしょう。

KODAMAR
質問者

お礼

回答ありがとうございます。 試してみましたが答えが出てきませんでした…。 みなさんのアドバイスとおり、きちんと変数を作成することにしました。 ありがとうございました。

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.2

> ログファイルに書き込んで、読む > 全体を計算するのに、 > 昨日の分と今日の分を足しても、合計が出てくれません。 具体的な記述を提示されたほうがレスしやすいです。 また、どのように「合計が出てくれません」なのか、 エラーが出るのか、答えが意図しないものなのか、明記されたほうがよいでしょう。 計算式があっているのに答えが違ったものになるのであれば、 データをが違っている事になるので、 %FORM の中身を再確認してみてください。 # 改行とか余分なものがついている可能性があります

KODAMAR
質問者

お礼

回答ありがとうございます。 #1にも書いたのですが、あえて合計用の変数を使用しないで合計を出そうとしているのでそれが原因かもしれないのですが…。 print "<TD WIDTH=65 CLASS=SOLIDSOLID ALIGN=CENTER><INPUT STYLE=TEXT CLASS=TEXT SIZE=4 NAME='kinou' VALUE=\"$FORM{'kinou'}\"></INPUT></TD>\n"; print "<TD WIDTH=65 CLASS=SOLIDSOLID ALIGN=CENTER><INPUT STYLE=TEXT CLASS=TEXT SIZE=4 NAME='kyou' VALUE=\"$FORM{'kyou'}\"></INPUT></TD>\n"; print "<TD WIDTH=65 CLASS=BOTTOMSOLID ALIGN=CENTER><INPUT STYLE=TEXT CLASS=TEXT SIZE=4 NAME='goukei' VALUE=\"$FORM{'kyou'}\"+\"$FORM{'kinou'}\"></INPUT></TD>\n"; こうすると「kyou」の分しか表示されません。

noname#25358
noname#25358
回答No.1

 まず、$FORM{'kinou'} と $FORM{'kyou'} に確実に値が入っているかどうか確認してください。  この2つの値は画面上に表示されていますか?  表示されているなら、単純ミスの可能性が高いです。  計算結果は   $goukei = $FORM{'kinou'} + $FORM{'kyou'};   print $goukei;  とでもしていると思いますが、計算結果が出ないということは、途中でデータを誤って消してしまっているのです。  ソース内の合計を入力した変数(ここでは $goukei ですが)を目で追い、どこでミスしたのかを探すわけです。

KODAMAR
質問者

お礼

回答ありがとうございます。 両方ともきちんと表示されています。 それとひとつかいてなかったのですが、合計の出し方として、 教えていただいたように、関数(この場合$goukei)を作成せずに、 いきなりVALUEに足し算の計算式をかいて、計算させる、というようにしているのですが、 やはりこれが原因でしょうか? すごく数が多いわけではないのですが、関数つくるの面倒だな、って思って手を抜いて かいてみたのですが。

関連するQ&A