Live Coding : Créer un CRUD en PHP

11 avril 2020 - : PHP Tutoriel Live-Coding - : 0 commentaire - Tutoriel Base de données MySQL PHP Live-Coding

Visualisez les fichiers de cette série sur GitHub

Dernière modification le 11 avril 2020

Nous allons voir dans ce live la méthode de création d'un CRUD en PHP, qui permettra de gérer complètement les enregistrements de la base de données.

Qu'est-ce qu'un CRUD

CRUD signifie :

  • CREATE : création des éléments dans la base
  • READ : lecture d'un ou plusieurs enregistrements
  • UPDATE : mettre à jour un enregistrement
  • DELETE : supprimer un enregistrement

Nous allons, pour cet article, nous baser sur une base de données appelée "crud" contenant une table "liste".

Cette table contiendra les colonnes suivantes "id", "produit", "prix" et "nombre".

Connexion à la base de données

Pour commencer, nous allons créer un fichier php que nous appellerons "connect.php" qui contiendra les informations de connexion à la base de données.

<?php
try{
    // Connexion à la bdd
    $db = new PDO('mysql:host=localhost;dbname=crud', 'root','');
    $db->exec('SET NAMES "UTF8"');
} catch (PDOException $e){
    echo 'Erreur : '. $e->getMessage();
    die();
}

Nous allons également créer un fichier de déconnexion qui s'appellera "close.php".

<?php
$db = null;

Affichage de tous les enregistrements de la base de données (READ)

Nous allons commencer par afficher sous forme de tableau la liste des enregistrements de la table "liste" dans le fichier "index.php".

La requête

Pour commencer, nous devons exécuter la requête SQL

SELECT * FROM `liste`;

Le code PHP correspondant pour exécuter cette requête est le suivant

<?php
// On écrit notre requête
$sql = 'SELECT * FROM `liste`';

// On prépare la requête
$query = $db->prepare($sql);

// On exécute la requête
$query->execute();

// On stocke le résultat dans un tableau associatif
$result = $query->fetchAll(PDO::FETCH_ASSOC);

L'affichage

Pour afficher les résultats, nous aurons besoin de boucler sur la variable "$result" de cette façon

<?php
foreach($result as $produit){

}

Si nous souhaitons faire un tableau, nous écrirons donc un code comme celui-ci.

<table>
    <thead>
        <th>ID</th>
        <th>Nom</th>
        <th>Prix</th>
        <th>Stock</th>
        <th>Actions</th>
    </thead>
    <tbody>
        <?php
        foreach($result as $produit){
            ?>
            <tr>
                <td><?= $produit['id'] ?></td>
                <td><?= $produit['produit'] ?></td>
                <td><?= $produit['prix'] ?></td>
                <td><?= $produit['nombre'] ?></td>
                <td><a href="details.php?id=<?= $produit['id'] ?>">Voir</a>  <a href="edit.php?id=<?= $produit['id'] ?>">Modifier</a>  <a href="delete.php?id=<?= $produit['id'] ?>">Supprimer</a></td>
            </tr>
            <?php
        }
        ?>
    </tbody>
</table>

Fichier complet

Le fichier "index.php" complet sera donc le suivant.

<?php

// On inclut la connexion à la base
require_once('connect.php');

// On écrit notre requête
$sql = 'SELECT * FROM `liste`';

// On prépare la requête
$query = $db->prepare($sql);

// On exécute la requête
$query->execute();

// On stocke le résultat dans un tableau associatif
$result = $query->fetchAll(PDO::FETCH_ASSOC);

