PHPを使って会員登録機能とログイン機能を実装しました。
重複登録防止の機能も追加しております。
参考にしていただけたら幸いです。
今回のテーマ
- PHPとMySQLを使って会員登録機能を実装
- PHPとMySQLを使ってログイン機能を実装
【迷ったらココ!】PHPが学べるプログラミングスクール3選
当サイトではプログラミング学習やエンジニア転職に関する情報を発信しています。他の記事も合わせてご覧ください。
PHPの本・参考書おすすめ12選をご紹介【レベル別・フレームワーク別で解説】
PHPを独学で勉強したい!なにか良い本は無いかな? PHPのWebアプリケーション開発で挫折した...自分のレベルに合った参考書を知りたい! 今回はこんな悩みを解決していきます。 PHPなどのプログラ ...
更新日:2024年1月31日
PHPで会員登録機能を作成
まずは会員登録機能についてご説明します。
ビジュアルの作成
1 2 3 4 5 6 7 | <h1 style="text-align:center;margin-top: 2em;margin-bottom: 1em;" class="h1_log">初めての方はこちら</h1> <form action="register.php" method="post" class="form_log"> <input type="email" name="email" class="textbox un" placeholder="メールアドレス"><br> <input type="password" name="password" class="textbox pass" placeholder="パスワード"><br> <button type="submit" class="log_button">新規登録する</button> <p style="text-align:center;margin-top: 1.5em;">※パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください。</p> </form> |
ここでは新規会員登録機能を作成しますので上画像の下半分のビジュアルを作成しています。
まずHTMLコードでテキスト入力欄とボタンを作っていきます。
ここではフロントエンドの操作だけですのでPHPを使うこともないのでそんなに時間を掛けなくても実装できると思います。
※完成形ではCSSライブラリを使用しています。
データの追加
1 2 3 4 5 | <?php define('DSN', 'mysql:host=localhost;dbname=データベース名'); define('DB_USER', 'ユーザー名'); define('DB_PASS', 'データベースのパスワード'); ?> |
続いてconfig.phpにデータベース接続に必要な情報を記載しておきます。
接続情報をこのファイルに書いておけば、それ以降はconfig.phpを参照するだけでデータベース接続をカンタンに済ませることが出来ます。
注意ポイント
データベース名とテーブル名を間違えないようにしましょう。
データベースの中にテーブルが複数存在するイメージです。
続いてデータベース接続情報を元にMySQLに接続し、入力してもらった情報を追加する処理を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | <?php require_once('config.php'); //データベースへ接続、テーブルがない場合は作成 try { $pdo = new PDO(DSN, DB_USER, DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("create table if not exists userDeta( id int not null auto_increment primary key, email varchar(255), password varchar(255), created timestamp not null default current_timestamp )"); } catch (Exception $e) { echo $e->getMessage() . PHP_EOL; } //メールアドレスのバリデーション if (!$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo '入力された値が不正です。'; return false; } //正規表現でパスワードをバリデーション if (preg_match('/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}+\z/i', $_POST['password'])) { $password = password_hash($_POST['password'], PASSWORD_DEFAULT); } else { echo 'パスワードは半角英数字をそれぞれ1文字以上含んだ8文字以上で設定してください。'; return false; } //データベース内のメールアドレスを取得 $stmt = $pdo->prepare("select email from userDeta where email = ?"); $stmt->execute([$email]); $row = $stmt->fetch(PDO::FETCH_ASSOC); //データベース内のメールアドレスと重複していない場合、登録する。 if (!isset($row['email'])) { $stmt = $pdo->prepare("insert into userDeta(email, password) value(?, ?)"); $stmt->execute([$email, $password]); ?> <link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet"> <link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" href="shinjin.css"> <body id="log_body"> <main class="main_log"> <p>登録完了</p> <h1 style="text-align:center;margin-top: 0em;margin-bottom: 1em;" class="h1_log">ログインしてください</h1> <form action="login.php" method="post" class="form_log"> <!--<label for="email" class="label">メールアドレス</label><br>--> <input type="email" name="email" class="textbox un" placeholder="メールアドレス"><br> <!--<label for="password" class="label">パスワード</label><br>--> <input type="password" name="password" class="textbox pass" placeholder="パスワード"><br> <button type="submit" class="log_button">ログインする</button> </form> <p align="center">戻るボタンや更新ボタンを押さないでください</p> </body> <?php }else { ?> <link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet"> <link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" href="style.css"> <body id="log_body"> <main class="main_log"> <p>既に登録されたメールアドレスです</p> <h1 style="text-align:center;margin-top: 0em;margin-bottom: 1em;" class="h1_log">初めての方はこちら</h1> <form action="register.php" method="post" class="form_log"> <!--<label for="email" class="label">メールアドレス</label><br>--> <input type="email" name="email" class="textbox un" placeholder="メールアドレス"><br> <!--<label for="password" class="label">パスワード</label><br>--> <input type="password" name="password" class="textbox pass" placeholder="パスワード"><br> <button type="submit" class="log_button">新規登録する</button> <p style="text-align:center;margin-top: 1.5em;">※パスワードは半角英数字をそれぞれ1文字以上含んだ、8文字以上で設定してください。</p> </form> </main> </body> <?php return false; } ?> |
PHPとHTMLを組み合わせたコードですので長いですが少しずつ解いていけばそんなに難しくありません。
1~15行目ではデータベース(MySQL)に接続して、メールアドレスやパスワードといった追加するデータを設定します。
データベースに接続できなかった場合はエラーメッセージが表示されます。
16~20行目では、入力されたメールアドレスのバリデーション処理。
21~27行目ではパスワードの正規表現を行っており、半角英数字を1文字以上含んだ8文字以上のパスワードを設定してもらうための処理です。
条件に合わないパスワードを設定した場合アラート文が表示されるようになっています。
28~36行目ではデータベース内のメールアドレスを取得して、重複していない場合のみデータを登録します。
データベースの登録にはinsert into構文を使います。
このコードはPHPでは頻繁に使用する言語ですのでぜひ覚えておきましょう。
PHPの構文はこれで完了です。
HTMLコードではメールアドレスを新しく登録する場合と既に登録されている場合とで処理を分けています。
(処理を分ける際はPHPのif文を使います)
37~52行目ではメールアドレスを新規登録する際に表示させる画面
56~72行目ではメールアドレスが重複している場合に表示させる画面
となっております。
PHPでログイン機能を作成
新規会員登録機能でデータベースにデータを追加できるようになったら、ログイン機能を実装していきます。
ビジュアルの作成
1 2 3 4 5 6 | <h1 style="text-align:center;margin-top: 0em;margin-bottom: 1em;" class="h1_log">ログインしてください</h1> <form action="login.php" method="post" class="form_log"> <input type="email" name="email" class="textbox un" placeholder="メールアドレス"><br> <input type="password" name="password" class="textbox pass" placeholder="パスワード"><br> <button type="submit" class="log_button">ログインする</button> </form> |
ここではログイン機能を作成しますので上画像の上半分のビジュアルを作成しています。
こちらに関してもHTMLでビジュアルを作成しているだけですので難易度は低めです。
ログイン機能
1 2 3 4 5 | <?php define('DSN', 'mysql:host=localhost;dbname=データベース名'); define('DB_USER', 'ユーザー名'); define('DB_PASS', 'データベースのパスワード'); ?> |
ログイン機能でもconfig.phpを使用していきます。
新規会員登録機能のときに作成したもので問題ありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php require_once('config.php'); session_start(); //メールアドレスのバリデーション if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo '入力された値が不正です。'; return false; } //DB内でPOSTされたメールアドレスを検索 try { $pdo = new PDO(DSN, DB_USER, DB_PASS); $stmt = $pdo->prepare('select * from userDeta where email = ?'); $stmt->execute([$_POST['email']]); $row = $stmt->fetch(PDO::FETCH_ASSOC); } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL; } //emailがDB内に存在しているか確認 if (!isset($row['email'])) { echo 'メールアドレス又はパスワードが間違っています。'; return false; } //パスワード確認後sessionにメールアドレスを渡す if (password_verify($_POST['password'], $row['password'])) { session_regenerate_id(true); //session_idを新しく生成し、置き換える $_SESSION['EMAIL'] = $row['email']; ?> <script type="text/javascript"> history.go(-3); </script> <?php } else { echo 'メールアドレス又はパスワードが間違っています。'; return false; } |
こちらに関してもデータベースとの接続によってログインをしていきます。
1~10行目ではconfig.phpを使ってデータベース接続をしています。
もし接続に失敗した場合はアラート文が表示されます。
11~19行目ではPHPを使って入力されたメールアドレスがデータベース内に存在するか検索しています。
検索する際に使用しているselece from where構文はSQLで頻繁に使われる表現ですので覚えておきましょう。
20~38行目では入力したメールアドレス・パスワードが間違っているかに応じて処理を分けています。
31~33行目では唯一JavaScriptを使用しています。
history.go(-3)とは3つ前のページに戻る処理を意味しています。
つまりログインが完了した状態でログインする前のページに移動する処理になります。
必要のない方は削除しても大丈夫です。
まとめ:PHPで会員登録&ログイン機能を作成してみた
PHPではフォームを使って会員登録機能やログイン機能を実装できます。
みなさんもぜひ実装してみてください!
なお、MySQLなどのデータベースを用いたコードを実装するにはVPSサーバー構築や専用ドメインを取得する必要があります。
私は普段VPSサーバーはさくらのVPSを、専用ドメインはお名前.com愛用しています。
よかったら下のリンクからご利用してみてください!
PHPの学習でつまづいた時、独学に限界を感じた時はこちらの記事もオススメです。
PHPが学べるプログラミングスクールおすすめ8選!無料のスクールも解説
PHPを学習して挫折したからプログラミングスクールに入塾したい!でもどのスクールが良いんだろう... PHPを学びたいけどまず何から始めたら良いのか分からない...プログラミングスクールでプロ講師から ...
更新日:2024年1月29日
SQLが学べるプログラミングスクールおすすめ8選【2024年最新版】
SQLを学習して挫折したからプログラミングスクールに入塾したい!でもどのスクールが良いんだろう... SQLを学びたいけどまず何から始めたら良いのか分からない...プログラミングスクールでプロ講師から ...
更新日:2024年1月29日
HTML/CSSが学べるプログラミングスクールおすすめ10選【2024年最新版】
HTML/CSSを学習して挫折したからプログラミングスクールに入塾したい!でもどのスクールが良いんだろう... HTML/CSSを学びたいけどまず何から始めたら良いのか分からない...プログラミングス ...
更新日:2024年1月29日
無料体験できるプログラミングスクールおすすめ10選を解説
プログラミングスクールって思ったより高いからなかなか決められない... 無料体験できるプログラミングスクールを知りたい! せっかくプログラミングスクールに入るなら、無料体験に参加して自分に合うスクール ...
更新日:2024年1月29日