Le terme CRUD est étroi­te­ment lié avec la gestion des données nu­mé­riques. Plus pré­ci­sé­ment, CRUD est un acronyme des noms des quatre opé­ra­tions de base de la gestion de la per­sis­tance des données et ap­pli­ca­tions :

  • Create (créer)
  • Read ou Retrieve (lire)
  • Update (mettre à jour)
  • Delete ou Destroy (supprimer)

Plus sim­ple­ment, le terme CRUD résume les fonctions qu’un uti­li­sa­teur a besoin d’utiliser pour créer et gérer des données. Divers processus de gestion des données sont basés sur CRUD, cependant les opé­ra­tions sont spé­ci­fi­que­ment adaptées aux besoins des systèmes et des uti­li­sa­teurs, que ce soit dans la gestion des bases de données ou pour l’uti­li­sa­tion des ap­pli­ca­tions. Ainsi, les opé­ra­tions sont des outils d’accès clas­siques et in­dis­pen­sables avec lesquels les experts, peuvent par exemple vérifier les problèmes de base de données. Tandis que pour un uti­li­sa­teur, CRUD signifie la création d’un compte (create), l’uti­li­sa­tion à tout moment (read), la mise à jour (update) ou encore la sup­pres­sion (delete). En fonction de l’en­vi­ron­ne­ment de langage in­for­ma­tique, les opé­ra­tions CRUD sont exécutées dif­fé­rem­ment, comme indiqué ci-dessous dans le tableau:

CRUD-Operation SQL RESTful HTTP XQuery
Create INSERT POST, PUT insert
Read SELECT GET, HEAD copy/modify/return
Update UPDATE PUT, PATCH replace, rename
Delete DELETE DELETE delete
Nom de domaine
Votre domaine en un clic
  • 1 cer­ti­fi­cat SSL Wildcard par contrat
  • Fonction incluse Domain Connect pour une con­fi­gu­ra­tion DNS sim­pli­fiée

Un framework CRUD : une couche d’accès aux bases de données

Si les données in­di­vi­duelles des objets sont vi­sua­li­sées à l’aide d’une interface graphique et sont mo­di­fiables via les opé­ra­tions CRUD, on parle alors de framework CRUD ou d’une grille CRUD. Ha­bi­tuel­le­ment, ce sont des in­ter­faces HTML. Un framework CRUD nécessite plusieurs étapes d’opé­ra­tions pour que les données par exemple ne soient pas prises en compte/en­re­gis­trées via une simple entrée mais seulement après avoir appuyé sur le bouton « en­re­gis­trer » ou « suivant ». Les opé­ra­tions d’un framework CRUD peuvent être ef­fec­tuées de manière décalée dans le temps sans bloquer l’en­re­gis­tre­ment pour les autres uti­li­sa­teurs. Ceci est notamment important pour les systèmes multi-uti­li­sa­teurs, en effet cela signifie que plusieurs personnes peuvent lire si­mul­ta­né­ment la même col­lec­tion de données.

Pour la mise en œuvre des opé­ra­tions, les couches de per­sis­tance sont utilisées. Elles sont en général incluses sous la forme d’ex­ten­sions (modules) dans le framework ou peuvent alors être im­plé­men­tées. Elles ré­par­tis­sent la re­pré­sen­ta­tion re­la­tion­nelle tabulaire de l’ensemble des données, ces dernières sont à défaut présentés sur un niveau orienté objet. Les framework CRUD fa­ci­li­tent le dé­ve­lop­pe­ment et l’uti­li­sa­tion des ap­pli­ca­tions en op­ti­mi­sant l’accès au système de base de données exploité. Il existe de nombreux framework avec CRUD, qui sont basés sur une grande variété de langages et de pla­te­formes. Quelques exemples se trouvent dans le tableau suivant:

Langages ou pla­te­formes Framework
Java JDBC (The Java Database Con­nec­ti­vity), Hibernate, JBoss Seam, Isis
PHP Yii, CakePHP, Zikula, Symfony, TYPO3 Flow
Perl Catalyst, Gantry
Python Django, SQ­LAl­chemy, web2py
Groovy Grails
.NET NHi­ber­nate, ADO.NET/Entity Framework
Ruby Ruby on Rails
Ja­vaS­cript Backbone.js, AngularJS

Comment dé­ve­lop­per une grille CRUD PHP pour votre base de données ?

Dans les sections suivantes, nous allons vous indiquer comment créer une interface Bootstrap pour le populaire système de base de données MySQL avec un accès possible via les opé­ra­tions CRUD. De plus, l’opération create doit également déjà être mise en place. Pour manipuler les tables de base de données de manière ap­pro­priée, le langage de script côté serveur PHP est utilisé à l’aide de l’extension PHP Data Objects (PDO).

