• ベストアンサー

掲示板の文字色指定について

はじめまして。私は学生で超のつく初心者なのですが、課題で掲示板を作っています。 基本的な表示はなんとかうまくいったのですが、よくある、文字色を選択して好きな色で文章(コメント)を表示させるプログラムがわかりません。 if文を使うパターンではなく、色の情報を書き込み、ファイルからデータを読み込むやり方でできるらしいのですが、どうやって書いたらよいのでしょうか・・・。 ちなみにhtml表示部分に、色の指定はしてあり、赤、青、緑、黄色でvalueはred,blue,green,yellowにしています。 下に書き込みと読み込みの部分を乗せたのですがどう入れたらいいでしょうか。 本当に初心者だし分かっていないので説明もわかりにくくてすいません。もしどなたか分かる方いたらよろしくお願いします。 #------------------------------------------------------------ # 登録データ書き込み処理 #------------------------------------------------------------ sub writeData() { # $DATAFILEをオープンする open(FILE, ">> $DATAFILE") or die("error:$DATAFILE open error!"); eval{ flock(FILE, 2); }; $timestr = &getTimestr(); $in{'comment'} =~ s/\n/<br>/g; print FILE "$in{'namae'},$in{'dai'},$in{'comment'},$timestr,"; close(FILE); } #------------------------------------------------------------ # 登録データ読込み処理 #------------------------------------------------------------ sub readData() { # $DATAFILEをオープンする open(FILE, "< $DATAFILE"); eval{ flock(FILE, 2); }; while(<FILE>){ chomp; $line[$cnt++] = $_; } close(FILE); }

  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.2

Perl/CGIでしたら多少お力添えできそうです。 color情報をデータに書き込み、読み込むときにそのデータを取り出してタグの内部に利用してやれば良いかと思います。 主に読み込み時に一度配列にファイル内容を取り込み その後、split関数でデータを分けてtemp_dataという一時的な配列に格納、それを出力。みたいな感じでいかがでしょう。 動作テストしてないので動かないかもしれませんが、考え方の手助けになれれば幸いです。 HTML <form action="XXX.cgi" method="post"> NAME<input type="text" name="name" /> TITLE<input type="text" name="dai" /> <textarea name="comment">Please Type Any Comment!</textarea> COLOR red<input type="radio" name="color" value="red"/> blue<input type="radio" name="color" value="blue"/> green<input type="radio" name="color" value="green"/> <input type="submit" value="書き込み"> </form> とでもして CGI側 #書き込み処理 #------------------------------------------------------------ # 登録データ書き込み処理 #------------------------------------------------------------ sub writeData() { # $DATAFILEをオープンする open(FILE, ">> $DATAFILE") or die("error:$DATAFILE open error!"); eval{ flock(FILE, 2); }; $timestr = &getTimestr(); $in{'comment'} =~ s/\n/<br>/g; print FILE "\n$in{'namae'},$in{'dai'},$in{'comment'},$in{'color'},$timestr,"; #↑不要だったら先頭の\n消してください close(FILE); } # ファイル読み込み sub readData() { my @file_data=(); my @temp_data=(); # $DATAFILEをオープンする open(FILE, "< $DATAFILE"); eval{ flock(FILE, 2); }; @file_data = <FILE>; close(FILE); foreach(@file_data){ #@file_dataを元に一行毎に処理させます @temp_data = split(/,/); print "$temp_data[1] (by $temp_data[0] / $temp_data[4]) : <div style=\"color:$temp_data[3]\">$temp_data[2]</div>\n"; } }

kikko00
質問者

お礼

ご回答ありがとうございます。 なんかできそうな気がします。参考にさせていただきますね。 ありがとうございました!

その他の回答 (1)

  • nazotarou
  • ベストアンサー率46% (27/58)
回答No.1

HTLMの文字色をそのままコメントに付け加えたら? "<font color=red>"+コメント+"</font>" 文字連結って、+? .だっけ? にして書き込む。

kikko00
質問者

お礼

ご回答ありがとうございます。 文字連結とか知りませんでした。参考にさせていただきます。 ありがとうございました!

