cgi/perlを使用したメールフォームで製品登録を行える方法

このQ&Aのポイント
  • cgi/perlを使用したメールフォームで製品登録を行うための入力規則をまとめて定義する方法についてアドバイスをお願いします。
  • 製品登録フォームにはkounyuu_01、shouhin_01、price_01の3つの入力項目があり、どれか一つが入力された場合は他の項目も必須としたいです。
  • 現在、試行錯誤していますが、全ての項目を入力してもエラーが返ってきてしまいます。解決策やコードの例などを教えてください。
回答を見る
  • ベストアンサー

何れかが入力されていれば全て入力

お世話になっております。 http://odn.okwave.jp/kotaeru.php3?q=1948331 の質問に一部関連しているので続けてお伺いしておけばよかったのですが、 締め切ってしまいましたので申し分けありませんが新たに質問させて頂きました。 cgi/perlを使用したメールフォームで製品登録を行えるものを作成中です。 一つの製品についてkounyuu_01,shouhin_01,price_01という3つの入力項目があり、 何れかの項目が入力されていれば他の項目も必須。 という条件を設けたいと思っています。上記「入力規則をまとめて定義」(リンク)の質問でがるさんにアドバイスいただいた記述を少し変えればできるかなと思い試したのですが力及ばずでした。 置き換えなどが良くわからないので直に以下のようにも書いてみたのですが、全て入力してもエラーが返ってきてしまいます。 if(($form{kounyuu_01} eq "") && ($form{shouhin} eq "") && ($form{price_01} eq "")){ &error('機器#2の情報を入力してください'); }elsif(($form{kounyuu_01} eq "") | ($form{shouhin} eq "") | ($form{price_01} eq "")){ &error('機器#2の何れかの情報が未入力です'); } また、 「入力規則をまとめて定義」(リンク) でEtherskyさんに(共通項目_数字)の場合まとめて定義する方法をご教授頂いたので、 応用して上記を「(xxxx_01)だった場合」 のように今度は01をキーにまとめて定義できたらと思うのですがこちらもさっぱりです。。 どうぞアドバイスのほどよろしくお願いいたします。m(__)m

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

$n = 0; for(1..10){ $i = sprintf("%02d",$_); $flag = 0; if($form{'kounyuu_'.$i} ne "" || $form{'shouhin_'.$i} ne "" || $form{'price_'.$i} ne ""){$flag = 1;} if($flag == 1 && ($form{'kounyuu_'.$i} eq "" || $form{'shouhin_'.$i} eq "" || $form{'price_'.$i} eq "")){&error('入力を忘れている項目があります');} if($form{'kounyuu_'.$i} ne ""){ $n++; if($form{'kounyuu_'.$i} !~ /^\d{4}\/\d{2}\/\d{2}$/){ &error('販売日の書式が間違っています。'); } } } if(!$n){&error('最低一つ、販売日の入力が必要です。');}

Karin2006Karin
質問者

お礼

Ethersky度々ありがとうございます。 おかげで思ったような処理ができるようになりました!! 本当に助かりました。

