- ベストアンサー
CGI作成で困ってます。
CGIのプログラムの中で、 $pnumが0個か$psizeか0個だったら 買い物かごに入れないようにしたいのですが、 下記のプログラムで実行すると、 ・$pnumが0個で、$psizeが1個だと、 買い物かごに入りません。 ・$pnumが1個で、$psizeが0個だと、 買い物かごに入ります。 ・$pnumが1個で、$psizeが1個だと、 買い物かごに入ります。 #$pnumしか対象になってません。 下記の方法のどこを直せばいいでしょうか? よろしくお願いいたします。 ********************************** foreach (0 .. $#key) { ($pnum) = split(/:/, $val[$_]); ($psize) = split(/:/, $val[$_]); if (length($pnum) > $maxlen) { &error("注文個数は$maxlen桁までです"); } if (length($psize) > $maxlen) { &error("注文個数は$maxlen桁までです"); } if ($pnum > 0) { $order++; } else{if ($psize > 0) { $order++; }} ***********************************
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
foreach (0 .. $#key) { ($pnum) = split(/:/, $val[$_]); ($psize) = split(/:/, $val[$_]); @valの中身が分からないですが、 $pnum と $psize が同じ値になってないですか?
その他の回答 (2)
- HUTABA
- ベストアンサー率27% (436/1611)
#1です。 いらぬお節介ですが、 if ($pnum > 0) { $order++; } else{if ($psize > 0) { $order++; }} ですが、これだと $pnum = 1; $psize = 0; 若しくは $pnum = 0; $psize = 1; の場合でも$orderがインクリメントされてしまいますよ。 正しくは、 if ($pnum > 0 && $psize > 0) { $order++; } ですね。 変に入れ子にするより解りやすいですし、処理も高速に終わると思いますよ。
- HUTABA
- ベストアンサー率27% (436/1611)
$psizeが数値として認識されていないのかもしれません。 数値以外のデータ(空白、カンマ等)がないっていないか、一度表示して確認してみてはどうでしょう?