WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:KENT WEBさんの、CGIの改造

0:[投稿] saori [2002/08/31 10:54 ][環境:WIN+IE UNIX系+Perl]

こんにちは、いつもお世話になっています。
CGIをちょっと改造したいのですが、よろしくお願いします。
http://www.komonet.ne.jp/~gift/cgi-bin/omikuji_link/navi_cgi.txt

サンプル
http://www.kent-web.com/pubc/navi/sample.cgi
配布場所
http://www.kent-web.com/data/navi.html?

10個のジャンルに分かれているうち、3個ジャンルは
管理人しか登録できないようにしたいんですがどうしたらよいでしょうか?

初心者ですので、スマートでなくてもなるべく簡単な方法がいいです。
管理人用の登録作業用のcgiファイルと、公開用cgiファイルを別に用意して
その他のデータは共有するのが簡単でしょうか?

どこをどうやって書き換えたらよいかわかりません。
すごくお手数をおかけしそうな質問ですみません。(ぺこり)


1:[回答] TOM neko [2002/08/31 17:49 ]

ジャンル別に番号がついているので、それで見分けたらいいでしょう。アドレスで見えてますね。
part=0からpart=9まであるので、たとえばpart=0からpart=2までを管理者用にします。

管理者専用の投稿フォームにはパスワードフィールドを追加して、そのパスワードが一致した場合のみ書き込みされるとか。なんらかの認証をしないと、アドレスの書き換えは簡単ですからね。


2:[回答] TOM neko [2002/08/31 18:02 ]

パスワードフィールドはすでにありますね。特定のパスワードだけ通せばいいですね。すごく簡単ですよ。


3:[質問] saori [2002/08/31 20:54 ]

すみません、おしゃっていることが理解できていないらしいです。
公開用のCGIファイルです。
修正前 http://www.komonet.ne.jp/~gift/cgi-bin/omikuji_link/navi.cgi
修正後 http://www.komonet.ne.jp/~gift/cgi-bin/omikuji_link/navi2.cgi
91行目から93行目まで#でコメントアウトしてみましたが
変数が複数の場所で使われているので、公開用のcgiでもジャンルが消えてしまいました。

91 #$parts[0] = 'お世話になったページ';
92 #$parts[1] = 'おみくじで使わせて頂いた画像';
93 #$parts[2] = 'WEB関連(作成支援・素材)';

-----------------------

新規登録画面の406行目〜あたりを何とかして、selectのoptionの項目で
管理者以外登録できない項目を非表示にできないでしょうか?

406    foreach (0 .. $#parts) {
407        if ($in{'part'} eq "$_") {
408            print "<option value=\"$_\" selected>$parts[$_]\n";
409        } else {
410            print "<option value=\"$_\">$parts[$_]\n";
411        }
412    }

それからforeach文の(0 .. $#parts)←この部分はどうい意味ですか?(勉強不足で怒られるかな・・ドキドキ)
お手数おかけします。


4:[回答] やじうま1号 [2002/08/31 20:56 ]

>$#parts
@partsの最大数、ですかね。


5:[回答] saori [2002/08/31 21:00 ]

配列の0番目から最大数番目ということですか?
じつは・・・・
406行目を書き換えて実験してみたのですが、何も起こらなかった(謎)でした。    
修正前 foreach (0 .. $#parts)
修正後  foreach (3 .. $#parts)


6:[質問] saori [2002/08/31 21:09 ]

TOM nekoさん、やじうま1号さんありがとうございます・・・・
また明日考えてみます。

#『状態』間違えましたので『質問』に変更します。


7:[回答] TOM neko [2002/09/01 08:01 ]

91行目からの部分は残しておかないとジャンルそのものがなくなりますね。

foreach (0 .. $#parts) は全部で6個ありますね。そのうち上から3番目を foreach (3 .. $#parts) に書き換えたら、ちゃんと新規投稿での選択項目が減りましたよ。(最新版をダウンロードしたら401行目でしたが)

ただし、項目が消えただけで、項目を捏造したページを作って投稿すれば投稿できてしまいますから、パスワード制限は必要ですね。

パスワード制限は、管理者のみ投稿モードを利用します。
72行目は自由に投稿するモードにしておきます。
$regtype = 0;

437行目(あたり)
sub regist {
    # 権限チェック
    if ($part <= 2) { $regtype = 1; } # この行を追加。
    if ($regtype) {

つまり、万一$partを捏造した投稿に対しては、管理者モードとみなして管理者パスワード必要とするのです。

さて、管理者ですが、管理者用のCGIを別にして管理者のみ投稿モードにするのが簡単です。
たとえばnavi_k.cgiなんて名前を変えて同じディレクトリに置けばいいでしょう。
72行目を管理者のみ投稿モードにするだけです。
$regtype = 1;

たぶんこれで動きますが、いろいろ試してみて下さい。穴が無いとも言えませんから。

そうそう、最後に管理者パスワードを変えるのを忘れずに!


8:[完了] saori [2002/09/01 13:24 ]

できました。ありがとうございます。

ユーザー用
if ($part <= 2) { $regtype = 1; } # この行も追加しました
http://www.komonet.ne.jp/~gift/cgi-bin/omikuji_link/navi.cgi

管理者用
URL(ひみつ♪)を変えて、管理者モードにしました

パスワード変更も済みです

2日間も面倒見ていただいて、お時間すみませんでした。
とってもうれしいです。

#夏休み最終日だし、受験生なのでPCさわるのも今日でほぼおしまいです。がんばるゾ!
#みなさんにいっぱい教えていただいて作ったページがYahooにも載せていただきました。
#よい思い出をありがとうございました。またいつかヾ(@^▽^@)ノ


9:[回答] TOM neko [2002/09/01 16:54 ]

抜けがありました。
登録情報の修正ページも変更が必要です。
740行目(あたり)
foreach (0 .. $#parts)をforeach (3 .. $#parts)

登録情報の修正ページへ捏造投稿があった場合。
577行目(あたり)
sub do_mente {
    # フォームチェック
if ($part <= 2) { &error("ジャンルが違います"); } # この行を追加。
    if ($in{'pwd'} eq '') { &error("パスワードが入力されていません"); }

夏休みに間に合うかな?


10:[完了] saori [2002/09/01 17:26 ]

>夏休みに間に合うかな?
間に合いましたっ(笑)

気がついていませんでした。最後まで手のかかる子ですみません(汗)
すぐ修正します。
ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World