PHPとMySQLを使ったログイン機能の作成!初心者向け10ステップガイド

PHPとMySQLを使ったログイン機能の作成ガイドのサムネイルPHP
この記事は約11分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPとMySQLを使ってログイン機能を作成する方法を学びたいと思っているあなたへ。

この記事はまさにあなたのために執筆したものです。

ここでは、初心者でも理解できるように、PHPとMySQLを使ってログイン機能を作成するためのステップバイステップのガイドを提供します。

サンプルコードとともに、データベースの設定からログイン状態の保持、セキュリティ対策まで、必要な全てをカバーします。

この記事を読み終わる頃には、あなた自身でログイン機能を作成することができるようになるでしょう。

●PHPとMySQLとは

PHPは、ウェブ開発で広く使用されているサーバーサイドのスクリプト言語です。

一方、MySQLは世界で最も人気のあるオープンソースのデータベース管理システムの一つです。

これら二つを組み合わせることで、ウェブサイトに動的な機能を追加することが可能になります。

●ログイン機能の流れ

ログイン機能の作成には、大きく分けて次のステップがあります。

  1. ユーザーがログインフォームにユーザー名とパスワードを入力します。
  2. サーバーは、入力されたユーザー名とパスワードがデータベースに保存されている情報と一致するかを確認します。
  3. 一致する情報があれば、サーバーはセッションを開始し、ユーザーを認証します。
  4. 一致する情報がなければ、エラーメッセージを表示します。

これらのステップをPHPとMySQLを使って実装する方法を、次のセクションで詳しく説明します。

●PHPとMySQLを使ったログイン機能の作成ステップ

○ステップ1:データベースの設定

まずはじめに、MySQLデータベースを設定します。

データベースには、ユーザーのユーザー名とパスワードが保存されます。

<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

このコードでは、PDO(PHP Data Objects)を使ってMySQLデータベースに接続しています。

$dsnはデータソースネームで、どのデータベースに接続するかを指定します。

$user$passwordは、データベースのユーザー名とパスワードです。

new PDO()で新しいPDOインスタンスを作成し、データベースに接続します。接続に失敗した場合は、エラーメッセージが表示されます。

○ステップ2:ログインフォームの作成

次に、ユーザーがユーザー名とパスワードを入力できるログインフォームを作成します。

<form action="login.php" method="post">
    <label for="username">ユーザー名:</label>
    <input type="text" id="username" name="username">
    <label for="password">パスワード:</label>
    <input type="password" id="password" name="password">
    <input type="submit" value="ログイン">
</form>

このコードでは、<form>タグを使ってフォームを作成しています。

action属性には、フォームデータを処理するPHPファイルの名前(この場合はlogin.php)を指定します。

method属性にはpostを指定して、フォームデータをHTTP POSTメソッドで送信します。

<input>タグを使ってユーザー名とパスワードの入力フィールドを作成し、type="submit"<input>タグを使って送信ボタンを作成します。

○ステップ3:ユーザー情報の確認

ユーザーがログインフォームに情報を入力し、送信ボタンをクリックすると、login.phpが呼び出されます。

このスクリプトでは、入力されたユーザー名とパスワードがデータベースに存在するかを確認します。

<?php
session_start();
require_once 'dbconfig.php';