1. La première étape consiste à créer une table de base de données simple qui sera manipulée ul­té­rieu­re­ment dans ce tutoriel en utilisant l’accès CRUD. Pour cela, veuillez importer la table comme dans l’exemple suivant dans votre base de données MySQL :

CREATE TABLE `customers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 100 ) NOT NULL ,
`mobile` VARCHAR( 100 ) NOT NULL
) ENGINE = INNODB;

La table est utilisée pour collecter des in­for­ma­tions sur l’uti­li­sa­teur : le nom, l’adresse email, le numéro de téléphone. Chaque entrée reçoit au­to­ma­ti­que­ment une clé primaire (AUTO_INCREMENT PRIMARY KEY), c’est-à-dire son propre ID unique.

2. Il est ensuite né­ces­saire de con­fi­gu­rer la connexion et de supprimer la base de données. Veuillez créer un fichier PHP sous le nom database.php, il est ensuite né­ces­saire d’insérer le script suivant avec la classe « Database » pour gérer les con­nexions de base de données :

<?php
class Database 
{
private static $dbName = 'nom_de_la_base_de_données'; 
private static $dbHost = 'localhost';
private static $dbUsername = 'nom_d’utilisateur';
private static $dbUserPassword = 'mot_de_passe';
private static $cont = null;
public function __construct() {
die('Fonction Init non autorisée');
}
public static function connect() {
// Autoriser une seule connexion pour toute la durée de l’accès
if ( null == self::$cont )
{
    try
    {
        self::$cont = new PDO( "mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);
    }
    catch(PDOException $e)
    {
        die($e->getMessage());
    }
} 
return self::$cont;
}
public static function disconnect()
{
self::$cont = null;
}
}

Afin de pouvoir utiliser ici la classe définie pour l’accès à la base de données avec PDO, vous devez spécifier exac­te­ment les valeurs pour les quatre entrées $dbName (nom de la base de donnée utilisée), $dbHost (nom de l’hôte sur lequel la base de données est en cours d’exécution, gé­né­ra­le­ment localhost ou hôte local comme dans l’exemple), $dbU­ser­name (nom d’uti­li­sa­teur) et $dbU­ser­Pass­word (mot de passe de l’uti­li­sa­teur).

Dans ce script, la classe de base de données comporte trois fonctions : __construct(), le cons­truc­teur de classe, rappelle aux uti­li­sa­teurs que l’ini­tia­li­sa­tion (c’est-à-dire l’as­sig­na­tion d’une valeur initiale ou de départ) n’est pas autorisée. Ensuite connect() est la fonction prin­ci­pale de la classe qui régule la connexion enfin au contraire dis­con­nect() est utilisée pour mettre fin à la connexion.

3. Etant donné que les opé­ra­tions CRUD ne peuvent être ef­fec­tuées qu’à l’aide de l’interface ap­pro­priée, à ce stade la grille de base doit être crée avec Twitter Bootstrap. La dernière version du framework se trouve sur la page d’accueil of­fi­cielle. Veuillez Dé­com­pres­ser Bootstrap dans le même ré­per­toire que database.php et vous pouvez créer un autre fichier sous le nom index.php. Il est alors possible de créer l’interface :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<h3>Ma grille CRUD-PHP </h3>
</div>
<div class="row">
<table class="table table-striped table-bordered">
<thead>
    <tr>
        <th>Nom</th>
        <th>Email-Adresse</th>
        <th>mobile</th>
    </tr>
</thead>
<tbody>
<?php 
include 'database.php';
$pdo = Database::connect();
$sql = 'SELECT * FROM customers ORDER BY id DESC';
foreach ($pdo->query($sql) as $row) {
echo '<tr>';
echo '<td>' . $row['name'] . '</td>';
echo '<td>' . $row['email'] . '</td>';
echo '<td>' . $row['mobile'] . '</td>';
echo '</tr>';
}
Database::disconnect();
?>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>

Sous la section <head> les fichiers CSS et Ja­vaS­cript de Bootstrap sont dans la section <body> pré­cé­dem­ment créée du database.php, y compris les appels pour établir une connexion PDO (Database::connect()) et obtenir les données cor­res­pon­dantes (SELECT). En outre le fichier contient la table HTML <table> avec les trois colonnes : nom, adresse email et numéro de téléphone, qui sont également stockées dans la base de données.

4. Parce que c’est la structure de base, il est né­ces­saire de réaliser diverses opé­ra­tions CRUD. Par exemple, pour im­plé­men­ter l’opération create vous avez besoin d’une autre page HTML avec des champs de for­mu­laire pour entrer les données uti­li­sa­teur, qui sont liées à index.php et sont ac­ces­sibles via un bouton qui est ajouté à l’interface Bootstrap. Pour plus de facilité, vous pouvez commencer avec la création de ce bouton en ouvrant index.php et le second élément <div class="row"> qui contient la table et ajouter le code suivant :

<p>
    <a href="create.php" class="btn btn-success">Create</a>
</p>

Vous pouvez déjà re­con­naitre les extraits de code, liés au fichier create.php, qui pour l’instant n’existe pas encore. Un test de l’ancienne grille Bootstrap-Grids indique alors le bouton, cependant en cliquant dessus une page d’erreur apparait. Pour que l’opération create soit dis­po­nible en per­ma­nence, vous devez créer le fichier create.php, et insérer d’abord la première partie du code suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="span10 offset1">
<div class="row">
<h3>Create a Customer</h3>
</div>
<form class="form-horizontal" action="create.php" method="post">
<div class="form-group <?php echo !empty($nameError)?'has-error':'';?>">
<label class="control-label">Name</label>
<div class="controls">
<input name="name" type="text" placeholder="Name" value="<?php echo !empty($name)?$name:'';?>">
<?php if (!empty($nameError)): ?>
<span class="help-inline"><?php echo   $nameError;?></span>
<?php endif; ?>
</div>
</div>
<div class="form-group <?php echo !empty($emailError)?'has-error':'';?>">
<label class="control-label">E-Mail-Adresse</label>
<div class="controls">
<input name="email" type="text" placeholder="E-Mail-Adresse" value="<?php echo !empty($email)?$email:'';?>">
<?php if (!empty($emailError)): ?>
<span class="help-inline"><?php echo   $emailError;?></span>
<?php endif;?>
</div>
</div>
<div class="form-group <?php echo !empty($mobileError)?'has-error':'';?>">
<label class="control-label">mobile</label>
<div class="controls">
<input name="mobile" type="text" placeholder="mobile" value="<?php echo !empty($mobile)?$mobile:'';?>">
<?php if (!empty($mobileError)): ?>
<span class="help-inline"><?php echo $mobileError;?></span>
<?php endif;?>
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-success">Create</button>
<a class="btn" href="index.php">Back</a>
</div>
</form>
</div>
</div> <!-- /container -->
</body>
</html>

Le code génère le for­mu­laire HTML dans lequel les in­for­ma­tions in­di­vi­duelles nom, numéro de téléphone et adresse email peuvent être fournies. Pour chaque champ d’entrée, une variable PHP est cons­ti­tuée, qui en com­bi­nai­son avec l’extension suivant du code (qui doit être insérée avant le code HTML dans create.php) génère des messages d’erreur, dans la mesure où le champ pertinent reste libre lors de l’entrée :

<?php 
require 'database.php';
if ( !empty($_POST)) {
// Saisie des erreurs de validation
$nameError = null;
$emailError = null;
$mobileError = null;
// Saisie des valeurs d‘entrée
$name = $_POST['name'];
$email = $_POST['email'];
$mobile = $_POST['mobile'];
// Valider Engages 
$valid = true;
if (empty($name)) {
$nameError = 'Veuillez entrer un nom';
$valid = incorrect;
}
if (empty($email)) {
$emailError = 'Veuillez entrer une adresse email';
$valid = incorrect;
} else if ( !filter_var($email,FILTER_VALIDATE_EMAIL) ) {
$emailError = 'Veuillez entrer une adresse email valide';
$valid = incorrect;
}
if (empty($mobile)) {
$mobileError = 'Veuillez entrer un numéro de téléphone';
$valid = incorrect;
}
// Entrer des données
if ($valid) {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "INSERT INTO customers (name,email,mobile) values(?, ?, ?)";
    $q = $pdo->prepare($sql);
    $q->execute(array($name,$email,$mobile));
    Database::disconnect();
    header("Location: index.php");
}
     }
?>

La page create.php est désormais activée et peut être appelée lorsque vous cliquez sur le bouton create, vous per­met­tant ainsi d’entrer les in­for­ma­tions uti­li­sa­teur. Le script garantit que toutes les données entrées et les messages d’erreur sont en­re­gis­trés et que les messages d’erreur cor­res­pon­dants ap­pa­rais­sent bien quand une entrée est in­cor­recte, enfin le script assure aussi la trans­mis­sion des données à la base de données déclarée. Pour con­fi­gu­rer les autres opé­ra­tions CRUD : read, update et delete vous pouvez consulter ce tutoriel, il explique aussi la création des grilles Bootstrap ainsi que l’opération create.

Aller au menu principal