Réaliser un CRUD en PHP : 1/3 – la méthode procédurale

Réaliser un CRUD en PHP est souvent l’une des premières choses que l’on cherche à apprendre lorsque l’on souhaite devenir développeur back-end ou full-stack. Nous allons voir ici comment réaliser un CRUD en PHP de manière procédurale. Nous verrons bientôt comment réaliser un CRUD PHP en PDO et en POO.

Le code de la page index.php

Ce code inclut les parties back-end et front-end. Le front-end est le plus minime possible et le back-end ne prend pas en compte toutes les mesures nécessaires à la sécurité de votre site.

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Titre de la page</title>
</head>
<body>
<?php 
    // Connexion à la base de données 
    $host = "localhost"; 
    $user = "root"; 
    $password = "root"; 
    $database = "nom_de_la_base_de_donnees"; 
    $connexion = mysqli_connect($host, $user, $password, $database); 
    // Vérification de la connexion 
    if (!$connexion) { 
        die("La connexion à la base de données a échoué : " . mysqli_connect_error()); 
    } 

    // Create 
    if (isset($_POST['create'])) { 
        $nom = $_POST['nom']; 
        $prenom = $_POST['prenom']; 
        $email = $_POST['email']; 
        $sql = "INSERT INTO utilisateurs (nom, prenom, email) VALUES ('$nom', '$prenom', '$email')"; 
        if (mysqli_query($connexion, $sql)) 
            { echo "L'utilisateur a été ajouté avec succès."; } 
        else { echo "Erreur : " . mysqli_error($connexion); } 
    } 

    // Read 
    $sql = "SELECT * FROM utilisateurs"; 
    $resultat = mysqli_query($connexion, $sql); 
    if (mysqli_num_rows($resultat) > 0) { 
        echo "<table border='1'>
            <tr>
            <th>ID</th>
            <th>Nom</th>
            <th>Prénom</th>
            <th>Email</th>
            <th>Actions</th>
            </tr>";
        while($row = mysqli_fetch_assoc($resultat)) {
            echo "<tr>
            <td>".$row['id']."</td>
            <td>".$row['nom']."</td>
            <td>".$row['prenom']."</td>
            <td>".$row['email']."</td>
            <td>
            <a href='update.php?id=".$row['id']."'>Modifier</a>
            <a href='index.php?delete=".$row['id']."'>Supprimer</a>
            </td>
            </tr>";
        }
        echo "</table>";
    } else { 
        echo "Aucun utilisateur trouvé."; 
    } 

    // Update 
    if (isset($_POST['update'])) { 
        $id = $_POST['id']; $nom = $_POST['nom']; 
        $prenom = $_POST['prenom']; 
        $email = $_POST['email']; 
        $sql = "UPDATE utilisateurs SET nom='$nom', prenom='$prenom', email='$email' WHERE id=$id"; 
        if (mysqli_query($connexion, $sql)) { 
            echo "L'utilisateur a été mis à jour avec succès."; } 
        else { echo "Erreur : " . mysqli_error($connexion); } 
    } 
    // Delete 
    if (isset($_GET['delete'])) { 
        $id = $_GET['delete']; 
        $sql = "DELETE FROM utilisateurs WHERE id=$id"; 
        if (mysqli_query($connexion, $sql)) { 
            echo "L'utilisateur a été supprimé avec succès."; } 
        else { echo "Erreur : " . mysqli_error($connexion); } 
    } 
    // Fermeture de la connexion à la base de données mysqli_close($connexion);
?>  
<h1>Ajouter un utilisateur</h1>
<form action="index.php" method="POST">
    <label for="nom">Nom:</label>
    <input type="text" id="nom" name="nom" required><br>

    <label for="prenom">Prénom:</label>
    <input type="text" id="prenom" name="prenom" required><br>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required><br>

    <input type="submit" name="create" value="Ajouter">
</form>
</body>
</html>

Dans cet exemple, nous avons : 

  • Une connexion à une base de données MySQLi 
  • Un bloc “Create” qui permet de créer un nouvel utilisateur 
  • Un bloc “Read” qui récupère tous les utilisateurs de la base de données et les affiche 
  • Un bloc “Update” qui permet de mettre à jour les informations d’un utilisateur existant 
  • Un bloc “Delete” qui permet de supprimer un utilisateur existant 

Notez que dans cet exemple, nous utilisons des requêtes SQL directement dans le code PHP. Cela peut poser des problèmes de sécurité, car les utilisateurs malveillants pourraient exploiter les failles de sécurité dans votre code pour supprimer ou modifier des données dans la base de données. Il est donc recommandé d’utiliser des requêtes préparées et des techniques de validation pour assurer la sécurité de votre application. 

Le code de la page update.php

Pour compléter notre code, nous allons créer une page update.php. Celle-ci nous permettra de modifier notre utilisateur sur une page indépendante.

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Modifier un utilisateur</title>
</head>
<body>
<?php
// Connexion à la base de données
$host = "localhost";
$user = "root";
$password = "root";
$database = "nom_de_la_base_de_donnees";
$connexion = mysqli_connect($host, $user, $password, $database);
// Vérification de la connexion
if (!$connexion) {
die("La connexion à la base de données a échoué : " . mysqli_connect_error());
}

// Récupération de l'identifiant de l'utilisateur à modifier
if (isset($_GET['id'])) {
$id = $_GET['id'];
} else {
header('Location: index.php');
}

// Récupération des informations de l'utilisateur à modifier
$sql = "SELECT * FROM utilisateurs WHERE id=$id";
$resultat = mysqli_query($connexion, $sql);
$row = mysqli_fetch_assoc($resultat);

// Mise à jour de l'utilisateur
if (isset($_POST['update'])) {
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $email = $_POST['email'];
    $sql = "UPDATE utilisateurs SET nom='$nom', prenom='$prenom', email='$email' WHERE id=$id";
    if (mysqli_query($connexion, $sql)) {
        mysqli_close($connexion);
        header('Location: index.php');
        exit;
    } else {
        echo "Erreur : " . mysqli_error($connexion);
    }
}
?>

<h1>Modifier un utilisateur</h1>
<form action="update.php?id=<?php echo $id; ?>" method="POST">
    <label for="nom">Nom:</label>
    <input type="text" id="nom" name="nom" required value="<?php echo $row['nom']; ?>"><br>
    <label for="prenom">Prénom:</label>
    <input type="text" id="prenom" name="prenom" required value="<?php echo $row['prenom']; ?>"><br>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required value="<?php echo $row['email']; ?>"><br>

    <input type="submit" name="update" value="Mettre à jour">
</form>
</body>
</html> 

Vous avez là la base des bases pour votre CRUD procédural !

Dans de prochains épisodes nous verrons comment les réaliser avec PDO (PHP Data Object) et avec la POO (Programmation Orientée Objet).