require_once('close.php');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Liste des produits</title>
</head>
<body>

    <h1>Liste des produits</h1>
    <table>
        <thead>
            <th>ID</th>
            <th>Nom</th>
            <th>Prix</th>
            <th>Stock</th>
            <th>Actions</th>
        </thead>
        <tbody>
        <?php
            foreach($result as $produit){
        ?>
                <tr>
                    <td><?= $produit['id'] ?></td>
                    <td><?= $produit['produit'] ?></td>
                    <td><?= $produit['prix'] ?></td>
                    <td><?= $produit['nombre'] ?></td>
                    <td><a href="details.php?id=<?= $produit['id'] ?>">Voir</a>  <a href="edit.php?id=<?= $produit['id'] ?>">Modifier</a>  <a href="delete.php?id=<?= $produit['id'] ?>">Supprimer</a></td>
                </tr>
        <?php
            }
        ?>
        </tbody>
    </table>
    <a href="add.php">Ajouter</a>
</body>
</html>

Affichage d'un seul enregistrement de la base de données (READ)

Nous allons maintenant afficher un enregistrement de la table "liste" dans le fichier "details.php" sur la base de son "id".

La requête

Pour commencer, nous devons exécuter la requête SQL ci-dessous avec, par exemple, l'id 1

SELECT * FROM `liste` WHERE `id`= 1;

Le code PHP correspondant pour exécuter cette requête est le suivant

<?php
$sql = 'SELECT * FROM `liste` WHERE `id`=:id';

// On prépare la requête
$query = $db->prepare($sql);

// On attache les valeurs
$query->bindValue(':id', $id, PDO::PARAM_INT);

// On exécute la requête
$query->execute();

// On stocke le résultat dans un tableau associatif
$produit = $query->fetch();

L'affichage

Pour afficher les résultats, nous allons tout d'abord vérifier que nous avons bien un "id", ensuite nous exécuterons la requête. Si la requête retourne un résultat, nous l'afficherons.

<?php
session_start();

// On inclut la connexion à la base
require_once('connect.php');

if(isset($_GET['id']) && !empty($_GET['id'])){
    $id = strip_tags($_GET['id']);
    // On écrit notre requête
    $sql = 'SELECT * FROM `liste` WHERE `id`=:id';

    // On prépare la requête
    $query = $db->prepare($sql);

    // On attache les valeurs
    $query->bindValue(':id', $id, PDO::PARAM_INT);

    // On exécute la requête
    $query->execute();

    // On stocke le résultat dans un tableau associatif
    $produit = $query->fetch();

    if(!$produit){
        header('Location: index.php');
    }
}else{
    header('Location: index.php');
}

require_once('close.php');
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Liste des produits</title>

</head>
<body>
    <h1>Détails du produit <?= $produit['produit'] ?></h1>
    <p>ID : <?= $produit['id'] ?></p>
    <p>Produit : <?= $produit['produit'] ?></p>
    <p>Prix : <?= $produit['prix'] ?></p>
    <p>Nombre : <?= $produit['nombre'] ?></p>
    <p><a href="edit.php?id=<?= $produit['id'] ?>">Modifier</a>  <a href="delete.php?id=<?= $produit['id'] ?>">Supprimer</a></p>
</body>
</html>

Ajouter un enregistrement (CREATE)

Pour ajouter un enregistrement à la base de données, nous allons créer la page "add.php" qui aura une double utilisation :

  • Afficher le formulaire d'ajout
  • Traiter le formulaire

La requête

La requête permettant d'ajouter un produit dans la liste sera la suivante

INSERT INTO `liste` (`produit`, `prix`, `nombre`) VALUES (:produit, :prix, :nombre);

Le code PHP correspondant pour exécuter cette requête est le suivant

<?php
$sql = "INSERT INTO `liste` (`produit`, `prix`, `nombre`) VALUES (:produit, :prix, :nombre);";

$query = $db->prepare($sql);

$query->bindValue(':produit', $produit, PDO::PARAM_STR);
$query->bindValue(':prix', $prix, PDO::PARAM_STR);
$query->bindValue(':nombre', $nombre, PDO::PARAM_INT);

$query->execute();

Le formulaire

Le code HTML du formulaire permettant d'ajouter un produit est le suivant

<form method="post">
    <label for="produit">Produit</label>
    <input type="text" name="produit" id="produit">
    <label for="prix">Prix</label>
    <input type="text" name="prix" id="prix">
    <label for="nombre">Nombre</label>
    <input type="number" name="nombre" id="nombre">
    <button>Enregistrer</button>
</form>

Une fois envoyé, nous le traiterons en PHP et nous insérerons le nouveau produit dans la base

<?php
require_once('connect.php');

if(isset($_POST)){
    if(isset($_POST['produit']) && !empty($_POST['produit'])
        && isset($_POST['prix']) && !empty($_POST['prix'])
        && isset($_POST['nombre']) && !empty($_POST['nombre'])){
            $produit = strip_tags($_POST['produit']);
            $prix = strip_tags($_POST['prix']);
            $nombre = strip_tags($_POST['nombre']);

            $sql = "INSERT INTO `liste` (`produit`, `prix`, `nombre`) VALUES (:produit, :prix, :nombre);";

            $query = $db->prepare($sql);

            $query->bindValue(':produit', $produit, PDO::PARAM_STR);
            $query->bindValue(':prix', $prix, PDO::PARAM_STR);
            $query->bindValue(':nombre', $nombre, PDO::PARAM_INT);

            $query->execute();
            $_SESSION['message'] = "Produit ajouté avec succès !";
            header('Location: index.php');
        }
}

require_once('close.php');

Modifier un enregistrement (UPDATE)

Pour modifier un enregistrement de la base de données, nous allons créer la page "edit.php" qui aura une triple utilisation :

  • Sélectionner un produit
  • Afficher le formulaire de modification
  • Traiter le formulaire

La requête

La requête permettant de modifier un produit de la liste sera la suivante

UPDATE `liste` SET `produit`=:produit, `prix`=:prix, `nombre`=:nombre WHERE `id`=:id;

Le code PHP correspondant pour exécuter la requête de sélection est le suivant

$sql = "SELECT * FROM `liste` WHERE `id`=:id;";

$query = $db->prepare($sql);

$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();

$result = $query->fetch();

Le code PHP correspondant pour exécuter la requête de traitement est le suivant

<?php
$sql = "UPDATE `liste` SET `produit`=:produit, `prix`=:prix, `nombre`=:nombre WHERE `id`=:id;";

$query = $db->prepare($sql);

$query->bindValue(':produit', $produit, PDO::PARAM_STR);
$query->bindValue(':prix', $prix, PDO::PARAM_STR);
$query->bindValue(':nombre', $nombre, PDO::PARAM_INT);
$query->bindValue(':id', $id, PDO::PARAM_INT);

$query->execute();

Le formulaire

Le code HTML du formulaire permettant d'ajouter un produit est le suivant

<form method="post">
    <p>
        <label for="produit">Produit</label>
        <input type="text" name="produit" id="produit" value="<?= $result['produit'] ?>">
    </p>
    <p>
        <label for="prix">Prix</label>
        <input type="text" name="prix" id="prix" value="<?= $result['prix'] ?>">
    </p>
    <p>
        <label for="nombre">Nombre</label>
        <input type="number" name="nombre" id="nombre" value="<?= $result['nombre'] ?>">
    </p>
    <input type="hidden" name="id" value="<?= $result['id'] ?>">
    <button>Enregistrer</button>
</form>

Une fois envoyé, nous le traiterons en PHP et nous insérerons le nouveau produit dans la base

<?php
if(isset($_POST)){
    if(isset($_POST['id']) && !empty($_POST['id'])
        && isset($_POST['produit']) && !empty($_POST['produit'])
        && isset($_POST['prix']) && !empty($_POST['prix'])
        && isset($_POST['nombre']) && !empty($_POST['nombre'])){
        $id = strip_tags($_GET['id']);
        $produit = strip_tags($_POST['produit']);
        $prix = strip_tags($_POST['prix']);
        $nombre = strip_tags($_POST['nombre']);

        $sql = "UPDATE `liste` SET `produit`=:produit, `prix`=:prix, `nombre`=:nombre WHERE `id`=:id;";

        $query = $db->prepare($sql);

        $query->bindValue(':produit', $produit, PDO::PARAM_STR);
        $query->bindValue(':prix', $prix, PDO::PARAM_STR);
        $query->bindValue(':nombre', $nombre, PDO::PARAM_INT);
        $query->bindValue(':id', $id, PDO::PARAM_INT);

        $query->execute();

        header('Location: index.php');
    }
}

