![]() |
カレッヂ |
質問者 ひー
投稿日 6/1(金) 18:59:20
アクセス制限自動管理システム でメールアドレスでパスワードを自動生成されるわけなのですが、 入力フォームで@以降を入力させたくないのですが、どうすればよろしいのでしょうか? たとえば、 [ name="EMAIL" ]@docomo.ne.jp 登録が完了し、そのページにアクセスする際"EMAIL"がユーザーネームになるので@以降の入力の手間を省かせたいのですが・・・。 宜しくお願い致します。 |
回答者 呑兵衛
[削除]
投稿日 6/2(土) 18:00:58
呑兵衛といいます。 アクセス制限自動管理システム、ですね。 2つ質問です。 1. @以前だけ入力させたとして、生成されたパスワードはどこに送るのでしょうか。 あるいは、パスワードやIDをどう知ることができるのでしょうか。 2. @以前はそのアドレス(メールボックス)を発行するプロバイダーなりサーバー管理者 の管理するドメインでは唯一だと思いますが、 hoge@tako.ne.jp hoge@honyo.co.jp hoge@herohero.com が登録してきた場合誰もアクセスできなくなりますが、そこのところはいかがでしょうか。 |
質問者 ひー
[削除]
投稿日 6/4(月) 02:56:47
お返事ありがとうございます。 言葉が足りなくてすみません。 i-mode限定のサイトですので、@以降は、全てdocomo.ne.jpとなります。 [EMAIL](@の前)だけ入力してもらい、レジストする際に、 CGIの中で[EMAIL]に@docomo.ne.jpを連結させてsendmail、データファイルへの書き込みは可能でしょうか? |
回答者 呑兵衛
[削除]
投稿日 6/4(月) 16:10:01
こんにちは。 ではこのようなものでいかがでしょう。 記録は入力文字だけ、送信は入力文字に@docomo.ne.jpが加わりアドレスになります。 ----------- regist.cgi ----------- 94行目あたり #入力確認 の直後に ブロック A を挿入 98 行目あたりの if (!($FORM{'EMAIL'} =~ /(.*)\@(.*)\.(.*)/)) { &error ・・以降 ); }までを消して ブロック Bを挿入 142行目あたり #電子メール処理 の後に ブロック C を挿入 ----------- change.cgi ----------- 56行目 あたり #入力確認 の後に ブロック A ブロック B を挿入 以上 ブロック A (全角文字入力対策) -------------------------------------------------------------------------------- #入力画面と regist.cgiなどのAuto Pwdが shift-jisならば $sjis = 'a-zA-Z0-9@.−,ー'; $euc = jcode::euc($sjis, 'sjis'); $ascii = 'a-zA-Z0-9@.-,-'; jcode::euc($FORM{'EMAIL'}, 'sjis'); jcode::tr(\$FORM{'EMAIL'}, $euc, $ascii); jcode::sjis($FORM{'EMAIL'}); #入力画面と regist.cgiなどのAuto Pwdが euc-jpならば jcode::tr(\$FORM{'EMAIL'}, 'a-zA-Z0-9@.−,ー', 'a-zA-Z0-9@.-,-'); -------------------------------------------------------------------------------- ブロック B (@以降の入力ミスをチェック) -------------------------------------------------------------------------------- if ($FORM{'EMAIL'} =~ /\@/) { &error('入力ミス', '@以降を入力しないで下さい.'); } -------------------------------------------------------------------------------- ブロック C (ユーザ名を送信アドレスに置き換える) -------------------------------------------------------------------------------- $FORM{'EMAIL'} = "$FORM{'EMAIL'}\@docomo.ne.jp" -------------------------------------------------------------------------------- |
回答者 呑兵衛
[削除]
投稿日 6/4(月) 16:25:14
追伸です。 @以降も記録したいのでしたね。 regist.cgi change.cgi の #入力確認 の中の @PICKUP = grep(/^$FORM{'EMAIL'}\:(.+)$/,@PASSWORDS); の前にブロック C を挿入し、 regist.cgi の #電子メール処理 の中では挿入しないようにします。 ただ、文字数は少ないですが@docomo.ne.jpが増える分検索の無駄かもしれません。 |
質問者 ひー
[削除]
投稿日 6/5(火) 21:17:28
呑兵衛さん、何度もありがとうございます。 変更してみたのですが、サーバーエラーとなってしまいます。 #入力確認のみ変更となるのですね。 regist.cgiを以下の様にしてみたのですが・・・。 #----------------------------------------------------------------------# #入力確認 #------------------------------------------------------------- #追加ブロック A (全角文字入力対策) #--▼---------------------------------------------------------- #入力画面と regist.cgiなどのAuto Pwdが shift-jisならば $sjis = 'a-zA-Z0-9@.−,ー'; $euc = jcode::euc($sjis, 'sjis'); $ascii = 'a-zA-Z0-9@.-,-'; jcode::euc($FORM{'EMAIL'}, 'sjis'); jcode::tr(\$FORM{'EMAIL'}, $euc, $ascii); jcode::sjis($FORM{'EMAIL'}); #--▲----------------------------------------------------------- if ($FORM{'EMAIL'} eq '') { &error('入力エラー','Eメールを入力してください.','d電話機の[戻る]ボタンを押して前の画面に移動してください.'); } if ($FORM{'EMAIL'} =~ / / || $FORM{'EMAIL'} =~ /,/) { &error('入力エラー','Eメールは1つのみ記入できます.','電話機の[戻る]ボタンを押して前の画面に移動してください.'); } #変更箇所ブロック B (@以降の入力ミスをチェック) #--▼----------------------------------------------------------- #if (!($FORM{'EMAIL'} =~ /(.*)\@(.*)\.(.*)/)) { &error('入力エラー','Eメールは半角で正しく記入してください.','電話機の[戻る]ボタンを押して前の画面に移動してください.'); } #↓に置き換え if ($FORM{'EMAIL'} =~ /\@/) { &error('入力ミス', '@以降を入力しないで下さい.'); } #--▲----------------------------------------------------------- if (!open(DB,$file)) { &error('システムエラー','パスワード管理ファイルにアクセスできません.','復旧するまでお待ちください.'); } @PASSWORDS = <DB>; close(DB); 呑兵衛さんの書いていただいたものをコピペしました。 何度も恐縮なのですが、ご教授願います。 |
回答者 呑兵衛
[削除]
投稿日 6/6(水) 00:49:54
こんにちは。 当方の記入ミスです。 $FORM{'EMAIL'} = "$FORM{'EMAIL'}\@docomo.ne.jp" を $FORM{'EMAIL'} = "$FORM{'EMAIL'}\@docomo.ne.jp"; としてください。 |
質問者 ひー
[削除]
投稿日 6/6(水) 01:55:51
何度もありがとうございます。 そんくらい自分で気付けよ! って感じのトコでした。 お手数取らせましてすみません。 ・・・もう一つよろしいですか・・・? 前に追伸で頂いた >@以降も記録したいのでしたね。 >regist.cgi change.cgi の #入力確認 の中の >@PICKUP = grep(/^$FORM{'EMAIL'}\:(.+)$/,@PASSWORDS); >の前にブロック C を挿入し、 >regist.cgi の #電子メール処理 の中では挿入しないようにします。 >ただ、文字数は少ないですが@docomo.ne.jpが増える分検索の無駄かもしれません。 なのですが、よくよく考えるとmember.cgiの中に@以降が書き込まれるってことは、 ユーザー認証の際に@以降も入力する必要があるって事ですよね? それでは、手間がかかるので、やっぱり >142行目あたり #電子メール処理 の後に >ブロック C を挿入 を使わせていただくことにします。 そこで、登録が完了したさいの返信メールの内容なのですが、USERNAME:のところに フルアドレスが記入されてしまいます。 #電子メール処理 print OUT "USERNAME: $FORM{'EMAIL'}\n"; 返信メールのUSERNAME:のところに登録の際入力したアドレス(@docomo.ne.jpを抜いたもの)を明記させる方法はありますか? 何度もすみません。宜しくお願い致します。 |
回答者 呑兵衛
[削除]
投稿日 6/6(水) 13:28:37
呑兵衛です。どうも頼りなくてすみません。 前回のままだとまるで役に立ちませんよね。 ブロック C は止めましょう。 #電子メール処理 の直後あたりに $email_to = "$FORM{'EMAIL'}\@docomo.ne.jp"; を挿入し、 if (!open(OUT,"| $sendmail $FORM{'EMAIL'}")) を if (!open(OUT,"| $sendmail $email_to")) とし、 print OUT "TO: $FORM{'EMAIL'}\n"; を print OUT "TO: $email_to\n"; とします。 全角処理を施された場合、 change.cgi の全角処理の前に require './jcode.pl'; を挿入する(パスを通してください)ことも追加します。 これで、ユーザの入力は登録もパスワード変更も@より前のみでOK になり、記録もその通りされ、パスワードのお知らせのときだけ ユーザ名@docomo.ne.jpで処理されるようになります。 追加 デフォルトでは、メールサブジェクトが全角の日本語ですので、 場合によっては文字化けする可能性が高いです。 regist.cgi の #Eメールの題名 $subject = 'アクセスパスワードのお知らせ'; を $subject = 'Announce for Password'; 等と英語表記し、 &jis("Subject: $subject"); print OUT "$msg\n"; を print OUT "Subject: $subject"; とするのが手っ取り早い方法です。 |
質問者 ひー
[削除]
投稿日 6/10(日) 22:22:19
いろいろありがとうございました。 無事動きました。 また何かありましたら宜しくお願い致します。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |