Live Coding : Créer un CRUD en PHP

Temps de lecture : 44 minutes environ.

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

Live Coding : Créer un CRUD en PHP
Article publié le - Modifié le

Catégories : PHP Tutoriel Live-Coding

Mots-clés : Tutoriel Base de données MySQL PHP Live-Coding crud

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn