その他にもどる
フォーム
CGIファイルが下のような構成になっていたとする
$pass = "0000";
(略)
sub top {
&header;
print "ここはTOP画面です\n";
&footer;
}
sub sinki {
&header;
print "ここは新規登録画面です\n";
&footer;
}
sub error {
&header;
print "エラーです\n";
&footer;
}
(略)
|
TOP画面から新規登録画面に移動するには、下のように書く
print "新規登録画面は <a href=$script?mode=sinki>こちら</a>\n";
しかし新規登録画面に入る時に、パスワードを要求するようなページの場合は、この方法では無理
そこで <form> を使います。記述は下のようになる
print "<form action=\"$script\" method=\"POST\" enctype=\"multipart/form-data\">\n";
print "<input type=hidden name=mode value=\"sinki\">\n";
print "パスワード<input type=text name=pas size=8>\n";
print "<input type=submit value=\"新規登録画面へ\"></form>\n";
name=mode value=\"sinki\" と書くことで、「新規登録画面へ」をクリックすると新規登録画面へ移動できる
画面では下のように見える
新規登録画面の入口
パスワードのチェックは下のように書く
sub sinki {
if ($pass ne "$in{'pas'}") { &error("パスワードが違います"); }
(略)
上を少し説明すると、
このページ最上段で $pass には 0000 が格納されている $in{'pas'} は <form> 画面のパスワードに入力された数字
ne は「等しくない」という意味で、もし等しくない場合は、 &error つまり sub error へ進むという内容
ちなみに、「等しい」は eq または == と書く
このように <form> は、入力された値を次の sub に持って行く、という働きをする
(注意)一般に配布されている<form>構文には2種類あり、ここでは左を使っている
デコード処理
sub decode {
local($name, $value);
(途中略)
$in{$name} = $value;
}
$mode = $in{'mode'};
}
| |
sub decode {
if ($ENV{'REQUEST_METHOD'}
(途中略)
$FORM{$name} = $value;
}
}
|
|
モード切替
if ($mode eq 'top') {⊤ }
elsif ($mode eq 'sinki') { &sinki; }
elsif ($mode eq 'hensyu') { &hensyu; }
| |
if ($FORM{'mode'} eq "top") {⊤}
elsif ($FORM{'mode'} eq 'sinki') { &sinki; }
elsif ($FORM{'mode'} eq 'hensyu') { &hensyu; }
|
|
使用例1
print "$in{'name'}\n";
| |
print "$FORM{'name'}\n";
|
|
使用例2
if ($in{'name'} eq "") {
| |
if ($FORM{'name'} eq "") {
|
---- End ----
↑PageTop その他にもどる