PHP

PHPでログイン機能を実装したい!【手順解説で誰でも実装可能】

PHPでログイン機能を実装したい!【手順解説で誰でも実装可能】

 

PHPでログイン機能を簡単に実装したい。

 

こんな悩みにお答えします。

 

こんにちは、セイタです。

 

PHPを扱う上でログイン機能は基本になってきますが、最初は難しいと思えてしまうものですよね。

 

コードだけ見ていても理解するのは難しかったりして、途中で諦めて結局は諦めてしまうことも・・・。

 

そこで今回は、PHPでログイン機能追加するための方法について解説します。

 

本記事を参考にすることで、誰でもログイン機能を実装することが出来るので、是非ご覧ください。

 

本記事の内容

  • PHPでログイン機能を作成する方法
  • MySQLでデータベースを作る方法
  • 必要なプログラムの流れの理解方法

 

開発環境

  • OS:Windows 7
  • ブラウザ:Chrome バージョン: 80.0.3987.149(Official Build) (64 ビット)
  • 開発環境:XAMPP v3.2.4
  • エディター:Visual Studio Code バージョン:1.43.1

 

本記事の信頼性

日頃からプログラムを打っており、独学でIT企業へ転職経験あり。

 

PHPでログイン機能を実装したい!【手順解説で誰でも実装可能】

PHPでログイン機能を実装したい!【手順解説で誰でも実装可能】

 

PHPでログイン機能を実装するためには、こちらを作る必要があります。

 

  • HTMLでフォームを作る
  • MySQLでログインデータを作る
  • PHPでMySQLと接続する処理を書く

 

HTMLでページを作成する

それでは、実際にHTMLを使用してページを作成していきましょう。

 

今回は、PHPでログイン機能を実装することにのみフォーカスしているので、CSSでスタイルを整える部分については省いています。

 

//index.php

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">
    <title>ログイン機能</title>
  </head>

  <body>
              <h2>ログイン機能</h2>
              <div class="sign-up">
                <form action="" method="POST">
                  <div>
                    <label for="signup-id">アカウント名</label>
                    <div>
                      <input name="username" id="signup-id" placeholder="メールアドレスを入力してください">
                    </div>
                  </div>
                  <div>
                    <label for="signup-pass">パスワード</label>
                    <div>
                      <input name="password" id="signup-pass" placeholder="パスワードを入力してください">
                    </div>
                  </div>
                  <div>
                    <button name="signup" type="submit">Submit</button>
                  </div>
                </form>
              </div>
  </body>
</html>

 

内容としては、上記のようなコードで作成してみました。

メールアドレスとパスワードを入力して、サブミットボタンをクリックしたらデータベースのデータを確認して認証をするという流れです。

 

mysqlでデータベースを作成する

続いて、MySQLでデータベースのデータを作成していきましょう。

下記にコマンドラインで打ち込むものをまとめておいたので、順を追ってコマンドを打ち込んでいただければと思います。

 

//mysql にログイン
>mysql -u root -p

//データベースを作成
>create database データベース名;

//データベースを使用中にする
>ues データベース名;

//作成したデータベースに使用者権限を付ける
>grant all on データベース名.* to seita@localhost identified by 'パスワード';

//権限付与したユーザーでMySQLに再ログイン
>mysql -u 作成したユーザー -p
password:一個前で設定したパスワードを入力

//データベースを使用中にする
>ues データベース名;

//作成したデータベースにテーブルを作る
>create table users (
     id int not null auto_increment primary key,
     username varchar(100) not null,
     password varchar(255) not null);

//実際にテーブルが上記の内容で作成されているか確認
>desc データベース名;

 

これで、ログイン認証するために必要なデータベースを作成することができました。

次に、ログインのときに認証対象になるアカウント情報をデータベースに追加していきましょう。

 

コマンドラインでユーザー情報を入力

先程のコマンドラインの状況で、こちらのようにコマンドを打ち込んでください。

 

insert into users values (1, 'sampleuser', 'samplepass');

 

以上のコマンドを打ち込むことによって、id1にuserとpassというデータが挿入されたと思います。

 

このデータを参照してユーザー認証を行っていくので、アカウント情報は書き留めておきましょう。

 

注意ポイント

忘れると、またコマンドラインでuesrsテーブルにコマンドで移動してこないといけないので、結構めんどくさいです。

 

PHPでログイン認証の処理を作成していく

それでは下準備が完成したので、PHPでログイン機能を作成していきます。

 

ぼくが作成するログイン機能については、【PHP】ログイン機能作ってみた【Webアプリ】という『すっきりプログラミング』さんの動画が軸となっているので、興味のある方は他の動画も見てみてください。

 

では実際にコードを見ていきましょう。

 

//①エラーメッセージの初期状態を空に
$err_msg = "";

