CGI(Perl)内で必須項目のチェックを行うところで
書き方が分からず困っています。

フォームページHTMLファイルにラジオボタンで選択ボタンが2つとテキストエリアが3つあります。
ラジオボタンのnameは、携帯電話。
valueの1つ目は "1"、2つ目は ""(空白)。

テキストエリアの
1つ目のnameは、"携帯1"。2つ目のnameは、"携帯2"。3つ目のnameは、"携帯3"。

ラジオボタンのvalueが"1"の場合は、テキストエリア全てに項目が入っていないとエラーメッセージが出るチェックを作りたいのです。

説明が分かりづらいかもしれないのですが、お力をお貸しください。
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

milktea_ さん、



ということは、ひょっとして、確認画面の表示は以下のようなコードになっているのでしょうか。

* name を項目名としてそのまま使用
#================================================
print "$name : $in{$name}"
#================================================

もしそうであれば、以下のように書き換えてあげるのでは駄目ですか?
#================================================
print "携帯電話番号1 : $in{'celler1'}"
#================================================

どうしてもコードを書き換えたくないのであれば、name を「携帯電話番号1」のように元に戻してください。
とりあえず「携帯電話番号」には、文字化け等の問題を起こしそうな文字は含まれていないので。。。
    • good
    • 0
この回答へのお礼

ありがとうございました。
nameを英数字にして、確認画面の表示で日本語に書き換えてあげることにしました。

お礼日時:2001/11/30 17:39

CGI 内部で必須項目のチェックをするということですね。



日本語だと余計なトラブルを招くので name は、「携帯電話」を「celler」に置き換えています。

#=================================================

# フォームの値を $in{$name} = $value; と入れたと仮定します。

if($in{'celler'} eq "1" & ($in{'celler1'} eq "" | $in{'celler2'} eq "" | $in{'celler3'} eq "")){
# ここにエラーを出力する処理を記述
}

#=================================================

なんとなくハズしてる予感がしますがこういうことをお聞きになりたかったのでしょうか?

この回答への補足

ありがとうございます。
チェックをすることができました、感謝します。

ですが、入力を確認する画面をCGI内で作成しているのですが、
celler 090~ となってしまうので
cellerを携帯電話番号と置き換えないといけなくなりました。

変換するにはどうすればよろしいでしょうか?
お願いします。

補足日時:2001/11/29 15:59
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォームメールの送信先アドレスをラジオボタンの項目によって変更したい

こんばんは。

フォームメールの送信先を現在は複数で受け取れるように設定しているのですが、

$sendmail = '/usr/lib/sendmail -t' || die $!;
$myaddress = 'aa*@aaa.co.jp,bb*@bbb.co.jp';

これを、ラジオボタンで選択されている内容によって送信先を振り分けたいのですが、こうゆうことは可能なのでしょうか?

ラジオボタン「A」が選択されたら、
「aa*@aaa.co.jp」と「bb*@bbb.co.jp」に送信する。

ラジオボタン「B」が選択されたら、
「cc*@ccc.co.jp」と「dd*@ddd.co.jp」に送信する。

よろしくお願いします。

Aベストアンサー

フォームからのデータが連想配列(ハッシュ)FORMに入っていて、ラジオボタンの名前がradioだとすると、

$myaddress = ($FORM{'radio'} eq 'A') ? 'aa*@aaa.co.jp,bb*@bbb.co.jp' : 'cc*@ccc.co.jp,dd*@ddd.co.jp';

A、B、C・・・というように3つ以上選択肢があるなら、

if($FORM{'radio'} eq 'A'){
$myaddress = 'aa*@aaa.co.jp,bb*@bbb.co.jp';
}elsif($FORM{'radio'} eq 'B'){
$myaddress = 'cc*@ccc.co.jp,dd*@ddd.co.jp';
}else{ #AでもBでもない→つまり(ここでは)C
$myaddress = '~,~';
}

Qテキストエリアにテキストファイルを改行コードごと読み出すには

ただ今勉強中のCGIを使って、テキストファイルの編集・上書き保存をテキストエリアから行いたいのですが、テキストエリアに読み込む時に改行コードが読み込めないためか、最後の一行しか表示できません。どのようにすると、改行コードを含めて編集できるのでしょうか?
その「できないコード(サブルーチン)」は↓になります。

$commentfile = "comment.txt";

■ 読み出し
sub read_commentfile
{
local($masg);
open(IN, $commentfile);
while (<IN>) {$masg = join('',$_);
       $massage = $masg;
}
close(IN);
}

