掲示板に投稿編集機能を付けたい

このQ&Aのポイント
  • 掲示板に投稿編集機能を追加する方法を教えてください
  • 投稿編集機能を実装するためのコードを追加する方法を教えてください
  • 掲示板の投稿編集機能を作成する方法を教えてください
回答を見る
  • ベストアンサー

掲示板に投稿編集機能付けたい

jewel http://www.groo-web.com/jewel.html こちらの掲示板を独学でカスタマイズして使ってますが、 投稿編集機能が無いので、付けようと奮闘しています。 書き込み時にデフォルトで削除PASSを入力するようになっています。 それを利用して投稿編集機能を付けたいのですが、 ご教授願います。 以下がユーザーの記事削除処理の部分ですが、 elsif ($in{'action'} eq 'usr_kill') { &kill_action; }##←始めの部分 記事表示部分↓↓↓ <FORM method="$method" action="$cgifile"> <INPUT type="hidden" name="action" value="usr_kill"> <INPUT type="hidden" name="sex" value="$in{'sex'}"> <BR> <TABLE cellspacing="0" width="200" border="0"> <TR align="left"><TD nowrap colspan="3"><B>【記事削除フォーム】</B></TD></TR> <TR><td nowrap align="right">記事No/</TD> <TD><input size="4" type="text" name="number"></TD></TR> <TR><td nowrap align="right">パスワード/</TD> <TD nowrap><INPUT size="10" type="password" name="pass"> <INPUT type="submit" value="削除"></TD></TR> </TABLE></FORM> 下の方にあるルーチン↓↓↓ ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ユーザー記事削除処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub kill_action { if ($in{'number'} eq "") { &error("記事Noを入力してください"); } elsif ($in{'number'} =~ /\D/) { &error("記事Noは半角数字で入力してください"); } elsif ($in{'pass'} eq "") { &error("パスワードを入力してください"); } &lock1; if ($in{'sex'} eq '0') { &mens_read("lock2"); } elsif ($in{'sex'} eq '1') { &ladys_read("lock2"); } #--パスワードを暗号化--# $crypted = crypt($in{'pass'}, "xx"); #--削除対象データが見つかるまでループ--# $flag1 = 0; $flag2 = 0; foreach $line (@DATA) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/, $line); if ($in{'number'} eq "$no") { $flag1 = 1; chomp $m_pass; if ($crypted eq "$m_pass" || $in{'pass'} eq "$master_key") { $flag2 = 1; $line =~ s/.*\n//; last; } else { &lock2; &error("パスワードが一致しません"); } } } #--削除対象Noが見つからなかった場合のエラー処理ー--# unless ($flag1) { &lock2; &error("記事No$in{'number'}が見つかりません"); } if ($flag2) { if ($in{'sex'} eq "0") { if (!open(OUT,">$mensfile")) { &lock2; &error("$mensfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } elsif ($in{'sex'} eq "1") { if (!open(OUT,">$ladysfile")) { &lock2; &error("$ladysfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } &lock2; #--削除に成功したら完了メッセージを表示--# &html_head; &title; print <<"HERE"; <CENTER><TABLE width="560"> <TR><TD bgcolor="$top_t_bgc"><CENTER> <FONT color="$top_t_color"><B>削除完了!</B></FONT> </CENTER></TD></TR></TABLE><BR><BR> <FORM method="post" action="$cgifile"> <TABLE cellspacing="0" cellpadding="5" border="1"> <TR><TD nowrap bgcolor="#ffffd9" align="center"> <B>記事No$in{'number'}を削除しました。</B><BR><BR> <INPUT type="submit" value=" TOP "></TD></TR> </TABLE></FORM> HERE &html_footer; exit; } exit; } これに以下を追加して作ることは可能なんでしょうか? elsif ($in{'action'} eq 'edit') { &edit; } または elsif ($in{'action'} eq 'edit2') { &edit2; } なんとかできるように教えて下さい。お願いします。

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

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