関連するQ&A

  • 入力内容のチェック・・・『または』の場合

    いつもお世話になっております。 お問い合わせフォームCGIで未入力のチェックを行っています。 CGIは前任者が作ったもので、引き継いだ私自身はCGI初心者です。 sub sendmail { if ($namecheck eq "1" && $in{'name'} eq "") { &error("お名前は必ずご記入ください"); } elsif ($op_value1 eq "") { &error("フリガナは必ずご記入ください"); } ・ ・ ・ ↑こんな感じです。 $op_value9~$op_value12の値(フォーム上ではチェックボックスを使用)についても入力チェックを行いたいのですが、9~12を1グループと考え、いずれかに値が入っていた場合はエラーを出さずにOKとしたいと思います。 そこで、初心者なりにネットを調べ elsif ($op_value9 eq "" || $op_value10 eq "" || $op_value11 eq "" || $op_value12 eq "") { &error("項目を一つ以上選択してください"); } &&を||にすればいいのでは・・・?という結論にいたったのですが、 ダメでした。 どうしたらいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 変数値に付いて

    数日前からCGIの勉強を始めた素人です。ご教授,よろしくお願いします。 実際のプログラムを見ながらのほうが覚えるだろうと思い、フリーのスクリプトをダウンロードしてきてそれを見ながら勉強しています。 で、つまずきました。 if ($FORM{'action'} eq 'regist') {&regist;} elsif ($FORM('action') eq 'remove') {&remove;} else {&html;} sub html{   if ($FORM{'action'} eq 'remove') { … 1行目で三つに場合分けしているんですよね? で、subはremoveではないとき。 なのにまたその関数の定義の中で、removeがでてくる。 どういうことなのでしょう? 教えてください。 お願いします。   

    • ベストアンサー
    • CGI
  • 入力規則をまとめて定義

    お世話になります。 cgi/perlを使用してフォームを作成しています。 フォームの一部に製品入力欄を設けており、 一度の登録申請で1-10まで10個分製品が登録可能です。 それぞれの製品に、販売先、販売日など詳細項目を入力するようになっています。 同じ部分で別の問題も抱えているのですが、 今回は書式設定についてうかがわせてください。 上記販売日をyyyy/mm/ddの書式で入力しないとエラーを返すように以下のように記述しました。 if (($form{'kounyuu_01'} !~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/){ &error('販売日の書式が間違っています。'); } ただこれを10個分書くと01,02,03と末尾を変えただけの記述を何度もしなくてはならず、cgiが長くなってしまうため、まとめて定義したいと考えました。 そこで以下のようにしてみたのですが、 1つ目の製品以外の販売日が入力されていないと上記「'販売日の書式が間違っています。'」のエラーが返ってきてしまいます。 if (($form{'kounyuu_01'} !~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/) | ($form{'kounyuu_02'} !~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/) | ($form{'kounyuu_03'} !~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/) | ($form{'kounyuu_04'} !~ /[\d\d\d\d]+\/[\d\d]+\/[\d\d]/) ....) { &error('移管日の書式が間違っています。'); } 製品は最低1つの入力は必須ですが、それ以外は任意なので、 入力があった場合だけ書式をチェックするようにしたいのですがこの場合はどのようにすれば良いのでしょうか。 説明が悪くて申し訳ないですがアドバイスをお願い致します。m(__)m

    • ベストアンサー
    • CGI
  • 未入力のチェックをするには?

    「とほほのwww入門」さんのwwwmailというメールフォームcgiを使わせてもらっています。 このメールフォームに未入力のチェックをさせたいのですが、どうしてもうまくいきません。 例えば「名前」を入力必須項目にしたいので、未入力だった場合、エラーを表示させたいのです。 他のサイトなどを参考に、 #名前がないときの処理 if ($FORM{'NAME'} eq "") { &err('名前が記入されていません。'); } と入れてみたりしたのですが、Internal Server Error がでてしまいます。 また、現在配布されているものと違ったりするようです。 CGIに関してはあまり詳しくなく、本当に簡単な改造をしたことがある程度です。どなたかご存知の方がいらっしゃいましたらぜひ宜しくお願いいたします!

    • ベストアンサー
    • CGI
  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • 条件分岐式。

    現在条件分岐式について考えているのですが、できないので教えてください。 入力フォームで、画像の入力が合った場合は表示し、画像の入力が無かった場合は、 <IMG src=*** の記述もしないようにしたいのです。 (何もないとバッテンが出てしまうため。) $GAZOU_1=$FORM{'GAZOU1'}; $GAZOU1="<IMG SRC='$GAZOU_1'>"; if ($GAZOU_1 eq ''){ $GAZOU1 eq ''; } elsif($GAZOU_1 ne ''){ $GAZOU1 eq $GAZOU1; } としてみましたがダメでした。 どこが違うかご指摘お願いします。

    • ベストアンサー
    • CGI
  • エクセルの入力規則について質問します。

    エクセルの入力規則について質問します。 やりたいことは、“東京都”を選ぶと東京都の区と市がプルダウンで出てくるみたいな感じです。 困っていることは、 A列に大項目A、B、C、D、E、(←実際使う文字)と一つずつ入れ、名前の定義で名前を付け、B列以降の列に中項目を入れて名前の定義をつけて入力規則を使ってプルダウンで選べるようにしようとしたのですが、”C”だけがなぜか名前がつけられず困っています。 なので他の部分はちゃんとプルダウンで選べるのですが“C”だけは中項目が選べません。 説明がわかりづらくてスイマセン。 この方法を使わなくても、とにかく中項目をプルダウンで選べるようにしたいのですが。。。 何か方法がありませんでしょうか??よろしくお願いいたします。

  • 日付の入力について

    excelで、セルに年月日までを入力しないとエラーメッセージがでて入力できないようにしたいのですが、これは入力規則のユーザー定義になるのでしょうか? 月までしか入れなくても数式バーを見ると、勝手に1日が入っているので、依頼データが未入力でも分かりません。 これを解決する方法はあるでしょうか。 よろしくお願い致します。

  • エクセルの入力規則について

    エクセルの入力規則機能について質問があります。 入力値の種類をリストに設定されていて、元の値には”=項目”と記載されています。 項目は別のシートのリストをさしているようで、セルをポップアップするとその別シートの セルの内容が選択できるようになっています。別のシートのリストの項目を削除すると セルをポップアップするとその項目だけ選択できなくなります。 このような機能(”=項目”の定義の仕方)について、どのように設定すればよいか教え て下さい。 よろしくお願いいたします。

  • perl フォームの入力値のチェック セキュリティ

    フォームの入力値のチェック方法についての質問です。 名前、電話番号、Eメール、住所、注文商品、数量の入力フォームです。 入力値の取得は、ライブラリ「cgi-lib.cgi」を利用しています。 (以下perlのソース) #!/usr/bin/perl -T #入力値の取得 require 'cgi-lib.cgi'; &ReadParse(*form); $name = $form{'name'}; $tel = $form{'tel'}; $email = $form{'email'}; ・・・・以下同様の処理が続くだけなので省略 #サブルーチンを利用して入力値をチェック $name = &Wash($name); $tel = &Wash($tel); $email = &Wash($email); ・・・・以下同様の処理が続くだけなので省略 #サブルーチン部分 sub Wash{ if($_[0] =~ /^([^|><\/]+)$/){return $_[0];} elsif($_[0] eq undef){return "未入力";} else{return undef;} } (perlのソース ここまで) としてから、通常の処理に入るようにしてみたのですが セキュリティー上の問題があれば教えてください。 入力値から、コマンドやスクリプトが実行(XSS)されてしまう可能性はありますか? お願いします。 またメタ文字が見つかった場合の処理についてですが とりあえずよくわからないので。「undef」を返して いるのですが、他に良い方法があれば教えてください。

    • ベストアンサー
    • CGI