■ コメントの編集画面
sub comment
{
local($html);

&read_commentfile;
#HTML作成
$html = << "EOM";
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=$charset">
<title>コメントの編集</title>
</head>
<body>
<form action="$self" method=post>
<input type=hidden name=mode value="savecomment">
<hr>
コメント<br>
<textarea name=masg cols=40 rows=4>$massage</textarea>
<br>
<input type=submit value=" 更新 ">
</form>
<hr>
</body>
</html>
EOM
&print_html($html);
}

■ 上書き保存
sub savecomment
{
local(@text);
push(@text, "$FORM{'masg'}\n");
open(OUT, ">$commentfile");
print OUT @text;
close(OUT);
}

本来でしたら、ファイルのロック・解除、表ダグ、パスワード等の記述もあるのですが、省いてあります。
よろしくお願い致します。

ただ今勉強中のCGIを使って、テキストファイルの編集・上書き保存をテキストエリアから行いたいのですが、テキストエリアに読み込む時に改行コードが読み込めないためか、最後の一行しか表示できません。どのようにすると、改行コードを含めて編集できるのでしょうか?
その「できないコード(サブルーチン)」は↓になります。

$commentfile = "comment.txt";

■ 読み出し
sub read_commentfile
{
local($masg);
open(IN, $commentfile);
while (<IN>) {$masg = join('',$_);
       $massage ...続きを読む

Aベストアンサー

while (<IN>) {$masg = join('',$_);
       $massage = $masg;
}
そもそもこのループで何をしたい?
と言うか何をしているのかわかっていますか?
それがわかれば自ずとどうすればいいのかわかるはずです。

Qラジオボタンとテキストボックスの併用でCGIがうごかなくなる

よろしくお願いします。
今CGIをくんでいるのですが、
フォームにテキストボックスを使用するとボタンを押してSABMITで
エラーになります。
たぶんSABMITで飛ぶ先の引数がまずいんだと思うのですが、
なぜかテキストボックスをSABMITで送ろうとするときだけ
うまくうごかないのです。
ラジオボタンのみのページもしくはテキストボックスのみの
ページだとうまくいきます。
ラジオボタンとテキストボックスを併用すると
エラーになるのです。
この現象についてご存知の方、よろしくお願いします!

Aベストアンサー

送信方法をGETで送っていませんか?

GETでの送信はあまりたくさんの文字数を送信
することができないので、POSTで送信をして
みてください。

それでもダメなときは、ダメなCGIのURLを補足
していただければ、フォローがつきやすいと
思いますよ。

ではでは☆

Q複数ボタンのvalueを送れない

ひとつのフォームで複数のボタンを使う方法を探していたら
次のような方法があるとのことでした。

<form method="post" name="MyForm">
<INPUT TYPE="BUTTON" VALUE="aaa" onClick="MyForm.action='hoge.cgi';MyForm.submit();">
<INPUT TYPE="BUTTON" VALUE="bbb" onClick="MyForm.action='hoge.cgi';MyForm.submit();">
</form>

これで、ボタンによってVALUEを渡せるのかと思いきや、
飛んでいきませんでした・・・

複数ボタンを用意して、ボタンによってその
VALUE値を渡す方法がありませんでしょうか?

Aベストアンサー

もしかして、name固定で押されたボタンのvalueをとりたいということでしょうか。

それならnameを同じにすることで出来ますが。

<input type="submit" value="ボタン1" name="button">
<input type="submit" value="ボタン2" name="button">

Qテキストエリアの改行を取得したい

最近CGIを独学ではじめたのですが、複数行のテキストエリアからの文字列の取得をした場合、改行が反映されずに表示されます。
改行コードのようなものは取得されている、とちらりとどこかで見たことがあるのですが、どのように取得して改行させるかが分かりません。
すみませんが、ご存知の方がいらっしゃいましたら教えていただけないでしょうか。

このような感じで書きました。
my $cgi = CGI::new();
my $area = $cgi->param('text');

print "Content-type: text/html\n\n";
print $area;

Aベストアンサー

> print "Content-type: text/html\n\n";

htmlで改行する場合は、再度テキストエリアなどに表示しない場合、
<br>といったhtml用のタグを用いるのが通例です。
ですので、そのまま出力して改行を反映させるならば text/html から text/plain に変え、

print "Content-type: text/plain\n\n";
print $area;

としてください。


htmlとして表示するなら、改行を<br>に置換すれば表示できるでしょう。


#全て置換する
$area =~ s/\r\n|[\r\n]/<br>/g;

print "Content-type: text/html\n\n";
print $area;


このカテゴリの人気Q&Aランキング

おすすめ情報