削除と再登録が簡単に出来れば修正と同じことだと思いますので、 elsif ($in{'action'} eq 'edit') { &edit; } を追加したらeditの内容は kill_actionの削除処理を行った後に削除したデータを基にvalueやselectedを使って入力済みの状態にしたin_dataの処理を入れたらOKだと思います

master999
質問者

お礼

お名前入れるの忘れてしまいました。申し訳ありません。 無事に修正機能を付けることに完成致しました! 少しだけ表示をアレンジして、インライン・フレームの中に取り込めました。 本当に一から教えて頂いて、本当に勉強になりました。 pipipi523さん、本当に有難うございました。 しかし、たかが修正機能と思いきや、 こんなに長い記述が必要だったとは驚きました。 現在まで独学で三年掛けて、HTML、CSS、JavaScript、ホームページビルダー、 ムーバブルタイプ、ムーバブルタイプ・カスタマイズとマスターして来て、 先月に初めて本格的にCGIに手を付け出してここまで来ましたが、 簡単なように見えて、このCGI(Perl)が一番手こずっていることに気づきました。 事情があって書籍も買いに行けず、ネットだけでやって来ましたが、 今回これほどの作業を完成させることができたのは、pipipi523さんのお陰です。 やはり、pipipi523さんがそれ程詳しいのは、その筋の学校出か、お仕事なのでしょうか? 独学でそこまで来られたとしたら、余程の頭脳の持ち主とお察し致します。 これで、ほぼ全ての機能を取り込むことができ、 素晴らしい掲示板になったと感じております。 本当に有難うございました。 私も、困っている方にアドバイスして上げられるよう、 もっともっと磨きを掛けて勉強して行こうと思った次第です。 今回は、pipipi523さんの貴重なお時間を費やして頂いて、 本当に有難うございました!(^^)/ あと一つだけ、 デザイン的なことに関してどうしてもできないことが発生したのですが、 それはまた新しい質問として載せたいと思います。 もし、お暇があれば、アドバイスの程、宜しくお願い致します。 今回は、本当に有難うございました。 まさに、私の中で、本当の勇者様です。 今後とも、お体に気を付けて頑張って下さい!(^^)/

master999
質問者

補足

レス有難うございます。 しかし、初心者なもので、 どういうふうに入れれば良いのか↓↓↓ >kill_actionの削除処理を行った後に削除したデータを基に >valueやselectedを使って入力済みの状態にしたin_dataの処理を >入れたらOKだと思います。 ちなみに、個別の削除画面というのは出ず、投稿欄の下にある窓に削除パスと記事番号を入れると、そのまま削除されるようになっています。 修正というと記事個別の画面が必要なのではないでしょうか? editのルーチンを作らないと駄目なんでしょうかねえ・・? できれば文で詳しく説明して、 そのままコピヘできるようにしてもらいたいです。 わがままで申し訳かりませんが、お願いします。

