-PR-
解決
済み

掲示板を全削除機能にしたいのですが

  • 困ってます
  • 質問No.46764
  • 閲覧数60
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 62% (115/184)

現在使っている掲示板は投稿を個別に削除は出来るのですが、一括削除は出来ません。一括削除だけしたいのですが、一括削除できる定型文のようなものはあるのでしょうか?よろしくお願いします。(Iモード用BBSです。本CGIスクリプトのメンテ部分です。)
sub mainte
{
my($del) = (0);

if($form{'pass'} ne $mainte_pass){
&error ("bad password.");
}
$out_val{'pass'} = $form{'pass'};
if($form{'id'}){ # delete
if(&lock($log_file, 5)){
open (IN, "< $log_file") or &error ("can't open $log_file to read. $!");
open (OUT, "> $log_file.$$") or &error ("can't open $log_file.$$ to write $!");
$del = 0;
while(<IN>){
if(/^$form{'id'}\t/){
$del = 1;
next;
}else{
print OUT $_;
}
}
close IN;
close OUT;
if($del){
rename $log_file, "$log_file.bak";
rename "$log_file.$$", $log_file;
chmod 0666, $log_file;
$msg = qq|$form{'id'}番の投稿を削除しました。<BR>\n
<A href="$out_val{'cgi_name'}">戻る</A>|;
&error($msg);
}else{
unlink "$log_file.$$";
$msg = qq|$form{'id'}番の投稿は存在しません。<BR>\n
<A href="$out_val{'cgi_name'}">戻る</A>|;
&error($msg);
}
}
}else{
if(&lock($log_file, 5)){
open (IN, "< $log_file") or &error ("can't open $log_file to read. $!");
while(<IN>){
($id, $time, $name, undef, $title ) = split "\t";
$out_val{'del_list'} .= qq|$id, $time, $name, $title<BR>\n|;
}
&page_out($mainte_page);
}
}
unlock($log_file);
return 1;
}
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル11

ベストアンサー率 67% (126/186)

できればお使いの掲示版スクリプトの名前(と出来ればダウンロード先URLも)
お書き下さい。そうすればもう少し詳しくお答え出来ると思います。

この掲示版の管理者による削除方式は
1:削除したい記事の番号がわかっている場合:
その番号を削除番号入力フォーム
(例えば <input type="text",name="id" maxlength="10" size="3"> など)
に入力してからメンテナンスモードへの
submitボタン(おそらくvalueは「削除」だと思いますが)
を押すとそのまま指定した番号の記事が削除され

2:削除したい記事の番号がわからない場合:
削除番号入力フォームに入力せずそのままメンテモードに移行すると
記事の番号、タイトル等の一覧表を(おそらく削除ボタン付で)出力し、
削除したい記事のボタンをチェックしてからsubmitボタンを押すと
チェックした記事が削除される。

と言う方式のようですが、違うのであれば補足して下さい。

そして一括削除をしたいと言うことは
(A):1の場合は複数の番号をまとめて指定すると指定した番号の記事を一括して削除する。
(B):2の場合は複数の記事の削除ボタンをチェックするとそれらの記事をまとめて削除する。
ということをしたいのでしょうか。
(B)の方をやろうとすると cockyさんが書かれているように、入力処理のルーチンも
いじらないと一括削除は出来ないと思います。
とりあえず(A)のほうだけを出来ればよいのならこのサブルーチンをいじるだけでも
対応できると思います。 ただしそのような改造をすると(B)のほうがおかしくなるおそれがあります。
補足コメント
mitsy

お礼率 62% (115/184)

すみません。しばらく留守していたもので、返事が遅くなりました。申し訳ありません。これは本に付いていたCDに入っていたものです。書かれていたように削除番号入力フォームに番号を入れて削除できるものです。ですが無入力でsubmitボタンを押すと、画面は変わらず、そのままで変わらないようにスクリプトができています。私とすれば単にログを消したいだけですので、削除番号入力フォームの中に全てを意味するような語句を入力すれば出来るのかなとか、あるいは、別フォームを作ってIDを全てクリアすると言う形なのかなーとか思いまして・・・。ちなみに(A):1の場合の複数の番号ですが、カンマくぎりで数字を羅列したり、ALLなどと入れてみたのですが、エラーになります。(A):1の方法でやるとすると、いくらかは簡単でしょうか?よろしくお願いします。
投稿日時 - 2001-03-10 03:25:09
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 57% (232/402)

一括削除をするということは、Formから同じnameで複数の値が入った形(例;「bbs.cgi?id=1&id=2&id=3」)で削除対象となる記事番号が渡されるということでしょうか? であれば、URL decodeするルーチンでそういった値を処理できるようにしておかないといけないので、実現はそんなに簡単ではありません。 CGI.pmを使っているのであれば、上記の例のような形でデー ...続きを読む
一括削除をするということは、Formから同じnameで複数の値が入った形(例;「bbs.cgi?id=1&id=2&id=3」)で削除対象となる記事番号が渡されるということでしょうか?
であれば、URL decodeするルーチンでそういった値を処理できるようにしておかないといけないので、実現はそんなに簡単ではありません。

CGI.pmを使っているのであれば、上記の例のような形でデータが渡された場合でも

@delete_id = $query->param( 'id' );

といった形で配列にデータを入れることができるので、あとはforeachでループを回せばいいだけの話なんですが。


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