プロが教える店舗&オフィスのセキュリティ対策術

フォームから、テキストボックスと、プルダウンを使用してデータを取得するcgiに、
チェックボックスを加えようと思うのですが、うまくいきません。
どなたかご教授お願い致します。

入力が適切ならば、hiddenで書き込み
不適切ならばフォームを表示。

テキスト入力の場合
# email
if ($e_email){
$t_email = "<input type=\"text\" size=\"20\"";
}else{
$t_email = "$email<input type=\"hidden\"";
}
$t_email .= "name=\"email\" value=\"$email\">\n";

プルダウンの場合
# way
if ($e_way){
$t_way = "<select size=\"1\" name=\"way\">\n";
$t_way .= "<option selected>連絡方法を選択して下さい\n";
$t_way .= "<option>E-mail\n";
$t_way .= "<option>電話\n";
$t_way .= "</select>\n";
}else{
$t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n";
チェックボックスでの分岐、value属性のある場合はどうなるのでしょうか?

A 回答 (3件)

それでは、簡単に要点となる部分のscriptを記述したいと思いますので参考にしてscriptを作成してみて下さい。



1.最初の入力form(htmlでOK!!)

<html><body>
<form method="POST" action="test.cgi">
<hr>
お名前を入力して下さい。<br>
<input type="text" name="name" size="20" value="">
メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="">
<hr>
<input type="submit" value="送信" name="b"></center>
</form>
</body></html>
---------------------------------------

2.入力有無の確認
if($in{name} eq ''){
&notinput;
}
if($in{mail} eq ''){
&notinput;
}

OK処理......
---------------------------------------

3.error処理

sub notinput{
print<<"END"
<html><body>
<form method="POST" action="test.cgi">
<hr>
END
if($in{name} eq ''){
print <<"END";
お名前を入力して下さい。<br>
<input type="text" name="name" size="20" value="">
END
}
else{
print <<"END";
<input type="hidden" name="name" size="20" value="$in{name}">
END
}
if($in{name} eq ''){
print <<"END";
メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="">
END
}
else{
print <<"END";
<input type="hidden" name="mail" size="20" value="$in{mail}">
END
}
<hr>
<input type="submit" value="送信" name="b"></center>
</form>
</body></html>
END
}
---------------------------------------

っと、こうなります。

pulldown等もhiddenの記述は同じでvalue内に入力項目を叩き込めばOKです。
もう一つの親切な方法としてはhiddenを使用せずにtext内のvalueに入力内容を叩き込んで一応表示して入力エラーの項目に*印等を付加し入力の再要求をするって手も有ります。
例)
if($in{name} eq ''){
print <<"END";
*メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="$in{mail}">
END
}
else{
print <<"END";
メールアドレス<br>
<input type="text" name="mail" size="20" value="$in{mail}">
END
}

自分に有った方法を選んで親切なscriptを作りましょう。
    • good
    • 0
この回答へのお礼

rokujiroさん

返事がおくれてすいませんでした。
rokujiroさんのご説明大変参考になりました。
教えていただいた方法を元に
作っていこうとおもいます。

あと最後に聞きたいのですが、
上記の場合の、チェックボックスの場合だと
どうなるんでしょうか?
よろしければ教えていただけないでしょうか?
自分でも調べてはいるのですが、
どうもたどりつけないのです。

なんども申し訳ないですが、
お願い致します。

お礼日時:2002/03/26 13:07

私も時間が有りませんので貴方の記述したprogramを解読していませんが要はformで入力された内容で必須項目を入力されていない場合は入力されていない必須項目のみのfieldを表示して入力を催促すると言う事ですね!!



その場合のフローチャートは

全てのformを表示する。

入力チェック*1

入力されていない項目を表示

*1に戻る
というパターンになりますよね!!

ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。

    • good
    • 0
この回答へのお礼

rokujiroさん

返事がおくれましてすみません。。。
コメントどうもありがとうございます。

そうなんですよ~
rokujiroさんのおっしゃるとうりのことがしたいのです!

よろしかったら、scriptを教えていただけないでしょうか?
よろしくお願い致します。

