|
1.日時の記録
日時はtimeで取得可能です。
timeは1970年1月1日からの通算秒(UNIXタイムスタンプ)を返します。
2.プログラム
-bbs15.bas-
#!/usr/bin/scriba
import cgi.bas
'commentが送信されているか?
IF cgi::POSTParam("comment") <> undef Then CALL kakikomi
'読み込みを表示
CALL yomikomi
'プログラムはここまで
END
'読み込み部分
SUB yomikomi
print "Content-Type: text/html; charset=euc-jp\n\n"
print """
<html><body>
<form action="bbs15.bas" method="POST">
お名前:<input type="text" name="onamae" size=20><br>
Email:<input type="text" name="email" size=20><br>
▼コメント<br>
<textarea name="comment" rows=4 cols=40></textarea><br>
URL:<input type="text" name="url" value="http://" size=50><br>
<input type="submit" value="送信">
</form>
"""
'読み込み部分(ファイルが存在する場合)
IF FILEEXISTS("bbslog4.txt") Then
open "bbslog4.txt" for input as 1
i=0
'最後までループ
while NOT(EOF(1))
'配列data[i]に代入
line input #1,data[i]
i=i+1
wend
close 1
'ループ開始
for a=i-1 to 0 STEP -1
'配列data[a]を取り出し
IF len(data[a])>0 Then
'分割:<>で分割
split data[a] by "<>" to onamae,comdata,email,url,date
'emailが書き込まれているか?
IF email <> "" Then
print "お名前:<a href=\"mailto:",email,"\">",onamae,"</a>"
ELSE
print "お名前:",onamae
END IF
print "<br>",comdata,"<br>"
'urlがhttp://以外なら
IF url<>"http://" Then print "<a href=\"",url,"\">",url,"</a>"
print "<hr>"
END IF
next
ELSE
print "ファイルがありません"
END IF
print "</html></body>"
END SUB
'書き込み部分
SUB kakikomi
'変数に代入
comment=cgi::POSTParam("comment")
onamae=cgi::POSTParam("onamae")
email=cgi::POSTParam("email")
url=cgi::POSTParam("url")
'HTMLタグの置換
comment=REPLACE(comment,"<","<")
comment=REPLACE(comment,">",">")
onamae=REPLACE(onamae,"<","<")
onamae=REPLACE(onamae,">",">")
email=REPLACE(email,"<","<")
email=REPLACE(email,">",">")
url=REPLACE(url,"<","<")
url=REPLACE(url,">",">")
'入力検査部分
IF onamae="" then CALL errormes("お名前が記入されていません")
IF comment="" then CALL errormes("コメントが記入されていません")
'文字数検査
IF len(comment)>1000 then CALL errormes("コメントが1000文字以下ではありません")
IF len(onamae)>30 then CALL errormes("お名前が30文字以下ではありません")
IF len(email)>64 then CALL errormes("Emailが64文字以下ではありません")
IF len(url)>128 then CALL errormes("URLが128文字以下ではありません")
'改行を<br>に
comment=REPLACE(comment,"\r\n","<br>")
comment=REPLACE(comment,"\r","<br>")
comment=REPLACE(comment,"\n","<br>")
'過去のデータをチェック
IF FILEEXISTS("bbslog4.txt") Then
open "bbslog4.txt" for input as 1
'最後までループ
while NOT(EOF(1))
'checkに代入
line input #1,check
'checkが存在するか?
IF len(check)>0 Then
'分割:<>で分割
split check by "<>" to check_onamae,check_comdata,check_email,check_url
IF comment=check_comdata then CALL errormes("過去に同じ内容の書き込みがあります")
END IF
wend
close 1
END IF
'書き込み
open "bbslog4.txt" for append as 1
'ロック
LOCK #1,write
print #1,onamae,"<>",comment,"<>",email,"<>",url,"<>",time,"\n"
'ロック解除
LOCK #1,release
close 1
print "Location:http://127.0.0.1/cgi-bin/bbs15.bas\n\n"
END
END SUB
'errormesサブルーチン
SUB errormes(errmessage)
'メッセージを出力
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>",errmessage,"</body></html>"
'ここでプログラム終了
END
END SUB
|
注意:ログファイル名がbbslog3.txtからbbslog4.txtに変更しています。また、CGIファイル名はbbs15.basです。
書込み時のprintを以下のように変更しました。
print #1,onamae,"<>",comment,"<>",email,"<>",url,"<>",time,"<>","\n"
新たにtimeを記録しています。
また、timeの後ろに\nが付くようになりurlの後ろに\nが付かなくなりましたので、
表示部分のIF url<>"http://\n"をIF url<>"http://"に変更しました
SPLITもdate,ip,uaを新たに追加しました。但し今回は表示はしていません。
5.書込み時刻を表示しよう、その前にFomatDate関数の説明
FormatDate("YEAR-0M-0D 0H:0M",time)
この関数は2006-01-10 01:45などというふうに現在の日付時刻を返します。
YEAR-0M-0D 0H:0Mの部分を変更する事で表示形式を変えられます。
| YEAR |
4桁の年 |
MON |
3文字の月(英語) |
DD |
日 |
HH |
時(24時間) |
| YY |
2桁の年 |
MM |
月 |
0D |
頭に0をつけた2桁の日 |
0H |
頭に0をつけた2桁の時(24時間) |
|
|
0M |
頭に0をつけた2桁の月 |
WDN |
3文字の曜日名(英語) |
hh |
時(12時間) |
|
|
|
|
0h |
頭に0をつけた2桁の時(12時間) |
| WEEKDAY-NAME |
曜日名(英語) |
mm |
分 |
am |
amまたはpmと表示(pmと同じ) |
| *MONTH-NAME* |
月名(英語) |
0m |
頭に0をつけた2桁の分 |
pm |
amまたpmと表示(amと同じ) |
|
例えば 4桁の年/2桁の月/2桁の日を表示したい場合は YEAR/0M/0D と指定すれば良いのです。
▼参考リンク
日付の取得
6.プログラム
-bbs16.bas-
#!/usr/bin/scriba
import cgi.bas
'commentが送信されているか?
IF cgi::POSTParam("comment") <> undef Then CALL kakikomi
'読み込みを表示
CALL yomikomi
'プログラムはここまで
END
'読み込み部分
SUB yomikomi
print "Content-Type: text/html; charset=euc-jp\n\n"
print """
<html><body>
<form action="bbs16.bas" method="POST">
お名前:<input type="text" name="onamae" size=20><br>
Email:<input type="text" name="email" size=20><br>
▼コメント<br>
<textarea name="comment" rows=4 cols=40></textarea><br>
URL:<input type="text" name="url" value="http://" size=50><br>
<input type="submit" value="送信">
</form>
"""
'読み込み部分(ファイルが存在する場合)
IF FILEEXISTS("bbslog4.txt") Then
open "bbslog4.txt" for input as 1
i=0
'最後までループ
while NOT(EOF(1))
'配列data[i]に代入
line input #1,data[i]
i=i+1
wend
close 1
'ループ開始
for a=i-1 to 0 STEP -1
'配列data[a]を取り出し
IF len(data[a])>0 Then
'分割:<>で分割
split data[a] by "<>" to onamae,comdata,email,url,date
'emailが書き込まれているか?
IF email <> "" Then
print "お名前:<a href=\"mailto:",email,"\">",onamae,"</a>"
ELSE
print "お名前:",onamae
END IF
print "<br>",comdata,"<br>"
'urlがhttp://以外なら
IF url<>"http://" Then print "<a href=\"",url,"\">",url,"</a>"
print "<br>書き込み時刻:",FormatDate("YEAR-0M-0D 0H:0M",date)
print "<hr>"
END IF
next
ELSE
print "ファイルがありません"
END IF
print "</html></body>"
END SUB
'書き込み部分
SUB kakikomi
'変数に代入
comment=cgi::POSTParam("comment")
onamae=cgi::POSTParam("onamae")
email=cgi::POSTParam("email")
url=cgi::POSTParam("url")
'HTMLタグの置換
comment=REPLACE(comment,"<","<")
comment=REPLACE(comment,">",">")
onamae=REPLACE(onamae,"<","<")
onamae=REPLACE(onamae,">",">")
email=REPLACE(email,"<","<")
email=REPLACE(email,">",">")
url=REPLACE(url,"<","<")
url=REPLACE(url,">",">")
'入力検査部分
IF onamae="" then CALL errormes("お名前が記入されていません")
IF comment="" then CALL errormes("コメントが記入されていません")
'文字数検査
IF len(comment)>1000 then CALL errormes("コメントが1000文字以下ではありません")
IF len(onamae)>30 then CALL errormes("お名前が30文字以下ではありません")
IF len(email)>64 then CALL errormes("Emailが64文字以下ではありません")
IF len(url)>128 then CALL errormes("URLが128文字以下ではありません")
'改行を<br>に
comment=REPLACE(comment,"\r\n","<br>")
comment=REPLACE(comment,"\r","<br>")
comment=REPLACE(comment,"\n","<br>")
'過去のデータをチェック
IF FILEEXISTS("bbslog4.txt") Then
open "bbslog4.txt" for input as 1
'最後までループ
while NOT(EOF(1))
'checkに代入
line input #1,check
'checkが存在するか?
IF len(check)>0 Then
'分割:<>で分割
split check by "<>" to check_onamae,check_comdata,check_email,check_url
IF comment=check_comdata then CALL errormes("過去に同じ内容の書き込みがあります")
END IF
wend
close 1
END IF
'書き込み
open "bbslog4.txt" for append as 1
'ロック
LOCK #1,write
print #1,onamae,"<>",comment,"<>",email,"<>",url,"<>",time,"\n"
'ロック解除
LOCK #1,release
close 1
print "Location:http://127.0.0.1/cgi-bin/bbs16.bas\n\n"
END
END SUB
'errormesサブルーチン
SUB errormes(errmessage)
'メッセージを出力
print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>",errmessage,"</body></html>"
'ここでプログラム終了
END
END SUB
|
CGIファイル名をbbs16.basに変更し、読み込み部分にprint "<br>書き込み時刻:",FormatDate("YEAR-0M-0D 0H:0M",date)を追加しました。
YEARは四桁の年,0Mは頭に0をつけた二桁の月,0Dは頭に0をつけた二桁の日, 0Hは頭に0をつけた二桁の時(24時間単位) 0Mは頭に0をつけた分です
引数2のdateはSPLITによって分割された変数です。
▼実行結果
 |
|