Vous êtes sur la page 1sur 12

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".

1
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>

2
<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>

3
<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

4
$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');
?>

5
<!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();

6
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');

7
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>

8
<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');
}
}

9
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');
?>

10
<!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>

11
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');

12

Vous aimerez peut-être aussi