お礼日時:2002/03/14 17:24

すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。



まず、フォーム記述に問題が有ると思います。


テキスト入力の場合
# email
if ($e_email){
$t_email = "<input type=\"text\" size=\"20\"";
}else{
$t_email = "$email<input type=\"hidden\"";
}
---------------------------------↓
・上記の物は最後の>が無いですしnameの指定が有りません!!
通常は(私式にメールの記入が有るかって判断で....)
if($e_mail eq ''){
print <<"END";
メールアドレスを入力してください。<br>
<input type="text" name="in_mail" size="20" value="$in_mail">
END
}
else{
print <<"END";
<input type="hidden" name="in_mail" value="$in_mail">
END
}
--------------------------------------↑
$t_email .= "name=\"email\" value=\"$email\">\n";
--------------------------------------↓
この最後の一行も意味不明です。
この最後の一行で今までのif分の作業が意味無しになると思います。
--------------------------------------↑
プルダウンの場合
# way
if ($e_way){
$t_way = "<select size=\"1\" name=\"way\">\n";
$t_way .= "<option selected>連絡方法を選択して下さい\n";
$t_way .= "<option>E-mail\n";
$t_way .= "<option>電話\n";
$t_way .= "</select>\n";
}else{
$t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n";
--------------------------------------↓
またまた私的に
if ($e_way eq ''){
print <<"END";
連絡方法を選択してください。<br>
<select name="way" size="1">
<option selected value="e-mail">e-mail</option>
<option value="tel">電話</option>
</select>
END
}
else{
pritnt <<"END";
<input type="hidden" name="way" value="$e_way">
END
}
--------------------------------------↑
簡単にですが以上の様になると思います。

以上の点を踏まえて質問宜しくお願いします。

この回答への補足

rokujiroさん

回答ありがとうございます。

たしかに、説明不足でした。すみません。
フォームメールで、ログを蓄積するのと、
空白の場合、再度フォームを表示させ入力をうながすのですが、
今回追加しようとしている、チェックボックスの部分は必須項目ではないので、単に入力されたものだけを、
hidden属性にして、送ろうととおもうのですがうまくいかないのです。
素人考えで、sub fixTagsの部分に問題があるのかとおもったりもするのですが、、、
ご教授お願いします。


form.html部分
<form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi">
<INPUT TYPE="checkbox" name="low" value="low">

formaleart.html部分
<form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi">
<CGI:low>

form.cgi部分

use strict;
use CGI;
require 'jcode.pl';

-------------
省略
-------------

my $template= '../htdocs/0/alertform.html';
my @html = ();
my $location = 'http://www.777.co.jp/0/formthanks.html';
my $query= new CGI;
my $low= $query->param('low');
my $errNum= 0;
my $errMsg= '';
my $e_low= 0;
my $t_low= '';
$errNum = chkFormInput();
fixTags();

open HTML, $template or err("$templateが開けません");
@html = <HTML>;
close HTML;

if ($errNum > 0){
$errMsg =~ s/^,//;
$errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)";
$errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n";
}elsif (sendmail() && stockData()){
print "Location: $location\n\n";
}

replaceTags();
showHTML();
exit;

sub fixTags
{
# low
else{
$t_ low = "$ low<input type=\"hidden\" name=\" low\" value=\"$ low\">\n";

}

return 1;
}
sub replaceTags
{
foreach (@html){
s/<CGI:low>/$t_low/i;
if ($errNum > 0){
s/<CGI:submit>/<input type="submit" value="送信">/i;
}else{
s/<CGI:submit>//i;

}
}

return 1;
}

sub showHTML
{
print $query->header;
foreach (@html){ print; }
}

sub sendmail {
my $line = "X-Mailer: U got Mail\n";
$line .= "ロウ\t$low\n";
$line = jcode::jis($line);
open MAIL,'>mail.txt' or err('mail.txtが開けません。');
open MAIL,"| $sendmail -t" or err("$sendmailが開けません。");

print MAIL $line;
close MAIL;
return 1;
}
以下省略

補足日時:2002/02/27 22:03
    • good
    • 0

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