PHP - MySQL ログイン:ビギナーズガイド

こんにちは、ウェブ開発者の志望者たち!今日は、PHPとMySQLの世界に飛び込み、シンプルで強力なログインシステムを作成する興奮人心的な旅に出かけます。このスキルを年間で教えてきた私から言わせると、このスキルをマスターすることは、ウェブ開発の世界に隠されたドアを開くことようなものです。では、袖をまくって潜りましょう!

PHP - MySQL Login

全体像を理解する

コードを書き始める前に、目標を理解するために少し時間を取ります。想像してみてください、ツリーハウスを建てているところです。しっかりとした基盤、壁、屋根、そして出入りする方法が必要です。私たちのPHP-MySQLログインシステムも同様です:

  • Config.php: これは私たちの基盤で、データベースに接続します。
  • Login.php: これはツリーハウスのドアと考えます。
  • Session.php: これはツリーハウスの中に誰がいるかを追跡します。
  • Welcome.php: 認証されたユーザーが集まる快適な内部空間です。
  • Logout.php: ユーザーに退出する道を示す出口のサインです。

では、それぞれの部分をステップバイステップで構築しましょう!

Config.php: 基盤を築く

このファイルは、PHPとMySQLの間の秘密の握手のようなものです。ここにデータベース接続の詳細を保存します。

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("エラー: 接続できません。 " . mysqli_connect_error());
}
?>

これを分解すると:

  • define()を使用して、データベースの詳細のための定数を設定しています。
  • mysqli_connect()を使用して、MySQLデータベースに接続しています。
  • 接続が失敗した場合、die()を使用して実行を停止し、エラーメッセージを表示します。

プロ tip: 実際のデータベースクレデンシャルを決して共有しないでください!この例ではデフォルトの値を使用していますが、実際のプロジェクトではこれを秘密にしてください!

Login.php: 門番

ここでは魔法が起こります。ユーザーがクレデンシャルを入力し、許可されているかどうかを確認します。

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "無効なユーザー名またはパスワード。";
}
}
} else{
$login_err = "無効なユーザー名またはパスワード。";
}
} else{
echo "おっと!何かが間違いました。後で再試行してください。";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
<h2>ログイン</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>ユーザー名</label>
<input type="text" name="username" required>
</div>
<div>
<label>パスワード</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="ログイン">
</div>
</form>
</body>
</html>

これは相当な量の情報です!以下に分解すると:

  • セッションを開始し、configファイルをインクルードします。
  • フォームがPOSTメソッドで送信されたかどうかを確認します。
  • プリペアドステートメントを使用してSQLインジェクションを防止します。
  • パスワードをpassword_verify()を使用して確認します(実際のプロジェクトでは常にパスワードをハッシュします!)。
  • ログインが成功した場合、セッション変数を設定し、welcome.phpにリダイレクトします。
  • シンプルなHTMLフォームを用意し、ユーザーがクレデンシャルを入力できるようにします。

実際のアプリケーションでは、さらに多くのセキュリティ対策とエラーハンドリングを追加したいですね!

Session.php: ボディーガード

このファイルは、ユーザーがログインしているかどうかを確認します。していない場合、ログインページに送り返します。

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

これはシンプルです!このコード:

  • セッションを開始します。
  • ユーザーがログインしているかどうかを確認します。
  • ログインしていない場合、ログインページにリダイレクトします。

Welcome.php: VIPエリア

ユーザーがログインに成功した後、ここに来ます。

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ようこそ</title>
</head>
<body>
<h1>こんにちは、<b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>。当サイトにようこそ。</h1>
<p>
<a href="logout.php">ログアウト</a>
</p>
</body>
</html>

ここで起こっていることは:

  • session.phpをインクルードして、ログインしているユーザーだけがこのページにアクセスできるようにします。
  • セッションに保存されているユーザー名を使用して、パーソナライズされた欢迎メッセージを表示します。
  • ログアウトリンクを提供します。

Logout.php: 出口

最後に、ユーザーが安全にログアウトする方法が必要です。

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

このスクリプト:

  • セッションを開始します。
  • すべてのセッション変数を解除します。
  • セッションを破壊します。
  • ユーザーをログインページにリダイレクトします。

すべてを組み合わせる

今までに構築したすべての部分がどのように連携するかをまとめましょう:

ファイル 目的 主要な機能
Config.php データベース接続 mysqli_connect()
Login.php ユーザー認証 mysqli_prepare(), password_verify()
Session.php セッション管理 session_start(), $_SESSION checks
Welcome.php 認証されたユーザーのページ パーソナライズされたコンテンツを表示
Logout.php ユーザーのセッション終了 session_destroy()

そして、ここまでで基本的なPHP-MySQLログインシステムが完成しました!実際のアプリケーションでは、以下のような機能を追加したいですね:

  • パスワードリセット機能
  • 「ログインを保持」オプション
  • よりrobustなエラーハンドリング
  • 强化されたセキュリティ対策

練習を続け、好奇心を持ち続けてください。それさえあれば、複雑なウェブアプリケーションを簡単に構築できるようになるでしょう。未来のウェブ魔法使い、ハッピーコーディング!

Credits: Image by storyset