関連するQ&A

  • 新しいログの書き込み

    新しいログを追加で上に書き込む方法はどのようにしたらよいのかアイディアがありません。 ご教授願います。 if($mode eq "html"){ flock(FH, LOCK_EX); open(FH,"${datafile}"); @html = <FH>; close(FH); flock(FH, LOCK_NB); $html = join('',@html); @html = split(/$chtml/ , $html); $html[1] = $data; $html = join($chtml,@html); flock(FH, LOCK_EX); open(FH,">$datafile"); print FH $html; close(FH); flock(FH, LOCK_NB);

  • どうやればいいのかわかりません><;

    あるプログラムを完成させたいんですが、 以下の部分がうまくいきません。 foreach $del_word ( @del){ if ( "$FORM{'sub_product'}" =~ /$del_word/){ open(IN, ">>./csv/log.csv") or printErrorPage("エラー"); eval{ flock (FILE, 2) }; seek(IN, 0, 2); print IN "$in"; close(IN); { exit; } } } 簡単に説明しますと、 @delは1行に1単語(例えば「時計」など)ずつ約10行ほど入力したdel.csvファイルの内容が入っています。 ちなみにそこの部分は open(OUT, "./csv/del.dat") or printErrorPage("エラー"); eval{ flock (OUT, 1) }; @del = <OUT>; close OUT; です。 そして、どういった作業をしたいかというと、 この$FORM{'sub_product'}に入っているワードに@delに収納されているワードがひとつでもマッチする場合、 $inという文章をlog.csvに書き込むというプログラムです;; 初心者なのですが、どなたかアドバイスいただけたらと思います!!どうぞ宜しくお願いしますーっm(_)m

    • ベストアンサー
    • CGI
  • ログの一部を消す Perl

    ログの一部を消すPerlを考えています。 ここではソースを短くするために、ログの一部を消し去って ログファイルに上書きするデータは $deta だけだとすると open F, '+<a.log'; flock F,2; $deta = <F>;//実際はここでもっと処理 truncate F,0; seek F,0,0; print F $deta; close F; と、 open IN, 'a.log'; flock IN,2; open OUT, '>a.log'; flock OUT,2; $deta = <IN>;//実際はここでもっと処理 print OUT $deta; close OUT; close IN; の2つを考えました。 上のように 読み込み と 書き込み を同時にやった方がいいのか 下のように分けてやった方がいいのか教えてください。 ロックは flock を使って、普通レベルのロックが できるぐらいでいいと思っているんだけど、 この flock の書き方でおかしいところがあれば 教えてください。

    • ベストアンサー
    • CGI
  • スマホ用PHP掲示板

    PHPで掲示板を簡易的に作ったのですが スマートフォン(iPhone)にも対応したく思います。 端末用にコーティングするにはどのような記述をしたら良いでしょうか。 【ソース】 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ <html> <head><title>TEST</title></head> <body> <p>掲示板</p> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"> </textarea><br><br> <input type="submit" name="btn1" value="投稿する"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } readData(); function readData(){ $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); $data = "<hr>¥r¥n"; $data = $data."<p>投稿者:".$personal_name."</p>¥r¥n"; $data = $data."<p>内容:</p>¥r¥n"; $data = $data."<p>".$contents."</p>¥r¥n"; $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } ?> </body> </html> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ご教示の程宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 文字化け対策

    sjisで保存されたファイルを読み込んで、別ファイルに書込みを行ったところ、能等の文字が文字化けを起こしました。 open(IN,"$file"); my $data = <IN>; close(IN); $data=~s/\\//g; open(OUT,">$file2"); print OUT $data; close(OUT); 莫大なソース量だったので、原因を探すのに時間がかかりましたが、一つ一つ消去しながら探したところ、 $data=~s/\\//g; これを消すことで解消しました。 文字化けさせずに\を消すにはどのように書けばいいのでしょうか?

    • ベストアンサー
    • Perl
  • perlプログラム

    (1)のプログラムではtest.txtの内容を表示することができました。 (2)ではaaaが表示されつづけると思いますが、何も表示されません。 なにかまちがっていると思いますが、わかりません。 よろしくお願いします。 --------------------------------------------------------------------------------- (1) --------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print $_; last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); ------------------------------------------------------------------------------- (2) ------------------------------------------------------------------------------- sub Main() { LAST:while(){ if(defined(open(FILE,"test.txt"))){ flock(FILE,1); while(<FILE>){ print "aaa";  ←変更箇所 last LAST if($_ == 0); } } sleep(1); } close(FILE); } &Main(); -------------------------------------------------------------------------------

  • アクセスカウンターでデータが削除されてしまう。

    プログラムのアクセスカウンターをするプログラムを作成しましたが、アクセスカウンターのデータが消去されてしまいます。 プログラム抜粋 (ここから) #アクセスカウンターカウント数計上ロジックを入れる $data = ""; open(IN11,"$countcsv") || &error(" countcsv をopen出来ません"); flock(IN11,1); while($lines11 = <IN11>) { ($seq,$acc) = split("\,", $lines11); if ($page == $seq) {$acc = $acc +1; } $data .= "$seq,$acc\n" } close(IN11); open(IN21,">$countcsv")|| &error(" countcsv をopen出来ません"); flock(IN21,2); print IN21 "$data"; close(IN21); (ここまで) count.csvの構成は以下のようになってます。 (ここから) 1,0 2,0 3,0 4,0 5,0 6,0 7,0 8,0 9,0 10,0 (ここまで) カウンターを計測するデータ(行数)が多いと、データが全てなくなってしまいます。 ファイルロックの方法に問題があると思ってますが、どこが悪いのかがわかりません。 ご教授いただけますと助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • メッセージが上に追加される掲示板

    Perl超初心者ですが、お願いいたします。 掲示板(本当は、友人の原稿をホームページに自分で載せてもらうスクリプト)を、だいたい以下のように組んでみました。 require "cgi-lib.pl"; require "jcode.pl"; $naiyou = $in{"naiyou"}; &ReadParse;&jcode'convert(*naiyou,"euc"); $datafile="data.txt"; $tempfile="hokan"; open (TEMP,">$tempfile"); print TEMP "<font size=\"2\">$naiyou</font>"; open(DATA,"$datafile"); while (<DATA>) { print TEMP $_; } close(DATA) ; close(TEMP) ; rename($tempfile,$datafile); ところが、ローカルでは動いたものの、私が借りた、CGIを使える無料のサーバーでは、パーミッションを777に設定できません。(詳しい説明がないのですが、他のユーザーに書き込み権限を与える設定はどれも駄目そうです) そこで、リネームを使わないで、上に追加していくスクリプトを作れないものでしょうか。無理ですか? サンプルがあるホームページなどを紹介していただけるとうれしいです。

    • ベストアンサー
    • Perl
  • Perl BBS掲示板 サーバ側のファイル削除

    いつもお世話になっております。 サーバ側のファイルを削除したいのですが、 どのようにすればいいのでしょうか・・・? #-----------------------------------------DELETE sub deletedata { use CGI; my $form = new CGI; my $tm = time; my $DELETE = $form->param('pass'); my $NO = $form->param('no'); my $NAME = TransFormdata($form->param('name')); my $TITLE = TransFormdata($form->param('title')); my $TEXT = TransFormdata($form->param('text')); my $img = TransFormdata($form->param('img')); open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; my $DELETE = $form->param('pass'); my $NO = $form->param('no'); if(length $NO == 0) {} elsif($DELETE eq $PASSWORD) { deleteImg($NO); splice @DATA, $NO, 1; } else{} open(FILE, ">$FILE") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; &endform } #-----------------------------------------DELETE #-----------------------------------------UPFILEDELETE sub deleteImg { my ($NO,$tm,$NAME,$TITLE,$TEXT,$imgname) = split(/,/, $DATA[$_[0]]); $filename = $DIR . $imgname; if(-e $imgname) { unlink $filename; } } #-----------------------------------------UPFILEDELETE ラジオボタン選択 ↓ パスワード入力 ↓ 削除ボタン ↓ 削除 この段階で テキストファイルの指定行は削除されているのですが、 画像が投稿され、サーバー側に残っているファイルも削除させたいのです。 Unlinkを使うとなっていたのですが・・・わからないです。 どうかご教示お願い致しますm(;;)m

    • ベストアンサー
    • Perl
  • Perl オープン関数について

    Perl オープン関数について いつもお世話になっております。 オープン関数でわからないことがあるのでご教示お願い致します。 ■test.cgi■ open(FILE, ">sled/$log") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; ■bbstest.cgi■ open(FILE, ">>sled/$loglog") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; 上記のtest.cgi側では「>」これが1個で書き込まれるのですが bbstest.cgi側では「>」これ1つだけですと、すべての内容がリセット され、その時入力した内容だけ残ります。 それを「>>」にすると追加はされるのですが、 test.cgi側では 上へ上へと内容は追加されていくのに対し bbstest.cgi側では 下へ下へ追加されていきます。 書込方法は、両方共 unshift(@DATA,"$NO,$tm,$TITLE,$TEXT,$PASS,$IP\n"); このようにしているのですが、 なぜ、同じ処理で、書込方法がかわるのでしょうか? 目的は上へ上へがいいのですが。。。

    • ベストアンサー
    • Perl