Série : Live Coding
Fichiers : https://github.com/NouvelleTechno
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
Catégories : PHP Tutoriel Live-Coding
Mots-clés : Tutoriel Base de données MySQL PHP Live-Coding crud