- ベストアンサー
BBSに時間の挿入
下記の掲示板を改良したいと思っています。 http://www.interq.or.jp/blue/takariku/1floor/perl/bbs.html 投稿した時間を追加(わかるようにしたい)のですが どこの部分をどう変更すれば、よいのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは リンク先のものは leap_day,test1,leap_day,test2,・・・ などのように「名前,コメント,名前,コメント,・・・」のように保存しているので2つが1セットになっているためリンク先の54行目のようになっています リンク先を実行すると 名前 コメント 名前 コメント のような感じになっていると思います で今度は日付も一緒に保存していくようになるので3つが1セットになります 名前,日付,コメント,名前,日付,コメント,・・・ のように・・・ そのためリンク先では「$i*2」となっているところを「$i*3」と変えます 実行すると 名前 日付 コメント のように表示されると思います これを表示させるソースがお聞きになった部分です
その他の回答 (2)
- leap_day
- ベストアンサー率60% (338/561)
こんにちは リンク先を試してみたのですが >このソースを実行すると書き込み時、bbs.cgiを開くか保存するかきいてきてしまいます。 は出ませんでした・・・リンク先のソース以外に何か付け足してます?(??) もしくはbbs.cgi以外の名前で簡易掲示板(リンク先ソース)を保存してます? log.txtは用意しています?(メモ帳などで『名前をつけて保存』、ファイルの種類『すべてのファイル』、ファイル名『log.txt』で保存) あと$nameと$commentになぜか何も入らなかったので少々変更しました jcode.plは↓のページを参考にダウンロードしてください http://www.lrlab.to/rd/jcode.html ここから下を『bbs.cgi』として保存してください #!/usr/local/bin/perl # ライブラリー取り込み(僕は同じフォルダ内にjcode.plを入れているので↓こうなります。保存した先の相対パスなどで指定してください) # require './jcode.pl'; &decode; &html; sub html { print "Content-type: text/html\n\n"; print <<"EOM"; <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <title>簡易掲示板</title> </head> <body bgcolor="#00FF00"> EOM open(LOG,"<log.txt"); $yomiko=<LOG>; (@list)=split(/,/,$yomiko); close (LOG); if($ENV{'REQUEST_METHOD'}eq"POST"){ $name = $in{'name'}; $comment =$in{'comment'}; $ENV{'TZ'} = "JST-9"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $now =sprintf("%04d/%02d/%02d-%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min); #,(半角コンマ)の禁止 $name =~ s/,/、/g; $comment =~ s/,/、/g; #ログファイルの書き換え @list=("$name","$now","$comment",@list); for( $i=0 ; $i<30 ; $i++ ){ @kakiko = (@kakiko,$list[$i],",") } open (ANSWER, ">log.txt"); print ANSWER @kakiko; close (ANSWER); } print <<END; <h1>簡易掲示板</h1> <form method="POST" action="bbs.cgi"> <table> <tr><td>お名前</td><td> <input type="text" size="40" name="name"> </td></tr><tr><td>コメント</td><td> <textarea rows="5" cols="70" name="comment"></textarea> </td></tr></table> <input type="submit" value="送信"> <input type="reset" value="リセット"> </form> <hr> END # ↓のprint <<"EOM"~~EOM 内を変更すればデザイン変更できます # for( $i=0 ; $i<10 ; $i++ ){ print <<"EOM"; <b>$list[$i *3]</b> \ $list[$i *3 + 1] <blockquote>$list[$i * 3 + 2]</blockquote> <p> EOM } print "</body></html>\n"; exit; } sub decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } undef(%in); my @buf = split(/&/, $buf); foreach (@buf) { my ($key, $val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # SJISコード変換 &jcode::convert(\$val, 'sjis'); # エスケープ $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s/</</g; $val =~ s/>/>/g; $val =~ s/\r\n/<br>/g; $val =~ s/\r/<br>/g; $val =~ s/\n/<br>/g; $in{$key} = $val; } }
- leap_day
- ベストアンサー率60% (338/561)
こんにちは 25行目に $ENV{'TZ'} = "JST-9"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); my $now =sprintf("%04d/%02d/%02d-%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min); 27行目を @list=("$name","$now","$comment",@list); 28行目$i<20;を $i<30; 54行目を for( $i=0 ; $i<10 ; $i++ ){print "<b>$list[$i *3]</b>$list[$i *3 + 1]<blockquote>$list[$i * 3 + 2]</blockquote><p>\n"} でできると思いますが動作未確認です
お礼
回答ありがとうございます。 54行目の下の式の意味は何でしょうか・・・? for( $i=0 ; $i<10 ; $i++ ){print "<b>$list[$i *3]</b>$list[$i *3 + 1]<blockquote>$list[$i * 3 + 2]</blockquote><p>\n"}
お礼
わかりやすく回答して頂きどうもありがとうございます。 しかし、このソースを実行すると書き込み時、bbs.cgiを開くか 保存するかきいてきてしまいます。(書き込まれないのです) これは、下記の action先 が bbs.cgi から何かに 変更しなければいけないのでしょうか。 <h1>簡易掲示板</h1> <form method=\"POST\" action=\"bbs.cgi\">