名 前(ハンドル名)
 
最初のコメント
 



【リアルタイムで書き込み続行&表示】 (空欄時のエラー処理)
*ただし、これだと自分が書き込んだ分しか見えないので、チャットとしては役に立たない

【ソース】 chat1.cgi 【解説】
  1. #!/usr/local/bin/perl
  2. #書き込まれた内容を保存するファイル名
  3. $datafile='chatdata.html';
  4. #このプログラムのファイル名
  5. $program='chat1.cgi';
  6. print "Content-Type: text/html\n\n";
  7. #送られてくる文字列の長さ
  8. $length=$ENV{'CONTENT_LENGTH'};
  9. #長さ分だけ標準入力から読み込む
  10. read(STDIN, $buffer, $length);
  11. #文字列ごとに分割する
  12. ($shimei,$koment)=split( /&/ , $buffer);
  13. #フォーム名と内容に分割する
  14. ($name,$value1)= split( /=/ , $shimei);
  15. ($tel,$value2)=split( /=/ , $koment);
  16. #フォームから送られたデータにスペースがあると、
  17. #プラス(+)に置き換えられるので、
  18. #スペースにしたままにする変換処理をする
  19. $value1=~ tr/+/ /;
  20. $value2=~ tr/+/ /;
  21. #フォームから送られたデータの特殊文字や日本語などは
  22. # % に続く2桁の16進数に置き換えられるので、
  23. #それを変換しなおす処理をする
  24. $value1=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  25. $value2=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
  26. #日時を表示するために、次の処理を加える
  27. # localtime関数を使い、秒、分、時、日、年、曜日に分解
  28. ($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time);
  29. #月の値が0〜11になるので、+1して1〜12に補正する
  30. $mon++;
  31. #西暦を4桁表示にする(2000年対応)
  32. $yy=$year + 1900;
  33. #日本語の曜日を振り当てる
  34. @yobi=('日','月','火','水','木','金','土');
  35. #全体を表示させる記述
  36. $nowis="$yy年$mon月$mday日($yobi[$wday])$hour時$min分$sec秒\n";
  37. #ハンドル名が空欄だったら入力するように促す
  38. if($value1 eq ""){
  39. print "ハンドル名を入力してください<br>
  40. ブラウザの戻るで再入力をどうぞ。<BR>";
  41. exit;
  42. #入力されていたら日時を得る
  43. }else{
  44. #データファイルを追加書き込みモードで開く
  45. open(FILE,">>$datafile");
  46. print FILE "<HR>$value1:$value2 [$nowis]<BR>\n";
  47. close(FILE);
  48. }
  49. #データファイルを開いて表示する
  50. #データファイルを読み込み専用モードで開く
  51. open(FILE,"$datafile");
  52. #内容をブラウザに表示する
  53. print <FILE>;
  54. #ファイルを閉じる
  55. close(FILE);
  56. #再入力フォームを表示する
  57. print <<EOF;
  58. <HR>
  59. <A NAME="REPLAY"><FORM METHOD="post" ACTION="$program #REPLAY">
  60. <INPUT TYPE="hidden" NAME="shimei" value="$value1">
  61. 発言<INPUT TYPE="text" NAME="koment" SIZE=80><P>
  62. <input type="submit" value="送信する">
  63. <input type="reset" value="クリアする"></FORM>
  64. <HR>
  65. EOF
  66. exit;
board2.cgi から変形。
新たに追加・修正した箇所を
青文字で表示
4.chatdata.htmlは自動で作成される。


7.繰り返し、入力フォームを表示させる時
 に必要
















































58.ハンドル名が空欄だったらエラー表示






64.そうでなかったらデータ書き込み



















85.表示されたものの下に、
  再度、入力フォームを表示させる。

  programに代入されたcgiを
  繰り返し行う(REPLAY)

88.いったん入力して次の画面に入ると
  すでにハンドル名は分かっているので
  表示されるのは発言フォームだけ

  (ただし、"hidden" で
   画面からは隠して
   ハンドル名をcgiに渡している)


比較演算子 58.のように if($value1 eq "") などと表記。 「""」は、空白の意味
文字列を比較 eq」 (イコール。=の意。等しい)
ne」 (ノットイコール、等しくない)
数値を比較 ==」 (イコール。=の意。等しい)
「!=」(ノットイコール、等しくない)
他にも 「<」「>」「<=」「>=」などがある