電子書籍の厳選無料作品が豊富!

perl初心者ながら暇見て住所CGIフォームを作っています。
だんだん完成してきましたが今一歩です(T_T)ご指導下さい!

名前、電話、都道府県、住所、の4つの項目があります。
{'nam'} {'tel'} {'pre'} {'add'}
{'pre'}はSELECToption 他はtextFORM
全部記入した時には、次に進めてOKなのです。
if ((($in{'nam'}) && ($in{'tel'}) && ($in{'add'}) && ($in{'pre'} > "0")) { print
全部未記入時でも、次に進んでも無記入なのでOKです。
エラー時に&errorのエラー画面に飛ばす事も出来ました。

ただ、書き忘れ時が困るので
{'nam'} {'tel'} {'pre'} {'add'}の内、1~3つとか記入して
他が抜けてたりした時だけエラーにしたいのです。
でも間違って空スペースとかでエラーが出て欲しくないし・・・
まずは下記でやってもまだダメです、($in{'pre'} > "0")が未選択時がダメです(T_T)
色々やってみたのですが、何か良い方法ありませんか?

#### ($in{'pre'} > "0")は、"1"以上が「真」の条件です。
if ((($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "")) && ($in{'pre'} > "0")) { &error("エラー"); }

A 回答 (3件)

ANo.1です。

すみません、読み違えてました。
全部入力か、全部未入力ならOKなんですね。
本当はif文を分けて、しかもelseを使った方が理解しやすい気はしますが、

if ( ( ($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "") || ($in{'pre'} <= "0") ) && ( ($in{'nam'} ne "") || ($in{'tel'} ne "") || ($in{'add'} ne "") || ($in{'pre'} > "0") ) ){ &error("エラー"); }

でいいのかな。
    • good
    • 0
この回答へのお礼

希望通りになりました!ありがとうございました。

>本当はif文を分けて、しかもelseを・・・
その点は、初心者なので今後の課題で。まず問題なく動けばOKです。

お礼日時:2008/06/24 18:31

チェック用のサブルーチン作っちゃいますけれどね、私なら。


条件煩雑だし、将来拡張もできるようにしたいから。

sub cond_check {
my ($in) = @_;
my $cond_check = 0;

for my $key ('nam','tel','add') {
++$cond_check if ($in->{$key} ne '');
}
++$cond_check if ($in->{'pre'} > 0);

if ($cond_check == 0 || $cond_check == 4) {
return 1;
}
return;
}

呼び側は、

if (! cond_check(\%in) ) { &error("エラー"); }
    • good
    • 0
この回答へのお礼

わざわざありがとうございました。
そうですよね・・・本当は、そんな感じでにやりたいのですが
perlの基本も知らないので他のエラーと合わせるのがちょっと難しいです・・・
もう少し勉強してから将来変更させて頂きます。

お礼日時:2008/06/24 18:42

if ( ($in{'nam'} eq "") || ($in{'tel'} eq "") || ($in{'add'} eq "") || ($in{'pre'} <= "0") ) { &error("エラー"); }



では、ダメなのでしょうか?

この回答への補足

それもやったんですが全部未記入時にもエラーになりますよね?。
全部未記入時には、
未記者はスルーでOKなのでエラーを出したくないのです・・・
記入希望者が途中まで記入した場合の記入漏れ防止で
4つの内、1~3項目のみ記入時エラーにしたいのです。お願いします。

補足日時:2008/06/24 16:46
    • good
    • 0

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