プロが教えるわが家の防犯対策術!

http://www.aimix.jp/cgi/accformkioku.html
上のサイトを参考にログイン画面を作っていまして、
この例の場合のようにセレクトする値が3つ、4つならこの書き方でもよいと思うのですが、
セレクトする値が10個、15個…となればソースが長くなり、とても見づらいものとなってしまいます。もうちょっとスマートな
書き方はあるのでしょうか?(一部略してあります)

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n";
print "<title></title>\n";
print "</head>\n";
print "<body>\n";

&analysis;
&auth;

sub analysis{
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\r//g;
$FORM{$name} = $value;
}

$pass1 = $FORM{'user_name'};

return;

sub login{

if($pass1 eq '1'){
$check1 ="selected";
}
elsif($pass1 eq '2'){
$check2 ="selected";
}
else{
$check3 ="selected";
}

print <<HEADER;
<center>
<caption><h1>ログイン</h1></cption>
<table border="5" bgcolor="cfcfcf" width="300" height="150">
<tr>
<td align="center" valign="center">
<form name="form" method="post" action="./xxx.cgi">
ユーザー名:
<select name="user_name">
<option value="1" $check1>A</option>
<option value="2" $check2>B</option>
<option value="3" $check3>C</option>
</select>
<br><br>
パスワード:
<input type="password" name="password">
<br>
<center>
<input type="submit" name="submit" value="ログイン">
</center>
</form>
</td>
</tr>
</table>
</center>
HEADER

}

print "</body>";
print "</html>";
1;

A 回答 (2件)

<option ...> を for でまわしながら表示する.

    • good
    • 0

#ユーザー指定


@User = (
"", #0番目スキップ
"A",
"B",
"C")

if($pass1 =~ /^[1..$#User]$/){
$check[$pass1] ="selected";
}else{
$check[$#User] ="selected";
}




foreach(1..$#User){
print "<option value=\"$_\" $check[$_]>$User[$_]</option>";
}

この回答への補足

taporu様、ありがとうございます。
実行環境が社内にしかなく、返信が遅くなり申し訳ありませんでした。

ちょっとエラーがあり(@Userの最後のセミコロン抜け)それを解決するのに時間がかかってしまいましたが、予想通りの動きをしてくれました。

ありがとうございました。

補足日時:2010/02/08 11:46
    • good
    • 0

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