• ベストアンサー

CGIについて

掲示板の機能を持たせたページを作成しています。 そこで、質問なんですが、投稿されたメッセージは指定フォルダにテキストファイルとして保存されますよね。 そこで、ページのトップに投稿されたメッセージのタイトルごとにリンクをはって、保存されている内容(投稿されたメッセージ)を読み出して、表示することが可能でしょうか? わかりにくい文章で申し訳ありませんが、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

これが自力で分かれば・・・ #!/usr/local/bin/perl require './jcode.pl'; $cgi = "ti.cgi"; $text = "text.txt"; $ENV{'TZ'} = "JST-9"; $time = time; # データ処理 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/\r\n|\r|\n/<br>/g; $value =~ s/\t//g; #フォーム変数へ $FORM{$name} = $value; } if ($FORM{'title'}) { &kakikomi; } elsif($FORM{'log'}) { &view; } &head; print <<HTML; <form action="$cgi" method="POST"> タイトル:<input type="text" name="title" size="30"><br> 本文<textarea name="com" cols="40" rows="5"></textarea><br> <input type="submit"> </form> HTML open(IN,$text); @text = <IN>; close(IN); foreach $ver (@text) { (@log) = split(/\t/,$ver); &totime($log[0]); print "<a href=\"$cgi?log=$log[0]\">$log[1]</a> <font size=\"-1\">$dete</font><br>"; } &foot; # 書込み sub kakikomi { open(IN,$text); @text = <IN>; close(IN); unshift(@text,"$time\t$FORM{'title'}\t$FORM{'com'}\n"); open(OUT,">$text"); print OUT @text; close(OUT); &head; print <<HTML; <p>書き込みました。</p> <a href="$cgi">もどる</a> HTML &foot; } # 表示 sub view { &head; open(IN,$text); @text = <IN>; close(IN); foreach $ver (@text) { (@log) = split(/\t/,$ver); if ($FORM{'log'} == $log[0]) { &totime($log[0]); print "$log[1] <font size=\"-1\">$dete</font><br>"; print "$log[2]<br>"; } } print "<a href=\"$cgi\">もどる</a>\n"; &foot; } sub head { print "Content-type: text/html\n\n"; print <<HTML; <html> <head> <title>掲示板</title> </head> <body> HTML } sub foot { print <<EOF; </body> </html> EOF exit; } # 時間処理 sub totime { ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time); $year +=1900; $month++; $year = sprintf("%04d", $year); $month = sprintf("%02d", $month); $mday = sprintf("%02d", $mday); $hour = sprintf("%02d", $hour); $min = sprintf("%02d", $min); $sec = sprintf("%02d", $sec); $dete = "$month/$mday $hour:$sec"; }

e_class
質問者

お礼

moon_nightさんの教えてくれたソース大変参考になりました。本当にありがとうございました。 なお、お礼の返事が遅れてすみませんでした。

その他の回答 (3)

  • ryo-3
  • ベストアンサー率37% (13/35)
回答No.3

確かにそうですね・・・ 確かにプログラミングを行い掲示板をカスタマイズすることになると思います。 CGIを作成する言語はどれも比較的簡単に憶えることができると思うので、僕自身も使っているperlなどどうでしょうか?他にもいろいろと言語はあるのですが・・・ 勉強なので少なからず時間は掛かると思いますが、頑張ってください!

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl.htm
e_class
質問者

お礼

ryo-3ありがとうございます。 私もperlを使用しています。 やはり、難しいですね。 でも、めげずにがんばっていこうと思います。 参考サイトURLありがとうございました。 参考にしてします。 これからも、質問すると思いますが、宜しくお願いいたします。

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.2

CGI初心者では無理です。 Perlをある程度熟知していて、掲示板の仕組みを理解していれば難しくないレベルです。 これは掲示板のカスタマイズ的な要素が強いので、この部分を書いた本やサイトっていうのはないと思います。 これを可能にするには、まずはじっくりPerl言語を理解された方がより、細かなカスタマイズを可能にできると思います。

e_class
質問者

お礼

kosaさん、ありがとうございます。 そうですか、カスタマイズ的な要素がつよいのですか。 でも、めげずにがんばってみます。 本当にありがとうございました。 また、質問するかと思いますが、その時は宜しくお願いいたします。

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.1

もちろん可能です

e_class
質問者

お礼

返信ありがとうございます。 CGI初心者なのですが、可能なのですか? 宜しければ、その方法やまたそれについて書かれてある参考サイトなどあればご教授願いたいのですが・・・。 よろしくお願いいたします。

関連するQ&A