if(isset($_POST['username']) && isset($_POST['password'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = 'SELECT * FROM users WHERE username = :username';
    $stmt = $pdo->prepare($sql);
    $stmt->execute(['username' => $username]);
    $user = $stmt->fetch();

    if($user && password_verify($password, $user['password'])) {
        $_SESSION['username'] = $user['username'];
        echo 'ログイン成功';
    } else {
        echo 'ログイン失敗';
    }
}
?>

このコードでは、まずsession_start()を呼び出してセッションを開始します。

次に、isset()関数を使って$_POST['username']$_POST['password']が設定されているかを確認します。

これらの変数は、ユーザーがログインフォームに入力したユーザー名とパスワードです。

SELECT * FROM users WHERE username = :usernameというSQLクエリを実行して、入力されたユーザー名がデータベースに存在するかを確認します。

:usernameはプレースホルダで、$stmt->execute(['username' => $username])で実際のユーザー名に置き換えられます。

$stmt->fetch()でクエリの結果を取得し、$userに保存します。

$userが存在し、password_verify($password, $user['password'])trueを返す場合(つまり、入力されたパスワードがデータベースのパスワードと一致する場合)、ユーザーは認証され、$_SESSION['username']にユーザー名が保存されます。

それ以外の場合は、エラーメッセージが表示されます。

○ステップ4:セッションの開始

ユーザーが正しく認証されると、セッションが開始されます。

セッションは、ユーザーがウェブサイトを離れてもその状態を保持するための仕組みです。

PHPでは、$_SESSIONスーパーグローバル配列を使ってセッションデータを保存します。

<?php
if($user && password_verify($password, $user['password'])) {
    $_SESSION['username'] = $user['username'];
    echo 'ログイン成功';
} else {
    echo 'ログイン失敗';
}
?>

このコードでは、ユーザーが正しく認証されると、$_SESSION['username']にユーザー名が保存されます。

これにより、他のページからもユーザー名にアクセスすることができます。

○ステップ5:ログイン状態の保持

ログイン状態を保持するためには、各ページでセッションを開始し、$_SESSION['username']が設定されているかを確認します。

<?php
session_start();

if(isset($_SESSION['username'])) {
    echo 'ようこそ, ' . $_SESSION['username'] . 'さん';
} else {
    echo 'ログインしてください';
}
?>

このコードでは、session_start()を呼び出してセッションを開始し、isset($_SESSION['username'])$_SESSION['username']が設定されているかを確認します。

$_SESSION['username']が設定されていれば、ユーザーはログイン状態であると判断し、ユーザー名を表示します。

それ以外の場合は、ログインを促すメッセージを表示します。

○ステップ6:ログアウト機能の追加

ログイン機能と同様に、ログアウト機能も重要です。

ログアウトすると、現在のセッションが破棄され、ユーザーのログイン状態が解除されます。

<?php
session_start();

if(isset($_POST['logout'])) {
    session_destroy();
    echo 'ログアウトしました';
}
?>

このコードでは、$_POST['logout']が設定されているかを確認します。

これは、ログアウトボタンがクリックされたときに設定されます。$_POST['logout']が設定されていれば、session_destroy()を呼び出してセッションを破棄し、ログアウトメッセージを表示します。

○ステップ7:セキュリティ対策

ログイン機能を実装する際には、セキュリティ対策も重要です。

特に、SQLインジェクションとパスワードの安全な保存に注意が必要です。

SQLインジェクションは、不正なSQLクエリを注入されることによる攻撃です。

これを防ぐためには、ユーザーからの入力を直接SQLクエリに組み込まず、プレースホルダとパラメータ化クエリを使用します。

前述のコードでは、この方法を使用しています。

パスワードの安全な保存には、ハッシュ関数を使用します。

ハッシュ関数は、パスワードを一方向に変換する関数で、元のパスワードを復元することはできません。

PHPでは、password_hash()関数を使用してパスワードをハッシュ化し、password_verify()関数を使用してハッシュ化されたパスワードを検証します。

○ステップ8:エラーハンドリング

エラーハンドリングは、プログラムが予期しない状況に適切に対応するための重要なステップです。

例えば、データベース接続に失敗した場合や、ユーザーが存在しない場合など、エラーメッセージを表示してユーザーに通知することが重要です。

<?php
try {
    $pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

このコードでは、tryブロック内でPDOインスタンスを作成しています。

もしデータベース接続に失敗すると、catchブロックが実行され、エラーメッセージが表示されます。

○ステップ9:テストとデバッグ

コードの作成が完了したら、テストとデバッグを行います。

すべての機能が正しく動作するかを確認し、エラーやバグを見つけて修正します。

PHPには様々なデバッグツールがありますが、最も基本的な方法はvar_dump()関数を使用して変数の内容を表示することです。

○ステップ10:応用例とカスタマイズ

基本的なログイン機能が完成したら、次はそれを応用した機能の追加やカスタマイズを考えてみましょう。

例えば、パスワードを忘れたユーザー向けのパスワードリセット機能を追加することが考えられます。

また、ユーザーが次回から自動でログインできるように「ログイン状態を保持する」機能も追加可能です。

これらの機能を追加する際には、セキュリティを常に考慮することが重要です。

パスワードリセット機能を提供する場合、セキュリティコードをメールで送信するなど、ユーザーのアカウントを保護するための追加的なステップを講じる必要があります。

また、ログイン状態を保持する機能を提供する場合、クッキーを使用することが一般的ですが、これにはユーザーのプライバシーを保護するための対策が必要です。

●よくある質問とその答え

Q:次回から自動でログインする仕組みは?

A:次回から自動でログインする仕組みは、通常、クッキーを使用して実装されます。

ログイン時に「ログイン状態を保持する」オプションを選択すると、ユーザーのブラウザにクッキーが保存されます。

このクッキーには、ユーザーを識別するための情報が含まれています。

次回ユーザーがウェブサイトを訪れると、このクッキーがサーバーに送信され、ユーザーが自動的にログインされます。

Q:ログイン機能の流れは?

A:ログイン機能の基本的な流れは次の通りです。

1. ユーザーがユーザー名とパスワードを入力します。

2. サーバーは、入力されたユーザー名とパスワードがデータベースに保存されている情報と一致するかを確認します。

3. 一致する情報があれば、サーバーはセッションを開始し、ユーザーを認証します。

4. 一致する情報がなければ、エラーメッセージを表示します。

まとめ

この記事では、PHPとMySQLを使ってログイン機能を作成するためのステップバイステップのガイドを提供しました。

データベースの設定からログイン状態の保持、セキュリティ対策まで、必要な全てをカバーしました。

このガイドを参考に、自分自身でログイン機能を作成してみてください。

そして、応用例やカスタマイズに挑戦して、より高度な機能を追加してみてください。プログラミングは学び続けることが重要です。

新しいことを学び、試し、理解することで、より良いプログラマーになることができます。