CGI内で必須項目のチェックをしたいと思っています。
ラジオボタン(name=電話)が(value=1)を選択された時、
テキストエリア(name=電話1、name=電話2、name=電話3)
がすべて入力されていないとエラーが出るチェックをかけたいと思っています。
入力した後にでる確認画面で、nameを項目名として出しているのでnameを日本語につける必要がありました。
nameの指定を英字にしても良いのですが、チェックをかけた後、日本語に変換をかける方法がわからないのです。
お力をお貸しください!よろしくお願いします。
No.1
- 回答日時:
直接書いてはいけないのでしょうか?
【前提】
・ラジオボタン:name=caller
・電話1:name=tel1 以降、2,3
・フォーム内容を受け取るハッシュ:%FORM
【ソース】
print <<_HTML_;
電話1:$FORM{tel1}<BR>
電話2:$FORM{tel2}<BR>
電話3:$FORM{tel3}<BR>
_HTML_
# そもそも「nameを項目名として出している」というのが、よく分かりませんが。。
何か聞きたいことと違っていたら、補足下さい。
この回答への補足
お答え頂きありがとうございます。
確認画面のHTMLソースを下記のようにしているので
電話だけ直接書くようにする方法がわからないのです。
HTML_WRITE
foreach (0..$count-2) {
if ($VALUE[$_] ne '') {
print "<tr><input type=hidden name=\"$NAME[$_]\" value=\"$VALUE[$_]\"><td width=\"150\" nowrap>$NAME[$_]</td>\n";
$VALUE[$_] =~ s/\r/<br>/g;
print "<td>$VALUE[$_]</td></tr>\n";
}
}
print <<HTML_WRITE;
分かりづらい書き方ですみません。
No.2
- 回答日時:
ハッシュ%FORMにデータが格納されていると仮定して…
if ($FORM{'電話'} == 1)
{
if ($FORM{'電話1'} eq "" || $FORM{'電話2'} eq "" || $FORM{'電話3'} eq "")
{
エラー処理
}
}
という感じでどうでしょう?
この回答への補足
お答えありがとうございます。
>ハッシュ%FORMにデータが格納されていると仮定
$in{$FORM} = $value;と記述すれば良いのでしょうか?
記入しているのですが、チェックにひっかからないのです。
チェック前に下記のように書いてある所があります。
ここでデータを格納しているのですよね?
______________
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*name,'sjis');
&jcode'convert(*value,'sjis');
} else {
$name =~ s/</</g;
$name =~ s/>/>/g;
$name =~ s/"/"/g;
$name =~ s/\t//g;
$name =~ s/=/&eq;/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/"/"/g;
$value =~ s/\t//g;
$value =~ s/=/&eq;/g;
push(@NAME,$name);
push(@VALUE,$value);
↓のエラーチェックにつづく
ちなみに、他のチェック項目はこうなっています。
関係ないかもしれませんが…
↓
foreach $buff (@CHECK) {
if ($buff eq $name) {
if ($name eq '名前') {
if ($value eq '') { &error(bad_01); }
}
elsif ($name eq '住所') {
if ($value eq '') { &error(bad_01); }
}
}
}
長々とすいません。
宜しくお願いいたします。
No.3
- 回答日時:
下の投稿インデントが消えてしまっていますね。
読みにくくて申し訳ありません。
No.4
- 回答日時:
補足読みました。
なるほど、nameとvalueを、それぞれ別の配列に入れているのですね。
でしたら、次のようにされてはどうでしょうか。
my %LABEL = (caller=>'電話', tel1=>'電話1', tel2=>'電話2', tel3=>'電話3');
としておいて、表示箇所を
<td width=\"150\" nowrap>$LABEL{$NAME[$_]}</td>
# nameに対する表示用文字列をハッシュに入れておくという方法です。
# 他にも表示されるname要素があったら、それに対する表示用文字列を設定して下さい。
この回答への補足
補足を読んでいただきありがとうございます。
説明が足りませんで、申し訳ないです。
leaz024さんがおっしゃるようにしたら、書き換えに成功しました。
しかし、他のnameは日本語なので、置きかえる必要がないのですが、
my %LABEL = ・・・・・
のように書き加えていかなければいけないのでしょうか?
No.5ベストアンサー
- 回答日時:
> しかし、他のnameは日本語なので、置きかえる必要がないのですが
ええとですね、そもそもnameに日本語を指定すること自体、普通はしないんですよ。日本語は何かと面倒が多いので、通常は半角英数を使用します。
No.2の補足も読みましたが、デコードルーチンがちょっと特殊なんですね。私やyuizuianさんが言っている「%FORMにデータが入っている」というのは、次のような一般的なデコードルーチンを使用している場合の話です。
foreach $pair (@pairs) {
my ($key,$val) = split(/=/,$pair);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$val =~ s/</</g; # ここから下は、必要に応じて書く
$val =~ s/>/>/g;
$val =~ s/\"/"/g;
$FORM{$key} = $val;
}
これなら、HTML内の <INPUT type="text" name="tel1"> の値は、$FORM{tel1} とすれば読み出せます。(No.1の私の回答も、No.2のyuizuianさんの回答も、これを前提としているのです。)
nameとvalueを別の配列に入れてしまっては、欲しいデータをすぐに取り出すことができないですよね。(何番目にどのデータが入っているのか確定しているなら別ですが。)このまま複雑なプログラムを書くのは大変苦しいと思います。
デコードルーチンの差し替えと、name値を半角英数に統一するのが完成への近道だと思いますよ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTML::TemplateのTMPL_LOOPにつ...
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
-
DoEventsが必要な理由について
-
クラスに配列を渡す方法
-
pythonでファイルのコメント行...
-
DOSコマンドのループ内のTIMEコ...
-
For文を使った九九表の作成
-
VBAで3秒だけ時間を止めたい
-
英語でのシャープとコメの呼び...
-
vbscriptでIE自動入力(途中で...
-
ループ内での条件処理
-
CSVファイルの特定の行だけを読...
-
GIFアニメをループさせたくない
-
VBA横データを縦にしたいです
-
vb.netからエクセル関数書き込み
-
VBScript 配列
-
エクセル関数で1〜12の数字がル...
-
vb.netです。2次元配列の要素を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について。
-
高速に文字列の比較
-
二つの変数が同じ物を指すよう...
-
@{$protocol_name}
-
CGFloatとは?
-
perlでの平均計算について
-
HTML::Templateのループと配列...
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
VBAのautofilter、criteriaの配...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
おすすめ情報