雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

人狼BBS作成日記37

さて、今日からは発言のための入力方法の実装に入ることにします。
まずは、入力用のフォームを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だとかがありますが、それはまた明日以降の説明で、ということで。今日はここまで。