Fichier complet

Le fichier complet est le suivant

<?php
require_once('connect.php');

if(isset($_POST)){
    if(isset($_POST['id']) && !empty($_POST['id'])
        && isset($_POST['produit']) && !empty($_POST['produit'])
        && isset($_POST['prix']) && !empty($_POST['prix'])
        && isset($_POST['nombre']) && !empty($_POST['nombre'])){
        $id = strip_tags($_GET['id']);
        $produit = strip_tags($_POST['produit']);
        $prix = strip_tags($_POST['prix']);
        $nombre = strip_tags($_POST['nombre']);

        $sql = "UPDATE `liste` SET `produit`=:produit, `prix`=:prix, `nombre`=:nombre WHERE `id`=:id;";

        $query = $db->prepare($sql);

        $query->bindValue(':produit', $produit, PDO::PARAM_STR);
        $query->bindValue(':prix', $prix, PDO::PARAM_STR);
        $query->bindValue(':nombre', $nombre, PDO::PARAM_INT);
        $query->bindValue(':id', $id, PDO::PARAM_INT);

        $query->execute();

        header('Location: index.php');
    }
}

if(isset($_GET['id']) && !empty($_GET['id'])){
    $id = strip_tags($_GET['id']);
    $sql = "SELECT * FROM `liste` WHERE `id`=:id;";

    $query = $db->prepare($sql);

    $query->bindValue(':id', $id, PDO::PARAM_INT);
    $query->execute();

    $result = $query->fetch();
}

require_once('close.php');
?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Liste des produits</title>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
    <h1>Modifier un produit</h1>
    <form method="post">
        <p>
            <label for="produit">Produit</label>
            <input type="text" name="produit" id="produit" value="<?= $result['produit'] ?>">
        </p>
        <p>
            <label for="prix">Prix</label>
            <input type="text" name="prix" id="prix" value="<?= $result['prix'] ?>">
        </p>
        <p>
            <label for="nombre">Nombre</label>
            <input type="number" name="nombre" id="nombre" value="<?= $result['nombre'] ?>">
        </p>
        <p>
            <button>Enregistrer</button>
        </p>
        <input type="hidden" name="id" value="<?= $result['id'] ?>">
    </form>
</body>
</html>

Supprimer un enregistrement (DELETE)

Pour supprimer un enregistrement de la base de données, nous allons créer la page "delete.php" qui prendra l'id du produit en paramètre.

La requête

La requête permettant de supprimer un produit dans la liste sera la suivante

DELETE FROM `liste` WHERE `id`=:id;

Le code PHP correspondant pour exécuter cette requête est le suivant

<?php
$sql = "DELETE FROM `liste` WHERE `id`=:id;";

$query = $db->prepare($sql);

$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();

Le fichier complet

Le code HTML du fichier complet est ci-dessous

<?php
require_once('connect.php');

if(isset($_GET['id']) && !empty($_GET['id'])){
    $id = strip_tags($_GET['id']);
    $sql = "DELETE FROM `liste` WHERE `id`=:id;";

    $query = $db->prepare($sql);

    $query->bindValue(':id', $id, PDO::PARAM_INT);
    $query->execute();

    header('Location: index.php');
}

require_once('close.php');

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Visualisez les fichiers de cette série sur GitHub

Partager

Partager sur Facebook Partager sur Twitter Partager sur LinkedIn

Commentaires

Ecrire un commentaire

Pas encore de commentaire

Ecrire un commentaire