関連するQ&A

  • 掲示板に投稿編集機能付けたい

    質問の補足ができないので、新たに掲載します。 掲示板に投稿編集機能が無いので、付けようと奮闘しています。 書き込み時に削除PASSを入力するようになっています。 それを利用して投稿編集機能を付けたいです。 以下がユーザーの記事削除処理の部分ですが、 elsif ($in{'action'} eq 'usr_kill') { &kill_action; }##←始めの部分 記事表示部分↓↓↓ <FORM method="$method" action="$cgifile"> <INPUT type="hidden" name="action" value="usr_kill"> <INPUT type="hidden" name="sex" value="$in{'sex'}"> <BR> <TABLE cellspacing="0" width="200" border="0"> <TR align="left"><TD nowrap colspan="3"><B>【記事削除フォーム】</B></TD></TR> <TR><td nowrap align="right">記事No/</TD> <TD><input size="4" type="text" name="number"></TD></TR> <TR><td nowrap align="right">パスワード/</TD> <TD nowrap><INPUT size="10" type="password" name="pass"> <INPUT type="submit" value="削除"></TD></TR> </TABLE></FORM> 下の方にあるルーチン↓↓↓ ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> ユーザー記事削除処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub kill_action { if ($in{'number'} eq "") { &error("記事Noを入力してください"); } elsif ($in{'number'} =~ /\D/) { &error("記事Noは半角数字で入力してください"); } elsif ($in{'pass'} eq "") { &error("パスワードを入力してください"); } &lock1; if ($in{'sex'} eq '0') { &mens_read("lock2"); } elsif ($in{'sex'} eq '1') { &ladys_read("lock2"); } #--パスワードを暗号化--# $crypted = crypt($in{'pass'}, "xx"); #--削除対象データが見つかるまでループ--# $flag1 = 0; $flag2 = 0; foreach $line (@DATA) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/, $line); if ($in{'number'} eq "$no") { $flag1 = 1; chomp $m_pass; if ($crypted eq "$m_pass" || $in{'pass'} eq "$master_key") { $flag2 = 1; $line =~ s/.*\n//; last; } else { &lock2; &error("パスワードが一致しません"); } } } #--削除対象Noが見つからなかった場合のエラー処理ー--# unless ($flag1) { &lock2; &error("記事No$in{'number'}が見つかりません"); } if ($flag2) { if ($in{'sex'} eq "0") { if (!open(OUT,">$mensfile")) { &lock2; &error("$mensfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } elsif ($in{'sex'} eq "1") { if (!open(OUT,">$ladysfile")) { &lock2; &error("$ladysfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } &lock2; #--削除に成功したら完了メッセージを表示--# &html_head; &title; print <<"HERE"; <CENTER><TABLE width="560"> <TR><TD bgcolor="$top_t_bgc"><CENTER> <FONT color="$top_t_color"><B>削除完了!</B></FONT> </CENTER></TD></TR></TABLE><BR><BR> <FORM method="post" action="$cgifile"> <TABLE cellspacing="0" cellpadding="5" border="1"> <TR><TD nowrap bgcolor="#ffffd9" align="center"> <B>記事No$in{'number'}を削除しました。</B><BR><BR> <INPUT type="submit" value=" TOP "></TD></TR> </TABLE></FORM> HERE &html_footer; exit; } exit; } これに対しての回答が下記の一件ですが、 ↓↓↓ 削除と再登録が簡単に出来れば修正と同じことだと思いますので、 elsif ($in{'action'} eq 'edit') { &edit; } を追加したらeditの内容は kill_actionの削除処理を行った後に削除したデータを基にvalueやselectedを使って入力済みの状態にしたin_dataの処理を入れたらOKだと思います ~とのことですが、 プルダウンで選択させているところなどはどうすればいいのでしょう。 あらたにeditのルーチンを作ったとして、 どこからどこを追加して、何を記述してどうやって作れば良いか分かりません。 ズバッと回答して下さる勇者様はおりませんか?

    • ベストアンサー
    • CGI
  • 掲示板に投稿編集機能付けたい

    掲示板に投稿編集機能付けたい http://okwave.jp/qa2963467.html 追加質問をどうやってすればいいのか分からないので、また質問させて頂きます。 前回教えて頂いたのを四苦八苦して何度もやり直ししたあげく、 なんとか修正画面を出せるようになりましたが、、 修正画面から戻るボタンを押すと記事が見当たらないと表示されてします。 どうやら、edit機能が効いてなく、飛んだ瞬間に削除が働いている気がします。 #--修正対象データが見つかるまでループ--# $flag1 = 0; $flag2 = 0; foreach $line (@DATA) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/, $line); if ($in{'number'} eq "$no") { $flag1 = 1; chomp $m_pass; if ($crypted eq "$m_pass" || $in{'pass'} eq "$master_key") { $flag2 = 1; $line =~ s/.*\n//; last; } else { &lock2; &error("パスワードが一致しません"); } } } #--修正対象Noが見つからなかった場合のエラー処理ー--# unless ($flag1) { &lock2; &error("記事No$in{'number'}が見つかりません"); } if ($flag2) { if ($in{'sex'} eq "0") { if (!open(OUT,">$mensfile")) { &lock2; &error("$mensfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } elsif ($in{'sex'} eq "1") { if (!open(OUT,">$ladysfile")) { &lock2; &error("$ladysfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } &lock2; しかも、修正画面にそれぞれの箇所が反映されません。 print <<"HERE"; <TR><TD nowrap align="right">会員ID/</TD><TD nowrap> <INPUT type="text" name="id" size="10" value="$id"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">お名前/</TD> <TD nowrap><INPUT type="text" size="24" name="name" value="$name"> <INPUT type="radio" name="sex" value="0">男性 <INPUT type="radio" name="sex" value="1">女性</TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">E-mail/</TD> <TD nowrap><INPUT type="text" size="48" name="email" value="$email"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">希望する相手/</TD> <TD nowrap><INPUT type="text" size="29" name="risou" value="$risou"> <SELECT name="hoop"> <OPTION selected>男女ともに</OPTION> <OPTION value="男性のみ">男性のみ</OPTION> <OPTION value="女性のみ">女性のみ</OPTION></SELECT></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">タイトル/</TD> <TD nowrap><input type="text" size="46" name="title" value="$title"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right" valign="top">メッセージ/</TD> <TD nowrap><TEXTAREA name="comment" rows="10" cols="53" value="$comment"></TEXTAREA></TD></TR><BR> HERE print <<"HERE"; <TR><TD align="right">メール制限/</TD><TD nowrap> <SELECT name="max"> <OPTION value="0" selected>制限なし</OPTION> <OPTION value="5">5通まで</OPTION> <OPTION value="10">10通まで</OPTION> <OPTION value="20">20通まで</OPTION> <OPTION value="30">30通まで</OPTION> <OPTION value="40">40通まで</OPTION> <OPTION value="50">50通まで</OPTION> </SELECT></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right"></TD> <TD nowrap colspan="2"> <INPUT type="submit" value=" 書込する "><INPUT type="reset" value="リセット"> </TD></TR></TABLE><BR> </FORM> HERE &html_footer; exit; } exit; } このような記述で画面は出せました。 もう悩み過ぎて禿げそうです。 どうやったら正常な修正機能を追加できるでしょうか?

    • ベストアンサー
    • CGI
  • CGI掲示板カスタマイズ~メッセージ送信の上にプロフを付けたい。

    現在、CGI掲示板のカスタマイズ中ですが、この掲示板は、投稿者の名前をクリックすると、メッセージ送信フォームが出るようになっています。 そこでこの送信フォーム画面の上部に、その投稿者の文章を表示したく、観覧処理や出力処理の中から必要そうな記述を抜き出し、送信フォーム表示処理の中のルーチンに取り込み、なんとか表示させることには成功したのですが、、その人物の投稿内容ではなく、なぜか1番目の投稿者の内容なのです。以下がそのメッセージ送信フォーム表示処理の内容です。 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ## SUB >>> メール送信フォーム表示処理 ###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sub mailform { if ($in{'sex'} eq '0') { if(!open(IN,"$mensfile")) { &error("$mensfile ファイルオープンエラー"); } } elsif ($in{'sex'} eq '1') { if (!open(IN,"$ladysfile")) { &error("$ladysfile ファイルオープンエラー"); } } if ($in{'sex'} eq "0") { $word_color = "$boy_color"; } elsif ($in{'sex'} eq "1") { $word_color = "$girl_color"; } if ($in{'sex'} eq "0") { $word_color = "$boy_color"; } elsif ($in{'sex'} eq "1") { $word_color = "$girl_color"; } if ($in{'sex'} eq "0") { $image = "image/otoko.gif"; } elsif ($in{'sex'} eq "1") { $image = "image/onna.gif"; } #--生年月日から年齢を計算--# $nenrei = ""; unless ($noage) { $nenrei = $year - $age_y; if ($age_m > $month) { $nenrei = $nenrei - 1; } if ($age_m == $month) { if ($age_d > $mday) { $nenrei = $nenrei - 1; } } } #--メール送信可能数の設定--# if ($max) { $max = "$max通まで"; } else { $max = "無制限"; } $i = 0; $allno = 0; while (<IN>) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/,); ($age_y,$age_m,$age_d,$noage) = split(/<>/, $age); ($street,$title) = split(/<>/, $state); $i++; $allno++; if ($i < $start) { next; } if ($i > $end) { next; } if ($in{'sex'} eq '0') { $name_color = "$m_namecolor"; } if ($in{'sex'} eq '1') { $name_color = "$l_namecolor"; } &member_view; } close(IN); ~~~~↑↑↑追加部分↑↑↑~~~~~~~~ &html_head; &title; print <<"HERE"; <TABLE width="580"> <TR><TD bgcolor="$top_t_bgc"><CENTER> <FONT color="$top_t_color"><B>メッセージ送信フォーム</B></FONT> </TD></TR></TABLE> ~~~~↓↓↓追加部分↓↓↓~~~~~~~~ <TABLE width="98%" cellspacing="0" cellpadding="5" border="$table_border"> <TR><TD bgcolor="$table_bgc"> ■<FONT color="$title_color">[<B>$no</B>] <B>$title</B></FONT><BR> ■お名前/ <B>$name</B>さん $date<BR> ■住所/ $street 年齢/ $age_y年$age_m月$age_d日生まれ($nenrei歳)<BR> ■希望/ $risou <FONT color="$word_color">[$hoop]</FONT> ■メール制限数/ <FONT color="$word_color">[$max]</FONT><BR> <FONT color="$word_color">$comment</FONT></TD></TR></TABLE> <TABLE height="$kiji_sp" border="0"><TR><TD></TD></TR></TABLE> HERE ~~~~↑↑↑追加部分↑↑↑~~~~~~~~ 以下は元からある送信フォーム。文字数オーバーのため省略 ~~~ここまでが送信処理のルーチンですが、 この上部の方の記述をどう記したら、その人物の投稿文が出せるのか、宜しくお願い致します。

    • ベストアンサー
    • CGI
  • 削除する記事が存在しない場合の処理

    投稿すると自動的にその投稿に対して記事番号なるものが割り当てられ、 その記事番号と自分で投稿時に決めた削除パスワードで 自分の投稿を削除する形式の掲示板なのですが パスワードや記事番号が入力されていない場合には 〇〇〇が入力されていませんと表示されるにもかかわらず 存在しない記事番号が入力して削除しようとすると 「正常に削除いたしました」と表示されてしまいます。 (実際には存在しない記事番号なので何も削除されていないのですが) そこで下記のようにの#~#の部分を追加で記述し、 記事番号が存在しない場合にエラーとなるようにしてみたのですが これで本当にいいのか正直不安なのです。 正しいかチェックしていただけませんか? @new=(); open (IN,"$file") || error("システムエラー","ファイル「$file」を開くことができません。"); while($data = <IN>) { $flag=0; ($no,$res,$date,$cntr,$email,$tall,$weight,$age,$sub,$com,$live,$select,$photo,$pw) = split(/<>/,$data); if ($FORM{'pass'} eq "$ad_pass") { foreach $del (@DEL) { if ($no eq "$del") { $flag=1; last; } } } else { if ($FORM{'del'} eq "$no") { if (!($pw)) { &error("入力エラー","指定された記事には削除キーが設定されていません。"); } if (crypt($FORM{'pass'},$pw) ne "$pw") { &error("入力エラー","パスワードが間違っています。"); } $flag=1; } #記事番号が存在しない時、エラーを表示追加 if ($FORM{'del'} ne "$no") { if (crypt($FORM{'pass'},$pw) ne "$pw") { &error("入力エラー","記事番号が存在しません。記事番号を確認して入力し直してください。"); } } #ここまで } if ($flag == 0) { push(@new,$data); } } close (IN);

    • ベストアンサー
    • Perl
  • 掲示板CGIで古い順ではなく新着順で表示させたい

    【CGI名】簡易データベース 【配布先】http://www.rescue.ne.jp/cgi/database/(cgirescue) 仕様では古い順に表示されるのですが、 それを新着順で表示したいのです。 以下の部分を編集すれば良いと思うのですが、どなたかお願いしますm(__)m もし、この部分以外の変更が必要な場合は、大変ご面倒ですが、 上記サイトからダウンロードお願いします。 宜しくお願いします。 foreach $data (@NEW) { ($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data); print "<tr>\n"; print "<td nowrap>$DATE</td>\n"; print "<td nowrap>$NAME</td>\n"; print "<td nowrap><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "<td nowrap><center>$SEX</center></td>\n"; print "<tdnowrap><center>$AGE</center></td>\n"; print "<td nowrap>$HANDLE</td>\n"; print "<td nowrap>$PREF</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; }

    • ベストアンサー
    • CGI
  • 掲示板で親のデータを子に反映させる方法

    スミマセン。基本だと思いますが、教えてください。 Joyful系の掲示板のファイルなのですが、 各記事の親記事にある特定のデータを、 取り出す方法を教えて下さい。 5<>IP<>1234567890<> 3<><>2012/01/12(Thu) 08:42<>ウサギ<>Yahoo<> 5<>3<>2012/01/12(Thu) 09:04<>ネコ<><> 1<><>2012/01/12(Thu) 08:41<>イヌ<>Google<> 2<>1<>2012/01/12(Thu) 08:41<>ウサギ<><> 4<>1<>2012/01/12(Thu) 09:03<>タヌキ<><> こんな感じで、データが記入されるdatファイルがあります。 「1のレスが2・4」「3のレスが5」です。 それで、親記事に「Yahoo」や「Google」というデータが入っているので、 親記事1にレスしてる2・4でも、 親記事に入ってる「Google」といった文字を反映したいのです。 うまく伝えられ無いので、画像にしてみましたので見てやって下さい。 私が見てるプログラムでは、 レスはレスで、「Google」等の文字を探してしまっているので、望む形にならないのです; どうぞ、よろしくお願いします! ↓ざっくり。この辺りの最初の方に、親だけ読み込んで、$search1 とかに、セットできないかと考えています。 ★━━━━━━━━━━━━━━━━━━━━★ local($ipt,$wh,$i,$flag); # 記事を展開 open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; $i=0; $x=1; $flag=0; # ソート無し:必要最小限だけ読み込み if(!$sort && !$threadsuu){ while(<IN>){ if((split(/<>/))[1] eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } push(@DATA,$_); } } # ソート無し、スレッド表示有り elsif(!$sort && $threadsuu){ @DATA = <IN>; } # ソート有り:全データを読み込んでソート実行 else{ @DATA = <IN>; if($sort == 1){ &ressort; } if($sort == 2){ &nosort; } } close(IN); # 新着スレッドを表示 if($threadsuu || $up_down){ &thread; } # レスの表示制限をする場合には、配列を改造 if($max_res){ &omit; } foreach(@DATA){ ($no,$reno,$date,$name,$mail,$search) = split(/<>/); # ページ処理 if($sort || $threadsuu){ if ($reno eq "") { $i++; } if ($i < $page + 1) { next; } if ($i > $page + $p_log) { next; } } if (!$reno && $flag) { print "</td></tr></table><br><br>\n\n"; $flag=1; } if (!$reno) { print "<table class=\"table1\" align=\"center\" cellspacing=0 cellpadding=2>\n<tr><td>"; $flag=1; } if ($reno && $line_color) { print "<hr noshade size=1 width='85%' color=\"$line_color\">\n"; } print "<table width=100% border=0 cellpadding=2 cellspacing=0>\n<tr>"; if ($reno) { print "<td rowspan=2 width=40><br></td>"; } if($line_color){ print"<td>"; } elsif($reno){ print"<td class=\"b2\">"; } else{ print"<td class=\"b1\">"; } if (!$reno) { print "<span class=\"sub\"> <font color=\"$t_color\"><b>$sub </b></font></span>";} else { print "Re:<font color=\"$t_color\"><b>$sub </b></font></span>";} if($search == "yahoo") { print "投稿者:<span class=\"name\">$name</span> yahooで検索";} elsif($search == "google") { print "投稿者:<span class=\"name\">$name</span> Googleで検索";} else { print "投稿者:<span class=\"name\">$name</span> その他で検索";}

    • ベストアンサー
    • Perl
  • KENTさんの掲示板のワード検索について

    http://www.supra.cx/joyful2chMe/index.html こちらのjoyful2ch.cgiの1071行目からのワード検索で、 検索対象を親記事のみにしたいのですが、どうすればよいでしょうか。 ログの中の$reno=""が親記事のようなのですが・・ # ファイルを読み込み @new=(); open(IN,"$logfile") || &error("Open Error : $logfile"); $top = <IN>; while (<IN>) { $flag=0; foreach $pair (@pairs) { if (index($_,$pair) >= 0) { $flag=1; if ($in{'cond'} eq 'OR') { last; } } else { if ($in{'cond'} eq 'AND') { $flag=0; last; } } } if ($flag) { push(@new,$_); } } close(IN); ここの辺りを書き換えるのでしょうか。

    • 締切済み
    • CGI
  • valign=topが機能しません

    CGIファイル内のテーブルのtdにvalign=topを記述しましたが、テキストが上にきてくれません。 ソースは以下です。「メッセージ」の文字が上にくるようにするにはどうすれがいいか教えてください。 よろしくお願いします。 <center> <TABLE BORDER=0 CELLPADDING=10 CELLSPACING=10> <tr> <td align=right nowrap><font size=2>お名前</font></td> <td align=left> <input type="text" name="name" size="30" maxlength="100" class=textarea> </td> </tr> <tr> <td align=right nowrap><font size=2>タイトル</font></td> <td align=left><input type="text" name="title" size="50" maxlength="200" class=textarea></td> </tr> <tr> <td valign=top align=right nowrap ><font size=2>メッセージ</font></td> <td align=left><textarea name="msg" cols="50" rows="7" class=textarea></textarea></td> </tr> <tr> <td align=right nowrap><font size=2>パスワード</font></td> <td align=left><input type="password" name="pass" size="16" maxlength="200" class=textarea value=$cpass></td> </tr> <tr> <td colspan=2> <hr size=1 noshade> </td> </tr> <tr> <td align=center colspan=2> <div align="center"><input type="submit" value="投稿する" class=input2 onClick="writeCookie()"></div></td> </tr></form> </table> </center>

  • A.cgiで認証チェックされてから、B.thmlが表示されるようにしたい。

    1/17付CGIについての質問の関連です。 質問はパスワード付forum.cgi(付録フリーCGI)で、forum.cgiを入室後、ID&PW情報をA.cgiに渡したまま、新しいHTMLウィンドウを立上げることでした。 この質問は、こちらの教えてGOOでご教授いただきました。ありがとうございます。 できたCGIでは、A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。 # ID/PW認証 # sub pass_check { local($time,$time2,$inpw,$flag,$id,$pw,$check); # 時間を取得 $time = 略; $timeout = 略; $password = '略'; $pwdfile = '略; #中略 if ($in{'id'} eq "") { &header; print "<table><tr><td>\n"; print "<td><form action=\"$script\" method=\"GET\"onsubmit=\"window.open('B.html,'new')\">\n"; print "<tr><th><UL><LI>すでにパスワード取得済みの方は・・・略 print "<tr><th>ログインID<th><input type=text name=id size=8></tr>\n"; #中略 print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n"; #中略 if ($in{'pw'} eq "") { &error("パスワードの入力モレです"); } $flag=0; open(IN,"$pwdfile") || &error("Open Error : $pwdfile"); while (<IN>) { ($id, $pw) = split(/:/); if ($in{'id'} eq $id) { $flag=1; $pw=~s/\n//; last; } } close(IN); if (!$flag) {&error("該当のIDは見当たりません"); } $check = &decrypt("$in{'pw'}", "$pw"); if ($check ne "yes") { &error("パスワードが違います"); } # パスワードを第2暗号化 以下略 } 認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか? 見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。

    • 締切済み
    • CGI
  • 削除ボタンを押すとperlにてデータを削除するようにしたいんですができません。

    フォーム.html(一部) <form name="form1" method="post" action="admin.cgi"> <input type="hidden" name="mode" value="edit3"> <table width="740" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td><b>クライアント(ロードサイド)</b> <input type="hidden" name="group" value="1"> <br> ※前のページへ戻る場合には、ブラウザの戻るボタンでお戻りください。</td> </tr> </table> <br> <table width="740" border="1" cellspacing="0" cellpadding="10" align="center" bordercolor="#333333"> <tr> <td bgcolor="#FFEEEE">このデータを削除する場合には、下の削除ボタンをクリックしてください。<br> ※この作業は取り消しができませんので、よく確認してから削除ボタンをクリックしてください。<br> <br> <input type="button" value="物件NO: _%data_num%_ を削除する" onClick="location.href='admin.cgi?mode=del&group=_%group%_&data_num=_%data_num%_'"> <br> この「物件NO: 」のボタンを押すとadmin.cgiに飛び データファイル内のデータを空にします。 ----------------admin.cgi---------------------------------- if($param{'mode'} eq 'del'){ ##===================================== ## 物件データをオープン = ##===================================== if($param{'group'} eq '1'){ $datafile = $datafile1;} elsif($param{'group'} eq '2'){ $datafile = $datafile2;} elsif($param{'group'} eq '3'){ $datafile = $datafile3;} if(!stdio::lock($lock)){ error('システムエラー','只今混み合っております.'); } # ロック if(!open(DATA,"+<$datafile")){ stdio::unlock($lock); &error('システムエラー',"ファイル ( $datafile ) をオープンできませんでした。"); } @data = <DATA>; foreach(@data){ @data2 = split(/,/); if($data2[0] eq $param{'data_num'}){ $_ = ''; last; } elsif($data2[0] eq $param{'data_num2'}){ $_ = ''; last; } } seek(DATA,0,0); print DATA @data; truncate(DATA,tell(DATA)); close(DATA); stdio::unlock($lock); ##===================================== ## テンプレートオープン = ##===================================== if(!open(HTML,$html_finish)){ &error('システムエラー',"ファイル ( $html_finish ) をオープンできません。"); } @html = <HTML>; close(HTML); ##===================================== ## HTML出力 = ##===================================== print <<"EOF"; Content-type: text/html @html EOF exit; } # モード del ここまで ----------------------------------------------------- この「data_num2」の削除には成功するんですが 「data_num」の場合はボタンを押しても何も起こりません。 恐らく「data_num」のif文に行っていないのだと思うんですが、 何が原因か分かりません。 情報が少ないかもしれませんが 解決の糸口をお願いします。 データはcsv形式のファイルです。

    • ベストアンサー
    • HTML

専門家に質問してみよう