あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

投稿フォームを作ってみた

とりあえず投稿できないと掲示板ですらないだろう、と思って、簡易フォームを作ることにした。問題はフォームの要素を取得するのが物凄く面倒な気がしたこと。

が、CGI.pmのモジュールを使うと細かいことを気にせずに書けることが分かったので、さっそく使って書いてみることにした。

use CGI;

と書くだけでいいらしい。一から全部書き直すのが面倒だったので、table2.plを改変でいく。

vim table2.pl

iキー。

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $cgiformdata = new CGI;
my $name = $cgiformdata -> param('name');
my $message = $cgiformdata -> param('message');

print $cgiformdata->header;

open READ,"data.txt" || exit;
my @Lines = <READ>;
close READ;

print "<table border=\"1px\">\n";
foreach(@Lines){
    print "<tr><td>".$_."</td></tr>\n";
}
print "</table>\n";

print <<EOM;
<form method="POST">
<input type="text" name="name" />
<input type="text" name="message" />
<input type="submit" value="submit" />
</form>
EOM

if(!$name || !$message){
    exit;
}
print "<ul>\n";
print "<li>".$name."\n";
print "<ul><li>".$message."</li></ul>\n";

escキー。

:save table3.pl
:quit
chmod 705 table3.pl

ものすごく順風に進んでるようで意外と手間かかった。$nameと$messageの中身が空っぽだと最後の3行でエラーが出るため、とりあえずどちらかが空っぽだった時点で途中処理終了にすることにした。

print "Content-type: text/html\n\n";

が、CGI.pmを使うと

print $hogehoge->header;

みたいにすっきりなるので置き換え。

ブラウザからアクセス。

http://127.0.0.1/cgi-bin/table3.pl

nameとmessageをそれぞれtestとして入力すると、こんなんなった。

うまく処理できた瞬間が何とも気持ちよかった。

課題としては、

  • 日本語を入力しても大丈夫かどうか
  • 同時書き込みおよび読み込み処理の時の排他制御

が残ってる。