Pour créer une application en PHP avec une base de données MySQL et une interface d'administration, nous allons suivre ces étapes :
Configurer l'environnement de développement : Installer un serveur web (Apache), PHP, et MySQL (par exemple avec XAMPP ou WAMP).
Créer la base de données MySQL : Définir les tables et leurs relations.
Développer l'application : Écrire le code PHP pour interagir avec la base de données, gérer les sessions, et créer les pages pour l'interface utilisateur et l'administration.
Voici un exemple d'application simple avec gestion des utilisateurs :
1. Configuration de la base de données MySQL
Créez une base de données nommée my_app
avec une table users
:
sql
CREATE DATABASE my_app;
USE my_app;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
role ENUM('admin', 'user') NOT NULL DEFAULT 'user'
);
2. Configuration de l'application PHP
Structure des fichiers
bash/my_app /admin dashboard.php /includes config.php functions.php /public index.php login.php register.php logout.php .htaccess
3. Code PHP
includes/config.php
php
<?php
// Configuration de la base de données
$host = 'localhost';
$db = 'my_app';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
includes/functions.php
php
<?php
session_start();
function registerUser($pdo, $username, $password, $email) {
$sql = "INSERT INTO users (username, password, email) VALUES (:username, :password, :email)";
$stmt = $pdo->prepare($sql);
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$stmt->execute(['username' => $username, 'password' => $passwordHash, 'email' => $email]);
}
function loginUser($pdo, $username, $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['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['role'] = $user['role'];
return true;
}
return false;
}
function isAdmin() {
return isset($_SESSION['role']) && $_SESSION['role'] === 'admin';
}
function isLoggedIn() {
return isset($_SESSION['user_id']);
}
function logoutUser() {
session_unset();
session_destroy();
}
?>
public/register.php
php
<?php
require '../includes/config.php';
require '../includes/functions.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
registerUser($pdo, $username, $password, $email);
header('Location: login.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<form action="register.php" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<input type="email" name="email" placeholder="Email" required>
<button type="submit">Register</button>
</form>
</body>
</html>
public/login.php
php
<?php
require '../includes/config.php';
require '../includes/functions.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
if (loginUser($pdo, $username, $password)) {
header('Location: ../admin/dashboard.php');
exit;
} else {
echo "Invalid credentials";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="login.php" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
</body>
</html>
admin/dashboard.php
php
<?php
require '../includes/config.php';
require '../includes/functions.php';
if (!isLoggedIn()) {
header('Location: ../public/login.php');
exit;
}
if (!isAdmin()) {
echo "Access denied.";
exit;
}
echo "Welcome to the admin dashboard, " . htmlspecialchars($_SESSION['username']);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Admin Dashboard</title>
</head>
<body>
<h1>Admin Dashboard</h1>
<a href="../public/logout.php">Logout</a>
</body>
</html>
public/logout.php
php
<?php
require '../includes/functions.php';
logoutUser();
header('Location: login.php');
exit;
?>
4. .htaccess
Configuration (optional)
Pour renforcer la sécurité en interdisant l'accès direct aux fichiers PHP dans le dossier includes
, vous pouvez ajouter un fichier .htaccess
:
python
# .htaccess file
<Files *.php>
Deny from all
</Files>
Cela constitue la base d'une application PHP avec une base de données MySQL et une interface d'administration. Vous pouvez étendre cette structure pour inclure des fonctionnalités supplémentaires telles que la gestion des utilisateurs, des articles, des permissions, etc.
Suggestions pour l'amélioration :
a. Ajouter des tests unitaires pour les fonctions PHP.
b. Implémenter la gestion des erreurs pour améliorer la robustesse de l'application.