//②サブミットボタンが押されたときの処理
if (isset($_POST['login'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];
//③データが渡ってきた場合の処理
  try {
    $db = new PDO('mysql:host=localhost; dbname=データベース名','ユーザー名','パスワード');
    $sql = 'select count(*) from users(認証するテーブル名) where username=? and password=?';
    $stmt = $db->prepare($sql);
    $stmt->execute(array($username,$password));
    $result = $stmt->fetch();
    $stmt = null;
    $db = null;
//④ログイン認証ができたときの処理
    if ($result[0] != 0){
      header('Location: http://localhost/home.php');
    exit;
//⑤アカウント情報が間違っていたときの処理
    }else{
      $err_msg = "アカウント情報が間違っています。";
    }
//⑥データが渡って来なかったときの処理
  }catch (PDOExeption $e) {
    echo $e->getMessage();
    exit;
  }
}

 

ちょっと長めになりましたが、PHP部分の処理はこのような感じになります。

 

データベース情報に関しては、別のPHPファイルにまとめてrequire_onceしても良いのですが、今回はこのような形式での実装です。

 

サブミットボタンが押されたときの処理の解説

②の部分では、form内のinputタグに設定されているnameとsubmitボタンのname部分が一致している状況になっています。

 

//②サブミットボタンが押されたときの処理
if (isset($_POST['login'])) {
  $username = $_POST['username'];
  $password = $_POST['password'];

 

loginはsubmitボタンのname。

usernameとpasswordはinputタグに設定されているname属性が一致している状況になっていて、それぞれusename変数とpassword変数に代入している形になっています。

 

データが渡ってきた場合の処理の解説

③に関しては、サブミットボタンからデータが渡ってきたら行う処理を書いています。

 

//③データが渡ってきた場合の処理
  try {
    $db = new PDO('mysql:host=localhost; dbname=データベース名','ユーザー名','パスワード');
    $sql = 'select count(*) from users(認証するテーブル名) where username=? and password=?';
    $stmt = $db->prepare($sql);
    $stmt->execute(array($username,$password));
    $result = $stmt->fetch();
    $stmt = null;
    $db = null;

 

ここでは書く処理を上から順番に簡単に解説していきます。

 

  • $dbにPDOを使用して、MySQLの接続情報を設定する
  • $sqlに認証したいデータベース内のテーブル名とカラムを指定する
  • $stmtに$dbに$sqlのデータにアクセスするための準備をする(prepare関数)
  • $stmtに対して$usernameと$passwordを配列として追加する
  • $resultに$stmtで取得したデータを取得する
  • 最後に$stmtと$dbの中身をnullにして処理終了

 

ログイン認証ができたときの処理とその他処理の解説

//④ログイン認証ができたときの処理
    if ($result[0] != 0){
      header('Location: http://localhost/home.php');
    exit;
//⑤アカウント情報が間違っていたときの処理
    }else{
      $err_msg = "アカウント情報が間違っています。";
    }
//⑥データが渡って来なかったときの処理
  }catch (PDOExeption $e) {
    echo $e->getMessage();
    exit;
  }
}

 

④⑤は、ログイン状態を認証できた場合の移動先を指定する処理です。

 

認証が正常に行われた場合には、home.phpに移動するようになっていて、失敗した場合には同じページでerr_msgに『アカウント情報が間違っています。』という文字列を表示するようになっています。

※先頭に追加していた$err_msg=""の部分に入ってくる流れです。

 

⑥では、サブミットボタンを押したときにデータが渡ってこなかったときの処理となっていて、例外メッセージが表示される役割を持っています。

 

実際にPHPファイルを表示して、ログインできるかチェックしてみよう!

実際にPHPファイルを表示して、ログインできるかチェックしてみよう!

 

ここまでの処理で作成したindex.phpで、フォームのボタンをクリックしたらMySQLのデータを確認してログインできるようになっているかと思います。

 

今回は、ログイン機能の実装のみを解説しましたが、新規会員登録の機能を実装してからログイン機能を実装したほうが楽だったりします。

 

PHPの会員登録機能については、PHPで会員登録機能を実装したい!【誰でも実装可能!】で解説しているので、併せてチェックしてみてください。

 

会員登録機能とログイン機能で使用するデータベースは同じものを使用するので、ログイン機能を作ったあとでも会員登録機能を作成することが可能となっています。

 

”作り直し”にはならないので、安心してくださいね!

 

\Twitterのフォローをお願いしますっ /

  • この記事を書いた人
  • 最新記事
セイタ

セイタ

『ひとつ先のブログ情報』を発信するSEITALITYの管理人。ブログ月収41万円。専業アフィリエイター兼ブロガーとして活動しています。趣味はギター・ゲーム・ガジェット集め。最近はAPEX Legendsがブーム。愛用デバイスはG502 HEROとAPEX PRO TKL。

-PHP
-

© 2020 SEITALITY