現在使っている掲示板は投稿を個別に削除は出来るのですが、一括削除は出来ません。一括削除だけしたいのですが、一括削除できる定型文のようなものはあるのでしょうか?よろしくお願いします。(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;
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

できればお使いの掲示版スクリプトの名前(と出来ればダウンロード先URLも)


お書き下さい。そうすればもう少し詳しくお答え出来ると思います。

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

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

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

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

この回答への補足

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

補足日時:2001/03/10 03:25
    • good
    • 0

一括削除をするということは、Formから同じnameで複数の値が入った形(例;「bbs.cgi?id=1&id=2&id=3」)で削除対象となる記事番号が渡されるということでしょうか?


であれば、URL decodeするルーチンでそういった値を処理できるようにしておかないといけないので、実現はそんなに簡単ではありません。

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

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QD905i でmusic,jpにマイメニューに登録後の削除の仕方

はじめまして。
携帯に詳しくないのでよろしくお願いします。

今日ドコモのD905iでmusic,jpフルのmusic,jpトリ放題に315円で入会登録したんですが、さらにお金がかかるとしらなかったので、いらないので削除しようとしたら、マイメニュー画面にはmusic,jpトリ放題はあるんですが、いくら押しても画面がきりかわらず、仕方ないのでミュージックの画面最初からで行くと、入会してください、になっています。
退会削除をを押しても、入会してませんと出てきます。
入会してないならないでそれでいいんですが、マイメニューの画面でmusic,jpフルはどうやって削除出来るんでしょうか?

サイトに行っても登録してませんで、マイメニュー画面から消えてくれません。

詳しい方教えてください。

Aベストアンサー

マイメニューから今一度、確認して見て下さい。
無料、有料かかわらず会員登録されているサイトが表示されます。
もしmusic.jpがあれば会員登録されていますので
マイメニューからmusic.jpのサイトを選択するとサイトに飛びますので
下の方にマイメニュー削除があるのでそこから
入った料金コースを選んでiモードパスワードを入れれば削除出来ます。

music.jpのサイトを確認して見たんですが色々な料金コースメニューがあったので
削除出来ない場合は料金コースが違うのかもしれないのでマイメニューの登録内容の説明文を見て確認して削除してみて下さい。

どうしても分からない場合はドコモショップでも
一緒に消してくれるのでお気軽にご来店して下さい。

Q$ENV{'REMOTE_HOST'}について

CGIにて$ENV{'REMOTE_HOST'}を取得したところ
スパム投稿なのですが、$ENV{'REMOTE_HOST'}が
IPアドレスの値である142.54.182.186が入っていました。
普通はkd182249232116.au-net.ne.jp
などという形になると思うのですが
142.54.182.186
となっていることが通常ありえるのでしょうか?
リモートホストを取得し、IPアドレスの形式であった場合、
この投稿者を弾いてしまっても問題ありませんか?

Aベストアンサー

IPアドレスが入っているか、ホスト名が得られるかは、Apacheの設定によります。
ホスト名を得る設定になっていてもDNSの逆引きがその時たまたま失敗すると、IPアドレスのまま設定されます。
なので、「ホスト名が入っていたら儲けもの」くらいの感覚で扱うのがよいかと。

Qyahoo.co.jpのアカウントを削除方法

yahoo.co.jpのアカウントを削除方法がわかりません。
よろしくお願いいたします。

Aベストアンサー

Yahoo! ヘルプ - Yahoo! JAPAN IDに関する
Yahoo! JAPAN IDを削除するには
http://help.yahoo.co.jp/help/jp/edit/edit-27.html

さらに不明点があればYAHOOホームページ内の右上に必ずヘルプがありますから、
ご参照下さい。

Q$ENV{'QUERY_STRING'}以外で引数を取得するには?

CGI上で$ENV{'QUERY_STRING'}を使用しないで引数を取得するにはどうしたらいいのでしょうか?

hoge.cgi?XXXX の XXXX を取得したいのですがある理由によって$ENV{'QUERY_STRING'}が使用できません。

よろしくお願いいたします。

Aベストアンサー

hoge.cgi?xxxx ではなく、
hoge.cgi/xxxx という表記のURIが許されるなら、
$ENV{'PATH_INFO'}を使う方法があります。

Qgoogle.co.jpで検索した言葉の履歴削除の方法

google.co.jpで検索したワードがパソコンに履歴として残っています。スペースキーを2回叩くとすべて検索したものが順に出てきます。どうやって消したらいいのでしょうか? ちなみにIEのツール、インターネットオプション、cookieの削除、ファイルの削除すべてしてみましたが、履歴は消えません。どなたかわかるから教えてください。windows XP利用しています。

Aベストアンサー

IEのツール→インターネットオプションのコンテンツタブ→オートコンプリートで「フォームのクリア」で、全部消えます。

検索窓に出た個々のものは、反転選択状態でDELキーです。

残さないようには、オートコンプリートの使用目的「フォーム」のチェックを外したら良いです。

Q引数処理に$ENV{'PATH_INFO'}を用いた際のクッキーについて

自作cgiの引数を $ENV{'PATH_INFO'}を用いた形式
(hoge.cgi/aaa/bbb/cccという形式)に変更しました。

ところが、組み込んでいるアクセス解析用のクッキーが
本来ならば hoge.cgiに対してクッキー1個となるはずですが、

hoge.cgi で1個目
hoge.cgi/aaa で2個目
hoge.cgi/aaa/bbb で3個目
hoge.cgi/ccc で4個目
 ・・
と、引数が変わるたびに発行されてしまいます。
ブラウザで確認すると同じ内容のクッキーが
アクセスした際の引数の分だけズラズラと羅列されています。

本来あるべき形である hoge.cgiに対してクッキー1個にするには
どのようにしたら良いのでしょうか。

Aベストアンサー

Cookie出力の際にパスを設定すれば大丈夫です。指定方法は参考URLを見てください。
とりあえず path=/ をつければ大丈夫ですが、詳細に指定することもできます。
例えば hoge.cgi のURLが
  http://www.example.com/foo/hoge.cgi
だとしたら、path=/foo とすることで
  http://www.example.com/bar/hoge.cgi
などにはCookieが送信されなくなります。
また、www がなくてもアクセスできるページである場合には、domain=.example.com も追加することで
  http://www.example.com/foo/hoge.cgi
にも
  http://example.com/foo/hoge.cgi
にもCookieが送信されるようになります。
(これをしないと、www付きで発行したCookieが、wwwなしの方に送信されません。)

参考URL:http://www.tohoho-web.com/wwwcook.htm#CookieWrite

Cookie出力の際にパスを設定すれば大丈夫です。指定方法は参考URLを見てください。
とりあえず path=/ をつければ大丈夫ですが、詳細に指定することもできます。
例えば hoge.cgi のURLが
  http://www.example.com/foo/hoge.cgi
だとしたら、path=/foo とすることで
  http://www.example.com/bar/hoge.cgi
などにはCookieが送信されなくなります。
また、www がなくてもアクセスできるページである場合には、domain=.example.com も追加することで
  http://www.example.com/foo/hoge.cgi
にも
...続きを読む

Q464.jpって削除されたんですか?

かなり前に464.jpを利用していて、最近はずーっと利用していませんでした。
友達から『464.jpってサイト知ってる?』と聞かれたので、久しぶりに何か読んでみようかなーと思い、午前中サイトを開いたのですが 『サーバーがみつかりません』と表示されました。
時間をずらして 今開いても見てもやはり『サーバーが見つかりません』となります。

464.jpはなくなってしまったのでしょうか?

Aベストアンサー

下記サイトによると「本日から1月31日までシステム移行作業中のため」だそうですが。

http://www.muramoto.net/

Q${str}と$strの違いとは?

スカラー変数の${str}と$strの違いとは何なのでしょうか。

スカラー変数における{}の意味がよくわかりません。
別になくても処理は変わらない気がしますが、
どういった際に{}は使用するのでしょうか?

Aベストアンサー

もしPerlでのことでしたら、スカラー変数名を{}で囲むのは、それ以降に半角文字が続く場合に、そのスカラー変数名と半角文字の文字列との境界を明示するためだと思います。 変数自体に何かの違いがあるということではないはずです。

たとえば、処理の中でスカラー変数$strに続けてstrという文字を書き出したい場合、「$strstr」と記述すると、[$str]とは別の[$strstr]という名前のスカラー変数と認識されてしまいます。 これを避けるために、スカラー変数名を{}で囲って、「${str}str」と記述することで、$strというスカラー変数に、strという文字が続いていると認識させる、という具合だと思います。

見当違いでしたらごめんなさい。

QIe9の検索語の履歴を完全に削除するには(2)

Ie9の検索語の履歴を完全に削除するには(2)
こちらで、検索語を表示しないでURLを表示する方法を教えていただきました。
http://oshiete.goo.ne.jp/qa/7284641.html

お教えいただいた方法はとても便利で今後はずっとこれにしようと思っているのですが、ご回答にあるhttp://www.google.co.jp/webhp?complete=0からhttp://www.google.co.jp/に戻ると検索語はまた表示されるようになります。「ツール→インターネットオプション→全般→閲覧の履歴→削除」で削除しても、検索語は削除されません。
http://www.google.co.jp/に戻っても検索語が表示されないようにするにはどうしたらいいでしょうか。つまり、検索語を記録から完全に削除してしまうにはどうしたらいいでしょうか。

Aベストアンサー

#2さんの補足に書かれていることですが

>Googleの検索ボックスに表示されるサジェストを、表示されないようにするのではなく、完全に消去つまり削除したいと思っています

Googleのサーバーにあるもので、しかも皆が同じものを利用しているのですから一個人が削除するということは無理でしょう。
#3でも書きましたが、検索履歴は個々のPC内に保存されているものですからそれぞれ削除することができます。
でもサジェストはGoogleのサーバー上にあるものですから削除はできません。
個人レベルでは表示するかしないかの選択になるわけです。

ちなみに、IEをオフライン作業にしてみればわかりますが、検索履歴は表示することができますが、サジェストはオフライン作業時にはサーバーにデータを取りにいけないので表示できなくなります。

Googleツールバーにはまだサジェストの選択肢が残っていますが、Web上の設定からはなくなってしまいました。
これは私も非常に「うざったく」思い、選択項目の復活を願っています。

QQUERY_STRINGSで'#'文字を受け取るには

次から次へと質問ばかりでスミマセン・・・

GETメソッド前提で、QUERY_STRINGでデータを受けるようなCGIを作っています。

ところが、普通の文字の受け渡しは何の問題も無いのに、途中に'#'が入ると、
そこから後ろが消えてしまっています。

'#'も含めて、全部受け取る方法って無いでしょうか・・?
よろしくお願いします。m--m

Aベストアンサー

# という文字は、ページ内リンクの位置を示すために使われています。これはブラウザがページを表示する時に使うだけのものなので、サーバーには送信されません。

ですので、# という文字をサーバーに送りたかったら、他の記号などと同じくエスケープしなければなりません。# の文字コードは 0x23 ですから、# の代わりに %23 と書いて下さい。


人気Q&Aランキング

おすすめ情報