logo

その他にもどる

フォーム

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 その他にもどる