|
1.名前入力欄を作ってみよう!
名前入力欄を作ってみましょう。これで少しは掲示板らしくなると思います。
-bbs6.bas-
#!/usr/bin/scriba
import cgi.bas
'commentが送信されているか?
IF cgi::POSTParam("comment") <> undef Then
'変数に代入
comment=cgi::POSTParam("comment")
onamae=cgi::POSTParam("onamae")
'HTMLタグの置換
comment=REPLACE(comment,"<","<")
comment=REPLACE(comment,">",">")
onamae=REPLACE(onamae,"<","<")
onamae=REPLACE(onamae,">",">")
'改行を<br>に
comment=REPLACE(comment,"\r\n","<br>")
comment=REPLACE(comment,"\r","<br>")
comment=REPLACE(comment,"\n","<br>")
'書き込み
open "bbslog2.txt" for append as 1
'ロック
LOCK #1,write
print #1,onamae,"<>",comment,"\n"
'ロック解除
LOCK #1,release
close 1
END IF
print "Content-Type: text/html; charset=euc-jp\n\n"
print """
<html><body>
<form action="bbs6.bas" method="POST">
お名前:<input type="text" name="onamae" size=20><br>
<textarea name="comment" rows=4 cols=40></textarea><br>
<input type="submit" value="送信">
</form>
"""
'読み込み部分(ファイルが存在する場合)
IF FILEEXISTS("bbslog2.txt") Then
open "bbslog2.txt" for input as 1
'最後までループ
while NOT(EOF(1))
'dataに代入
line input #1,data
'dataが存在するか?
IF len(data)>0 Then
'分割:<>で分割
split data by "<>" to onamae,comdata
'出力
print "お名前:",onamae,"<br>",comdata,"<hr>"
END IF
wend
close 1
ELSE
print "ファイルがありません"
END IF
print "</html></body>" |
▼実行結果(サンプル)

実行してみて、色々と書き込んでみてください。
さて、プログラムの解説です。
IF cgi::POSTParam("comment") <> undef Thenでcommentが送信されているか調べます。
もしも送信されている場合、onamae=cgi::POSTParam("onamae")で変数onamaeに、名前入力欄のデータを代入しています。
onamae=REPLACE(onamae,"<","<")
onamae=REPLACE(onamae,">",">")で変数onamaeの<と>をエスケープしています。こうすることによりHTMLタグが入力されても
通常の文字として扱われ、HTMLタグとして扱われません。
print #1,onamae,"<>",comment,"\n"で書き込んでいます。onamaeとcommentを<>で区切っています。
<や>の文字はテキストフォームに入力してもエスケープされるようになっているので、区切りを間違えてしまう事はありません。
また、掲示板のログファイル名をbbslog.txtからbbslog2.txtに変更しました。
ここまでが書込み部分の変更です。表示部分の変更は以下の通りです。
フォームの送信先をbbs6.basに変更し、お名前:<input type="text" name="onamae" size=20><br>と
お名前の入力欄を追加しました。
読み込み部分にあるsplit data by "<>" to onamae,comdataでdataを<>でonamaeとcomdataに分割しています。
splitは文字列を区切り文字で分割する命令です。今回の区切り文字は<>です。
split 文字列 by 区切り文字 to 変数1,変数2 [,変数3〜〜]
print "お名前:",onamae,"<br>",comdata,"<hr>"で出力して終わりです。
▼参考リンク
文字列を加工しよう
2.Email入力欄とURL入力欄の追加
掲示板にお名前欄以外に欲しいのはEmail入力欄とURL入力欄でしょう。
ここではその二つを追加してみます。
-bbs7.bas-
#!/usr/bin/scriba
import cgi.bas
'commentが送信されているか?
IF cgi::POSTParam("comment") <> undef Then
'変数に代入
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,">",">")
'改行を<br>に
comment=REPLACE(comment,"\r\n","<br>")
comment=REPLACE(comment,"\r","<br>")
comment=REPLACE(comment,"\n","<br>")
'書き込み
open "bbslog3.txt" for append as 1
'ロック
LOCK #1,write
print #1,onamae,"<>",comment,"<>",email,"<>",url,"\n"
'ロック解除
LOCK #1,release
close 1
END IF
print "Content-Type: text/html; charset=euc-jp\n\n"
print """
<html><body>
<form action="bbs7.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("bbslog3.txt") Then
open "bbslog3.txt" for input as 1
'最後までループ
while NOT(EOF(1))
'dataに代入
line input #1,data
'dataが存在するか?
IF len(data)>0 Then
'分割:<>で分割
split data by "<>" to onamae,comdata,email,url
'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://\n" Then print "<a href=\"",url,"\">",url,"</a>"
print "<hr>"
END IF
wend
close 1
ELSE
print "ファイルがありません"
END IF
print "</html></body>" |

プログラムが長くなってきましたが、ほとんどの部分は以前と同じです。
変更した部分はわずかですので、長さに圧倒されず頑張りましょう!
こんなものは気持ちのもち具合で変わります。「うわぁ〜長い」と思わず
「うわぁ〜!こんな長いプログラム、自分でもわかるんだ!」と誇りにして下さい。
余談はさておき、プログラムを解説しましょう。
email=REPLACE(email,"<","<")
email=REPLACE(email,">",">")
url=REPLACE(url,"<","<")
url=REPLACE(url,">",">")
この四行で<と>をエスケープ処理しHTMLタグが入力されても通常の文字として扱われるようにしています
例によって<form>の送信先をbbs7.basに変更しています。
また、emailとurlの入力欄を作りました。url入力欄はvalue="http://"で初期表示文字をhttp://にしています。
残るは掲示板ログファイルをbbslog3.txtに変更したことと、表示部分の変更だけです。
表示部分のIF email <> "" Thenでemailが書かれているか調べています。 <>は一致する時、偽を返します。
つまり、emailが書かれていると真を表示するわけで、then以降のprint "お名前:<a href=\"mailto:",email,"\">",onamae,"</a>"
を実行します。<a>タグのhrefに"mailto:メールアドレス"を指定するとブラウザで指定したメールソフトを起動させることが出来ます。
メールアドレスが書かれていない場合はELSE以降を実行し、名前のみを表示します。
IF url<>"http://\n" Then print "<a href=\"",url,"\">",url,"</a>"はURLがhttp://\n以外の場合、真を返します。
urlの初期値はhttp://ですが、書込みの際、onamae,"<>",comment,"<>",email,"<>",url,"\n"と記事を区切る為、\nを最後
に追加します。http://のまま送信されたときはhttp://\nとして記録されてしまうわけです。
というわけで、urlを変更した場合のみthen以降を実行します。<a>タグのhrefにURLを指定することで
URLへのリンクが可能です。URLが変更されておらずhttp://の場合は偽となりますので何も表示しません。 |
|
|
|