• ベストアンサー

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++; }} ***********************************

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

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

foreach (0 .. $#key) {  ($pnum) = split(/:/, $val[$_]);  ($psize) = split(/:/, $val[$_]); @valの中身が分からないですが、 $pnum と $psize が同じ値になってないですか?

その他の回答 (2)

  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.2

#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)
回答No.1

$psizeが数値として認識されていないのかもしれません。 数値以外のデータ(空白、カンマ等)がないっていないか、一度表示して確認してみてはどうでしょう?

関連するQ&A