◆状況によって出力を変えよう!
例えば、入力フォームのE-mailやURLを記入しなかった場合、リンクが残ったりしてたら格好悪いですよね?また、URLなどは半角の連続する英数字なんで、長いものになるとデザインの破壊になってしまいます。こんなことが無いように、入力された値によって出力を変えてみましょう!!◆表示処理プログラムの改造
まず、後々のため?URLはhttp://部分を省いて記録させた方が便利だったりします。そこで、デコード処理部分にURLを入力した際にhttp://を省くようにしておきます。
#デコードするためのプログラム
sub decode {
# プラウザからのデータ取込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
# プラウザからのデータ変換
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
#1行毎に$name,$valueを取り出す
($name, $value) = split(/=/, $pair);
# 変換演算子 tr + を スペースに置き換え
$value =~ tr/+/ /;
# 変換演算子 s/// 単語の構成文字にマッチ
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# " を " に変換
$value =~ s/"/"/g;
#\n を "" に変換
$value =~ s/\n//g;
# 日本語に変換(デコード処理部分)
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$FORM{$name} = $value;
if ($name eq 'url') {
$FORM{$name} =~ s/http:\/\///g;
}
}
}
sub decode {
# プラウザからのデータ取込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
# プラウザからのデータ変換
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
#1行毎に$name,$valueを取り出す
($name, $value) = split(/=/, $pair);
# 変換演算子 tr + を スペースに置き換え
$value =~ tr/+/ /;
# 変換演算子 s/// 単語の構成文字にマッチ
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# " を " に変換
$value =~ s/"/"/g;
#\n を "" に変換
$value =~ s/\n//g;
# 日本語に変換(デコード処理部分)
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$FORM{$name} = $value;
if ($name eq 'url') {
$FORM{$name} =~ s/http:\/\///g;
}
}
}
次に実際の処理ですが、簡単に言ってしまうと、if文でそれぞれの条件に合わせて複数個のHTML出力を用意してあげればいい訳です。これを応用すると、条件によってアイコンにリンクを貼った状態で出力させたり、未記入などの表示をさせたり、何も出力させなかったりと自分好みに設定できます。
#リピート部分プログラム
sub output {
print <<"EOT";
投稿者:$name<BR>
EOT
#メールの入力の有無
if ($email eq '') {
print "E-mail:未記入<BR>\n";
}
else {
print "[<A href=\"mailto:$email\">E-mail</A>]<BR>\n";
}
#URLの入力の有無
if ($url eq '') {
print "Homepage:未記入<BR>\n";
}
else {
print "[<A href=\"http://$url\" target=\"_blank\">Homepage</A>]<BR>\n";
}
print <<"EOT";
投稿内容<BR>
$msr
<HR>
EOT
}
sub output {
print <<"EOT";
投稿者:$name<BR>
EOT
#メールの入力の有無
if ($email eq '') {
print "E-mail:未記入<BR>\n";
}
else {
print "[<A href=\"mailto:$email\">E-mail</A>]<BR>\n";
}
#URLの入力の有無
if ($url eq '') {
print "Homepage:未記入<BR>\n";
}
else {
print "[<A href=\"http://$url\" target=\"_blank\">Homepage</A>]<BR>\n";
}
print <<"EOT";
投稿内容<BR>
$msr
<HR>
EOT
}
と言うように、入力の有無で、出力結果をそれぞれ記述してあげれば、対応した表示をさせることが可能となります。
[sample3]
□特別編 一緒に簡易掲示板を作ってみよう
第八章 STEP1 作ってみよう | |
・デザイン | まず何が必要になるのか? |
・フローチャート作成 | 掲示板ってどんな処理をさせているの? |
・パーツの記述 | 各パーツごとに実際に記述してみよう |
・最終組み立て | パーツを一つにまとめて完成だ! |
第八章 STEP2 いじくってみよう | |
・最大保持数 | 最大保持数を設定できるようにしよう! |
・メールとURL<< | 状況によって表示を変えよう |
・タグの使用禁止 | 荒し対策を考えて |
第九章 STEP3 拡張機能を考える | |
・記事削除 | 記事を削除、ログを削除すると言うことは? |
・ページ機能 | ページ処理の考え方 |
・検索 | 検索させる方法について |
・レス | レス機能ってどんな処理? |
・クッキーの利用 | クッキーの利用方法についての説明 |