中小企業の働き方改革をサポート>>

お世話になります。

http://www.webpower.jp/
上記のサイトで配布されている、「ユーザー・マネージャー」と言うアクセス制限するユーザーを管理するCGIを使いたいと思っています。
http://www.webpower.jp/websofts/password_protect …

このCGIは、重複ユーザーの登録をチェックする事はできるのですが、メールアドレスの重複チェックはできません。
すでに登録されているメールアドレスでの、ユーザー登録拒否するにはどうすればよいでしょうか。

「user.cgi」ファイルの、1416行目、1780行目あたりに「ユーザー名[$username]は既に登録されています。他のユーザー名を指定してください。」と、同じユーザー名での登録をチェックしている箇所があります。
---------------------------------------
while (<IN>) {
my($username) = (split /$SP/, $_, 2)[0];
if ($SIO{'username'} eq $username) {
push @err_msg, "<b>ユーザー名[$username]は既に登録されています。他のユーザー名を指定してください。</b>";
last;
}
}
close IN;
---------------------------------------
このあたりが怪しいと思い、いろいろと試してはみたのですが、perlの知識がないためにネットでsplit関数を調べて3時間ほどいろいろと試してみたのですが、うまくいきませんでした。

ユーザー情報が登録されているファイルには下記のように、ユーザー情報が記載されています。
-------------------------------------
test10(タブ)qWsI4uXjDR2gU(タブ)hogehoge@mail.goo.ne.jp(タブ)1196066232(タブ)1196066232(タブ)1196066232(タブ)0
test9(タブ)6VAGp2TV8SV4w(タブ)hogehoge2@mail.goo.ne.jp(タブ)1196066806(タブ)1196066806(タブ)1196066806(タブ)0
test11(タブ)I75tuntVNvzjk(タブ)hogehoge3@mail.goo.ne.jp(タブ)1196071653(タブ)1196071653(タブ)1196071653(タブ)0
-------------------------------------

上記のように、タブ区切りになっています。
左から、ユーザー名、パスワード(暗号化されている)、メールアドレス、初回登録日時、最終更新日時、最終認証日時、認証回数となっています。

登録済みのメールアドレスを、ユーザー名と同じように重複して登録しないようにチェックしたいのですが、どのようにすれば良いでしょか。


ご教授をお願い致します。

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

A 回答 (4件)

昨日はちといろいろあったので書けませんでした。

すみません。
#実は別のところで回答してたりしたんですが

>「# ■ 登録内容を変更する」の項目内に下記の記述があります。

ちょっと修正後のコードがどうなったのか判断しづらいところがありますね

> 上記の記述のすぐ上の箇所に、下記のように記述しました。

とあるんですけど、

#------------------------------------
#メールアドレスの重複登録をチェック
if (-f $USER_FILE) {
while (<IN>) {
my ($username, $mail) = (split /$SP/, $_, 4)[0,2];
if ($SIO{'new_mail'} eq $mail) {
push @err_msg, "<b>メールアドレスは既に登録されています。他のメールアドレスを入力して下さい。</b>";
last;
}
}
}
close IN;
#--------------------------------------
while (<IN>) {
($username, $password, $mail) = split /$SP/, $_, 4;

みたいな感じになってますか?
だとすると、while (<IN>) ではファイルからの読み込みをしているので、
後ろの方の while ループの本体は実行されません。

配布もとのスクリプトから見るのは勘弁してもらいたいんですが、
時間をもらえれば多少融通を利かせられなくもないですけど。
    • good
    • 0
この回答へのお礼

お返事が遅れてしまい、申し訳ありません。

>配布もとのスクリプトから見るのは勘弁してもらいたいんですが、
申し訳ありませんでした。
私が利用しようとしているスクリプトを、分かる人が見ればすぐに解決方法が分かるのかと思い、配布もとのスクリプトを記載させて頂きました。

アドバイスを拝見させて頂く限り、簡単にメールアドレスの重複チェックができなそうなので、諦めようかと思っています。

いろいろとありがとうございました。

お礼日時:2007/12/02 18:05

すみませんわたしも超能力者じゃないんで、せめてどんなエラーになったか


くらいは補足してもらえませんでしょうか?

この回答への補足

大変申し訳ありません。

「# ■ 登録内容を変更する」の項目内に下記の記述があります。

#------------------------------------
while (<IN>) {
($username, $password, $mail) = split /$SP/, $_, 4;
#------------------------------------

上記の記述のすぐ上の箇所に、下記のように記述しました。

#------------------------------------
#メールアドレスの重複登録をチェック
if (-f $USER_FILE) {
while (<IN>) {
my ($username, $mail) = (split /$SP/, $_, 4)[0,2];
if ($SIO{'new_mail'} eq $mail) {
push @err_msg, "<b>メールアドレスは既に登録されています。他のメールアドレスを入力して下さい。</b>";
last;
}
}
}
close IN;
#--------------------------------------


「$mail」は「$mailaddr」にしても、エラーはおこりませんでしたが、メールアドレスの重複チェックは動作しているようです。
ですが、なぜか登録されているはずのユーザー名が、登録されていないとエラーが表示されます。
ユーザー名のチェックしている記述は、下記の通りになっています。
#--------------------------------------
# ユーザー名が見つからない
if (!$flag) {
push @err_msg, "<b>ユーザー名[$SIO{'username'}]は登録されていません。</b>";
}
#--------------------------------------


まとめると、登録されているユーザー名を使用して、メールアドレスの変更をしようとすると、メールの重複チェックは動作しているものの、ユーザー名が無登録と判断されてしまいます。

アドバイスを御願い致します。

補足日時:2007/11/27 23:57
    • good
    • 0

すみません。

訂正です。
>my ($username, $mailaddr) = (split /$SP, $_, 4)[0,3];
最後のブラケットの中は[0,2]です。
    • good
    • 0
この回答へのお礼

sakusaker7 様、的確なアドバイスをありがとうございます。
my ($username, $mailaddr) = (split /$SP/, $_, 4)[0,2];
上記のように記述する事で、メールアドレスの重複登録のチェックをする事ができました。

また、1度ユーザー登録している人が登録しているメールアドレスを変更する場合も、メールアドレスの重複チェックをしようと思い、同じように記述してみましたが、どうにもうまく行きません。

「user.cgi」の中の480行目あたりにある、「■登録内容を変更する」のところに、いろいろとチェックする記述があるようです。
#-------------------------------------------------------------------------------
# ■ 登録内容を変更する
#
# 呼出元 : main
# 引 数 : (冒頭メッセージ)
# 戻り値 : (終了)
#-------------------------------------------------------------------------------

ここに下記のように記述してみました。
#------------------------------------
#メールアドレスの重複登録をチェック
if (-f $USER_FILE) {
while (<IN>) {
my ($username, $mail) = (split /$SP/, $_, 4)[0,2];
if ($SIO{'new_mail'} eq $mail) {
push @err_msg, "<b>メールアドレスは既に登録されています。他のメールアドレスを入力して下さい。</b>";
last;
}
}
}
close IN;
#--------------------------------------

「$mail」を「$mailaddr」にすると、エラーが出て動作しなくなります。

自分なりにいろいろと試してみましたが、うまくメールアドレスの重複チェックをする事ができません。

引き続きお手数をおかけしますが、ご教授を頂けると助かります。

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

お礼日時:2007/11/27 19:05

>my($username) = (split /$SP/, $_, 2)[0];


my ($username, $mailaddr) = (split /$SP, $_, 4)[0,3];

で $mailaddr にメールアドレスが入ります。
後は煮るなり焼くなりお好きにどうぞ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング