The student will be able do the following tasks after completing the tutorial.
- Understand the fundamentals of user authentication.
- Learn how to store and retrieve data from MySQL dynamically.
- Gain insights into error handling and security best practices.
- Build a simple CRUD application (blog or task manager).
User Authentication: Login and Registration System
- Why authentication is necessary (security, personalized user experience).
- Steps in a basic authentication system:
- Registration (adding user data to the database).
- Login (verifying user credentials).
- Session management (keeping users logged in).
Database Setup:
Create a users table:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
Explain password hashing using password_hash() and password_verify() in PHP for security.
Hands-On Code:
Registration Form (register.php):
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = htmlspecialchars($_POST['username']);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$conn = new mysqli("localhost", "root", "", "mydatabase");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $password);
if ($stmt->execute()) {
echo "Registration successful!";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
$conn->close();
}
?>
<form method="POST">
Username: <input type="text" name="username" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit">Register</button>
</form>
Login Form (login.php):
<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = htmlspecialchars($_POST['username']);
$password = $_POST['password'];
$conn = new mysqli("localhost", "root", "", "mydatabase");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("SELECT password FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($hashed_password);
if ($stmt->fetch() && password_verify($password, $hashed_password)) {
$_SESSION['username'] = $username;
echo "Login successful!";
} else {
echo "Invalid credentials!";
}
$stmt->close();
$conn->close();
}
?>
<form method="POST">
Username: <input type="text" name="username" required><br>
Password: <input type="password" name="password" required><br>
<button type="submit">Login</button>
</form>
Storing and Retrieving Data Dynamically from MySQL
CRUD operations:
- Create: Insert data into the database.
- Read: Retrieve data using SELECT queries.
- Update: Modify existing records.
- Delete: Remove records.
Hands-On Code:
Creating Data (Add a Task):
<?php
$task = htmlspecialchars($_POST['task']);
$conn = new mysqli("localhost", "root", "", "mydatabase");
$stmt = $conn->prepare("INSERT INTO tasks (task) VALUES (?)");
$stmt->bind_param("s", $task);
$stmt->execute();
$stmt->close();
$conn->close();
?>
<form method="POST">
Task: <input type="text" name="task" required>
<button type="submit">Add Task</button>
</form>
Reading Data (Display Tasks):
<?php
$conn = new mysqli("localhost", "root", "", "mydatabase");
$result = $conn->query("SELECT * FROM tasks");
while ($row = $result->fetch_assoc()) {
echo $row['task'] . "<br>";
}
$conn->close();
?>
Error Handling and Security Best Practices
Error Handling:
- Use try and catch blocks for error management in database operations.
- Log errors instead of displaying them to users.
Security Best Practices:
- Sanitize user input using htmlspecialchars() or mysqli_real_escape_string().
- Always use prepared statements to prevent SQL injection.
- Hash sensitive data like passwords with password_hash().
- Avoid storing sensitive credentials (e.g., database passwords) in code—use environment variables.
Lab Exercise: Build a Simple CRUD Application
Create a task manager application where users can add, view, edit, and delete tasks.
