さて、今日からは発言のための入力方法の実装に入ることにします。
まずは、入力用のフォームをHTMLに追加しないといけませんね。こんな感じでしょうか。
print "<form method=\"POST\" action=\"$Cgi_Main\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"01\">\n"; print "<textarea cols=\"60\" rows=\"5\" name=\"msg\" wrap=\"off\"></textarea><br>\n"; print "<input type=\"submit\" value=\"発言する\">\n"; print "</form>\n";
発言にはText Area を使うのが一般的な選択だと思います。今回は、入力欄に「msg」という名前を付けていますから、プログラム側では$Query_Tbl{'msg'} で値を取得することになりますね。
あと、普通の村人発言であることを示す「mode」もhidden ということでフォームに含めています。これはそのうち、霊話や人狼のささやきを実装するときに、それらと区別する必要があると思うために盛り込んでいます。
あとはsubmit ボタンですね。「発言する」というボタンになっています。
入力側を上記のようにしておいて、受け取り側は以下のようにしてみました。
&SYSIN_TIME; &STDIN_QUERY_STRING; &FILEIN_MSG; if( $Query_Tbl{'mode'} ){ if( $Query_Tbl{ 'msg' } ne "" ){ &FILEOUT_MSG; } print "Location: $Cgi_Main\n\n"; }else{ &STDOUT_HTML; } exit(0);
今まではHTMLの出力部分をメイン処理としていましたが、今度はメッセージ入力の場合と単純なHTML出力の場合を切り分けないといけないので、条件分岐をメインに変更しています。
今までのメイン部分は、STDOUT_HTML というサブルーチンにまとめ直しています。
Query_Tblのmodeが設定されている場合に、メッセージ出力を行ってから処理をパラメータ無しの場合でやり直すよう、リダイレクトさせています。「Location:〜」の部分が、リダイレクトレスポンスを書き込んでいる部分ですね。
その他にも、一行目のSYSIN_TIMEだとかファイル出力のサブルーチンのFILEOUT_MSGだとかがありますが、それはまた明日以降の説明で、ということで。今日はここまで。