Kujenga mfumo wa login na authentication ni hatua ya msingi katika miradi yote ya PHP inayohitaji usalama. Mfumo huu unahakikisha kwamba watumiaji wanathibitishwa (authenticated) kabla ya kufikia sehemu za siri kama Admin Panel au Dashboard.

Katika makala hii, tutajifunza hatua kwa hatua jinsi ya:

Kutengeneza Login Table kwenye MySQL

Kuunda User Registration & Login Pages

Kuweka Authentication Check kwa usalama wa mfumo

⚙️ Mahitaji Muhimu

PHP (kwa logic ya mfumo)

MySQL Database (kwa kuhifadhi data za watumiaji)

HTML + CSS (kwa muonekano wa forms)

XAMPP au Laragon (kwa server ya local)

🧩 Hatua ya 1: Tengeneza Database na Login Table

Fungua phpMyAdmin na tengeneza database inayoitwa user_auth_system.
Kisha andika SQL ifuatayo:

CREATE DATABASE user_auth_system;
USE user_auth_system;

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
email VARCHAR(100),
password VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


✅ Hapa tumetumia password VARCHAR(255) ili kuhifadhi neno la siri lililofichwa kwa hashing.

🧩 Hatua ya 2: Kuunganisha PHP na Database

Faili: db_connect.php

<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "user_auth_system";

$conn = new mysqli($host, $user, $pass, $dbname);

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>

🧩 Hatua ya 3: Kuunda Registration Page

Faili: register.php

<?php include 'db_connect.php'; ?>

<!DOCTYPE html>
<html>
<head>
<title>User Registration</title>
<style>
body { font-family: Arial; margin: 30px; }
form { max-width: 400px; margin: auto; }
input { width: 100%; padding: 10px; margin: 5px 0; }
button { background: green; color: white; border: none; padding: 10px; cursor: pointer; }
</style>
</head>
<body>

<h2>User Registration</h2>

<form method="POST">
Username: <input type="text" name="username" required><br>
Email: <input type="email" name="email" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit" name="register">Register</button>
</form>

<?php
if (isset($_POST['register'])) {
$username = $_POST['username'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

$sql = "INSERT INTO users (username, email, password) VALUES ('$username','$email','$password')";
if ($conn->query($sql)) {
echo "<p style='color:green;'>✅ Registration successful!</p>";
} else {
echo "<p style='color:red;'>⚠️ Error: " . $conn->error . "</p>";
}
}
?>

</body>
</html>


💡 Ufafanuzi:

password_hash() inaficha neno la siri kwa usalama.

Tunahifadhi jina la mtumiaji, barua pepe, na neno la siri lililofichwa.

🧩 Hatua ya 4: Kuunda Login Page

Faili: login.php

<?php
include 'db_connect.php';
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<title>User Login</title>
<style>
body { font-family: Arial; margin: 30px; }
form { max-width: 400px; margin: auto; }
input { width: 100%; padding: 10px; margin: 5px 0; }
button { background: blue; color: white; border: none; padding: 10px; cursor: pointer; }
</style>
</head>
<body>

<h2>User Login</h2>

<form method="POST">
Username: <input type="text" name="username" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit" name="login">Login</button>
</form>

<?php
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM users WHERE username='$username'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if (password_verify($password, $row['password'])) {
$_SESSION['username'] = $row['username'];
header("Location: dashboard.php");
} else {
echo "<p style='color:red;'>❌ Wrong password!</p>";
}
} else {
echo "<p style='color:red;'>❌ User not found!</p>";
}
}
?>

</body>
</html>

🧩 Hatua ya 5: Dashboard na Authentication Check

Faili: dashboard.php

<?php
session_start();
if (!isset($_SESSION['username'])) {
header("Location: login.php");
exit;
}
?>

<!DOCTYPE html>
<html>
<head><title>Dashboard</title></head>
<body>
<h2>Welcome, <?= $_SESSION['username']; ?> 🎉</h2>
<p>Umeingia vizuri kwenye mfumo wako wa PHP Authentication.</p>
<a href="logout.php">Logout</a>
</body>
</html>

🧩 Hatua ya 6: Logout Page

Faili: logout.php

<?php
session_start();
session_destroy();
header("Location: login.php");
?>

💡 Vidokezo Muhimu vya Usalama

Tumia password_hash() na password_verify() kila mara.

Epuka SQL injection kwa kutumia prepared statements.

Weka session timeout kwa usalama zaidi.

✅ Hitimisho

Sasa umejifunza jinsi ya kujenga mfumo kamili wa Login na Authentication kwa PHP na MySQL.
Mfumo huu unaweza kupanuliwa kwa:

Kuongeza User Roles (Admin, User)

Kufanya Password Reset System

Kutumia Security Tokens (CSRF protection)

🔗 Soma zaidi hapa:

👉 https://www.faulink.com/