【PHP】会員登録・ログインシステムを作ってみた
phpを真面目に勉強してみようシリーズ第2弾。今回はログインシステムをつくってみました。
機能としては、DBを使った会員の新規登録及び会員情報の確認・削除となります。
今回は以下の記事を参考にさせていただきました。
ほぼこちらの記事をもとに作成していますが、会員退会(DBからの情報削除)機能を追加しています。
Contents
ダンロード
内容:phpファイル*6、.htaccess
ほか、DBの用意
仕様
構造
わかりやすい図が描けるようになりたい…
機能
会員登録フォーム画面(register.php)
- 氏名、メールアドレス、パスワード、誕生年を登録できる
- 登録に成功したら「登録しました」、失敗したら「エラーが発生しました。」のテキストを表示する
- すでにログイン済みのユーザは会員情報ページへリダイレクト
ログインフォーム画面(index.php)
- メールアドレス、パスワードでログインできる
- メールアドレスがDB上に存在しない場合「ログインに失敗しました。メールアドレスが違う可能性があります。」のテキストを表示する
- メールアドレスはDB上に存在するが、パスワードが異なっている場合は「メールアドレスとパスワードが一致しません。」のテキストを表示する
- ログイン済みのユーザは会員情報ページへリダイレクト
マイページ画面(home.php)
- 氏名、メールアドレス、誕生年の情報を確認できる
- 会員退会をすると、DB上から自身のユーザ情報を削除してログインフォームへ(logout.phpでの処理)
- ログインしていないユーザはログインフォームへリダイレクト
メモ
mampでのDB作成方法(SQL)について
mampでログインシステム用のDBを作成するのは以下の手順で可能です。
- DBの新規作成
- MAMPを起動し、Open WebStart Pageをクリック
- 「phpMyAdmin」をクリック→上段中央タブから「データベース」をクリック
- データベースを作成する項目にあるフォームに任意の値を入力し、作成をクリック(今回はlogin_test)
- DBの構造設定
- 作成したDBを選択し、上段中央タブから「SQL」をクリック
- SQL文を用いて、会員情報の値をいれるためのtableを作成する。「データベース login_test 上でクエリを実行する」に、今回は以下の文を入力。
CREATE TABLE users (
user_id INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR( 25 ) NOT NULL ,
email VARCHAR( 35 ) NOT NULL ,
password VARCHAR( 60 ) NOT NULL ,
birth_year INT( 4 ) NOT NULL,
UNIQUE (email)
);
→これで「user_id」「username」「email」「password」「birth_year」のカラムがある空欄のテーブルが作成されます。
2018/12/18追記)
上記でDBの用意は完了です。
サンプルファイル一式内のcore/config.phpの中身を作成したDB情報に差し替えれば、動くようになります。(Mampならconfig.phpの修正は不要かもしれませんが、間違いがないか確認しておきましょう)
上段中央タブから「表示」をクリックすると、実際に新規追加・削除された会員情報が確認できます。
参考)MAMPのphpMyAdminでMySQLデータベースの作成 – MAMPの使い方 – PC設定のカルマ
phpで内部エラーが発生した、構文をチェックしたいとき
こちらのサイトで確認できます。有難い…
PHPコードの構文チェック
セキュリティについて
今回実装しませんでしたが、ログインフォームのセキュリティの参考になりそうな記事があったので、今後用にメモ。
安全なログインとパスワードの実装方法 | Webセキュリティの小部屋
感想
今回のログインシステムを通して、例えば「URLクエリパラメータ」(url最後の?以降の文字列)の意味・制御の仕方、同じphp内でボタンを押下したかの判定方法(if($_POST[‘buttonのname’]))などなど、これまで疑問に感じていたことが色々と解消できました。
ほぼ初めて触ったDBについては、今までは仕組みがわからず未知数に感じていましたが、思ったより構造や処理が理解できるものだったので(今回の機能に関してはだと思いますが)自分の中でDBに対するハードルが大分下がった気がします。
むしろ、DBを使うことであれも出来るようになるんじゃ・・・!と夢が膨らみます(笑)
その第一歩として、DBの書き方についても今後勉強していきたいですね。