人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

《PHP関連》有力な回答者の方には高ポイントを差し上げます。

ユーザー認証システムを作成しており登録システムに最近入りかかりました。しかしメールアドレスをチェックするような機能がなかなかできません。

具体的にはIDやパスワード、メールアドレスを入力してもらいます。その後メールアドレス先に確認メールを送り、メールにあるランダムなURL(register_check.php?id=237uhuiedy78y7vbyc3 のようなもの)をクリックすることによって初めてIDが有効になるシステムを作り上げたいと思っています。

どのような感じで構成すればいいのでしょうか?
>>>実際にソースなどを書いていただくと助かります。<<<

(ユーザー情報等はデータベース(Mysql)にて管理しています。)

●質問者: esecua
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:MySQL PHP URL クリック システム
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● 潮澤 昴
●2ポイント

http://odn.okwave.jp/kotaeru.php3?q=716090

ODN@OKWaveコミュニティー Webサイトの会員仮登録について

※超手抜き回答です。URL参照下さい。

ANo.#2

参照ヨロ


ココでソースを書くと半角ダブルクォーテーションが全部全角に化けますので。

◎質問者からの返答

残念ながら動きませんでした。。。


2 ● ito-yu
●100ポイント

http://e-words.jp/w/E382B9E382ADE383BCE3839E.html

スキーマとは 【schema】 ─ 意味・解説 : IT用語辞典 e-Words

データベースのカラム名くらい書いてもらわないと「実際に(動く)ソース」なんて書けましぇん


usr(id,pwd,mail,key,st)のようなテーブルとして(idが主キー、stは状態:0は無効1で有効、など)。


フォームから$id、$pwd、$mailを取得。

$keyを適当に生成して、

$sql = ”INSERT INTO usr(id,pwd,mail,key,st) VALUES(’{$id}’,’{$pwd}’,’{$mail}’,’{$key}’,0)”;

を実行

$mail宛に、url(”register_check.php?id={$key}”)を含むメールを送る

register_check.phpでは

$key = $_GET[’id’];

$sql = ”UPDATE usr SET st=1 WHERE key=’{$key}’”;

を実行

あとはログインの時に条件st>0をつける


当然、$mailはあり得ないメアドではないか?とか各フォームの値のサニタイズは必須です。

◎質問者からの返答

なるほど、そういう方法がありますね。

試してみたいと思います。ありがとうございます。


3 ● kuvera
●10ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

URLはダミーです。


大まかな流れですが、


ユーザが ID , パスワード を入力してフォーム送信

フォームの内容に問題なければ、このタイミングでデータベースに登録してしまう

データベースの内容をもとに URL を作成して sendmail

ユーザがそれをクリックしたら、データベースに「このIDは本物」の情報を付けて、完了。


ということで良いのでしょうか。


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

register.html の内容


<form method=”POST” action=”register.php”>

<dl>

<dt>ユーザID</dt><dd><input name=”userid” /></dd>

<dt>パスワード</dt><dd><input type=”password” name=”password” /></dd>

<dt>メール</dt><dd><input name=”email” /></dd>

</dl>

<input type=”submit” value=”メールを受け取る” />

</form>


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

register.php の大まかな内容


<?php


if(過不足があったり、MySQLのデータの誰かと内容が被っている){


print ”もう一度入力してちょ”;


}else{


$id = sha1( $_POST[’userid’].$_POST[’password’] ) . sha1( $_POST[’email’] );


MySQLに登録;

sendmail などをする; ( body に ”http://hogehoge.com/register_check.php?id=$id” )


if(問題なく登録とか送信とかできた){


print ”メールを送信したよん”;


}else{


print ”メンテナンス中だよん”;


}

}


?>


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


register_check.php の大まかな内容


<?php


if(isset($_GET[’id’])){


if( MySQL から ID を探して $_GET[’id’] がある ){


データベースで本登録状態にする。

print ”登録完了”;


}else{


print ”不正なアクセスですか・・?”;


}

}

?>


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

MySQLで作っておくデータベース


通し番号

ユーザID

パスワード

メールアドレス

$id


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


あまりにも端折ってしまいましたが、あとはサニタイジングなどに注意を払ってカスタマイズをしていけば完成すると思います。

◎質問者からの返答

「 データベースで本登録状態にする。」を質問しております。。。


4 ● angelsong
●16ポイント

http://www.stackasterisk.jp/tech/php/php03_06.jsp

PHP??3???FPHP???p(?Z?b?V???????/?F??)

趣旨は異なりますが、セッションIDを使ったユーザ認証の例です。

session_id()に、ランダムな文字列が自動的に取得されるので、それを、

varchar2 USER_ID;

varchar2 PASSWORD;

varchar2 MAID_ADDRESS;

varchar2 SESSION_ID;

char IS_CERTIFIED DEFAULT=”0”; // 0=未認証 1=メール認証済み

といった感じのテーブルに格納しておき、ユーザへ送る確認メール中に、セッションIDを引数として渡しておきます。(ご質問中のランダムなURLに該当する部分です)


そして、register_check.php中で、メールアドレスとセッションIDが合致した場合のみ、認証済みフラグを立てユーザIDを有効とするような処理を書けば実現出来るかと思います。

◎質問者からの返答

データベースに 0 か 1 を入力させて未認証か、認証済みか判断するとありますが、ログイン機能に対してどのようにして1が認証済みと認識させればいいのでしょうか?疑問です。


5 ● ito-yu
●48ポイント

http://dev.mysql.com/doc/refman/4.1/ja/

MySQL 4.1 リファレンスマニュアル

2度目の解答

私の一度目の解答のusr(id,pwd,mail,key,st)と同じテーブルだとして。

認証に必要なのはidとpwd。これを入力してもらい、以下のSQLで引っかかってきたら認証OK、来なければ未認証か未登録。

$sql = ”SELECT * FROM usr WHERE st>0 AND id=’{$id}’ AND pwd=’{$pwd}’”;

st>0が認証済みのみの条件です

SQLはご存じですか?先にSQLの勉強をされてはいかがでしょうか

◎質問者からの返答

SQLは多少理解しています。回答ありがとうございました。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