Dans ce didacticiel, nous allons créer une application complète de création, lecture, mise à jour et suppression avec PHP, PDO et MySQL. Nous allons créer l'application entièrement à partir de zéro, aucun framework supplémentaire n'est requis.
Une application CRUD est souvent utilisée conjointement avec une base de données, interagissant avec les enregistrements d'une table. Nous utiliserons MySQL comme système de gestion de base de données dans notre application.
Nous allons créer une base de données avec une table de contacts, nous pourrons manipuler ces contacts dans notre application CRUD, la table de contacts contiendra des noms, des emails, des numéros de téléphone, etc.
Les packages Basic et Advanced incluent des fonctionnalités supplémentaires et un lien de téléchargement vers le code source.
1. Mise en route
Avant de nous lancer dans la programmation de notre application CRUD, nous devons installer notre serveur Web et configurer notre application.
1.1. Ce que vous apprendrez dans ce tutoriel
- Créer des enregistrements MySQL — Insérez de nouveaux enregistrements dans la table Contacts .
- Lire les enregistrements MySQL — Lire les enregistrements MySQL et les afficher dans un tableau HTML.
- Mettre à jour les enregistrements MySQL — Mettez à jour les enregistrements MySQL existants dans la table Contacts .
- Supprimer les enregistrements MySQL — Confirmez et supprimez les enregistrements du tableau Contacts .
- Requêtes GET et POST — Envoyez des données à notre application à partir d'un formulaire HTML et de paramètres d'URL.
- Instructions préparées — Sécurisez nos instructions SQL avec des instructions préparées.
1.2. Exigences
- Serveur Web - Je vous recommande de télécharger et d'installer XAMPP sur votre système informatique local, ce package de serveur comprend MySQL, PHP, phpMyAdmin et l'extension PDO.
- PHP - Je vous recommande d'utiliser la dernière version de PHP , mais les anciennes versions devraient fonctionner correctement (ignorez si vous avez installé XAMPP ).
- Extension PDO — Doit être activée par défaut si vous utilisez XAMPP , mais si ce n'est pas le cas, vous devrez l'activer/l'installer.
1.3. Structure et configuration des fichiers
Accédez à C:\xampp\htdocs ( XAMPP ) et créez les répertoires et fichiers ci-dessous.
Ce que chaque fichier contiendra :
- index.php — Page d'accueil de notre application CRUD.
- create.php — Créez de nouveaux enregistrements avec un formulaire HTML et envoyez des données au serveur avec une requête POST.
- read.php — Affichez les enregistrements de notre table de base de données et naviguez avec la pagination.
- update.php — Met à jour les enregistrements existants avec un formulaire HTML et envoie les données au serveur avec une requête POST.
- delete.php — Confirme et supprime les enregistrements par ID (requête GET pour obtenir l'ID).
- functions.php — Fonctions de base de modèles et fonction de connexion MySQL (nous n'avons donc pas à répéter le code dans chaque fichier).
- style.css - La feuille de style de notre application, cela changera l'apparence de notre application.
2. Création de la base de données et configuration des tables
La base de données MySQL que nous utiliserons pour stocker les contacts et les récupérer avec PHP. Si vous utilisez XAMPP, suivez les instructions ci-dessous.
- Accédez à http://localhost/phpmyadmin/
- Cliquez sur Bases de données en haut
- Sous Créer une base de données , entrez phpcrud et sélectionnez utf8_general_ci comme collation
- Cliquez sur Créer
- Sélectionnez la base de données nouvellement créée
- Cliquez sur l' onglet SQL et exécutez le SQL ci-dessous :
CREATE TABLE IF NOT EXISTS `contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`phone` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
INSERT INTO `contacts` (`id`, `name`, `email`, `phone`, `title`, `created`) VALUES
(1, 'John Doe', 'johndoe@example.com', '2026550143', 'Lawyer', '2019-05-08 17:32:00'),
(2, 'David Deacon', 'daviddeacon@example.com', '2025550121', 'Employee', '2019-05-08 17:28:44'),
(3, 'Sam White', 'samwhite@example.com', '2004550121', 'Employee', '2019-05-08 17:29:27'),
(4, 'Colin Chaplin', 'colinchaplin@example.com', '2022550178', 'Supervisor', '2019-05-08 17:29:27'),
(5, 'Ricky Waltz', 'rickywaltz@example.com', '7862342390', '', '2019-05-09 19:16:00'),
(6, 'Arnold Hall', 'arnoldhall@example.com', '5089573579', 'Manager', '2019-05-09 19:17:00'),
(7, 'Toni Adams', 'alvah1981@example.com', '2603668738', '', '2019-05-09 19:19:00'),
(8, 'Donald Perry', 'donald1983@example.com', '7019007916', 'Employee', '2019-05-09 19:20:00'),
(9, 'Joe McKinney', 'nadia.doole0@example.com', '6153353674', 'Employee', '2019-05-09 19:20:00'),
(10, 'Angela Horst', 'angela1977@example.com', '3094234980', 'Assistant', '2019-05-09 19:21:00'),
(11, 'James Jameson', 'james1965@example.com', '4002349823', 'Assistant', '2019-05-09 19:32:00'),
(12, 'Daniel Deacon', 'danieldeacon@example.com', '5003423549', 'Manager', '2019-05-09 19:33:00');
Le SQL ci-dessus créera la table : contacts , nous utiliserons cette table dans notre application, incluse dans le SQL est un exemple de données, ces données seront utilisées à des fins de test pour s'assurer que tout fonctionne comme il se doit, vous pouvez supprimer ça plus tard.
Il y a 6 colonnes dans la table des contacts (identifiant, nom, e-mail, téléphone, titre et créé), la colonne de titre est essentiellement le rôle de chaque contact, vous pouvez changer cela en tout ce que vous voulez, les exemples de données utiliseront les rôles de travail par exemple.
Dans phpMyAdmin , la base de données devrait ressembler à ceci :

3. Création de la feuille de style (CSS3)
La feuille de style changera l'apparence de notre application, modifiera le fichier style.css et ajoutera le code suivant :
* {
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
font-size: 16px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
background-color: #FFFFFF;
margin: 0;
}
.navtop {
background-color: #3f69a8;
height: 60px;
width: 100%;
border: 0;
}
.navtop div {
display: flex;
margin: 0 auto;
width: 1000px;
height: 100%;
}
.navtop div h1, .navtop div a {
display: inline-flex;
align-items: center;
}
.navtop div h1 {
flex: 1;
font-size: 24px;
padding: 0;
margin: 0;
color: #ecf0f6;
font-weight: normal;
}
.navtop div a {
padding: 0 20px;
text-decoration: none;
color: #c5d2e5;
font-weight: bold;
}
.navtop div a i {
padding: 2px 8px 0 0;
}
.navtop div a:hover {
color: #ecf0f6;
}
.content {
width: 1000px;
margin: 0 auto;
}
.content h2 {
margin: 0;
padding: 25px 0;
font-size: 22px;
border-bottom: 1px solid #ebebeb;
color: #666666;
}
.read .create-contact {
display: inline-block;
text-decoration: none;
background-color: #38b673;
font-weight: bold;
font-size: 14px;
color: #FFFFFF;
padding: 10px 15px;
margin: 15px 0;
}
.read .create-contact:hover {
background-color: #32a367;
}
.read .pagination {
display: flex;
justify-content: flex-end;
}
.read .pagination a {
display: inline-block;
text-decoration: none;
background-color: #a5a7a9;
font-weight: bold;
color: #FFFFFF;
padding: 5px 10px;
margin: 15px 0 15px 5px;
}
.read .pagination a:hover {
background-color: #999b9d;
}
.read table {
width: 100%;
padding-top: 30px;
border-collapse: collapse;
}
.read table thead {
background-color: #ebeef1;
border-bottom: 1px solid #d3dae0;
}
.read table thead td {
padding: 10px;
font-weight: bold;
color: #767779;
font-size: 14px;
}
.read table tbody tr {
border-bottom: 1px solid #d3dae0;
}
.read table tbody tr:nth-child(even) {
background-color: #fbfcfc;
}
.read table tbody tr:hover {
background-color: #376ab7;
}
.read table tbody tr:hover td {
color: #FFFFFF;
}
.read table tbody tr:hover td:nth-child(1) {
color: #FFFFFF;
}
.read table tbody tr td {
padding: 10px;
}
.read table tbody tr td:nth-child(1) {
color: #a5a7a9;
}
.read table tbody tr td.actions {
padding: 8px;
text-align: right;
}
.read table tbody tr td.actions .edit, .read table tbody tr td.actions .trash {
display: inline-flex;
text-align: right;
text-decoration: none;
color: #FFFFFF;
padding: 10px 12px;
}
.read table tbody tr td.actions .trash {
background-color: #b73737;
}
.read table tbody tr td.actions .trash:hover {
background-color: #a33131;
}
.read table tbody tr td.actions .edit {
background-color: #37afb7;
}
.read table tbody tr td.actions .edit:hover {
background-color: #319ca3;
}
.update form {
padding: 15px 0;
display: flex;
flex-flow: wrap;
}
.update form label {
display: inline-flex;
width: 400px;
padding: 10px 0;
margin-right: 25px;
}
.update form input {
padding: 10px;
width: 400px;
margin-right: 25px;
margin-bottom: 15px;
border: 1px solid #cccccc;
}
.update form input[type="submit"] {
display: block;
background-color: #38b673;
border: 0;
font-weight: bold;
font-size: 14px;
color: #FFFFFF;
cursor: pointer;
width: 200px;
margin-top: 15px;
}
.update form input[type="submit"]:hover {
background-color: #32a367;
}
.delete .yesno {
display: flex;
}
.delete .yesno a {
display: inline-block;
text-decoration: none;
background-color: #38b673;
font-weight: bold;
color: #FFFFFF;
padding: 10px 15px;
margin: 15px 10px 15px 0;
}
.delete .yesno a:hover {
background-color: #32a367;
}
N'hésitez pas à changer le style, c'est ce que j'ai mis en place pour rendre l'application CRUD plus attrayante.
4. Création de l'application CRUD
Nous pouvons enfin commencer à coder l'application CRUD avec PHP. Avant de commencer, assurez-vous d'avoir suivi les étapes précédentes et d'avoir la base de données MySQL prête.
4.1. Création des fonctions
Ce fichier contiendra des fonctions que nous pourrons exécuter dans tous nos fichiers PHP, c'est pour ne pas avoir à écrire le même code dans chaque fichier PHP, plus le code est court, mieux c'est, n'est-ce pas ? Nous allons créer 3 fonctions, 1 fonction se connectera à la base de données, les 2 autres seront les modèles pour l'en-tête et le pied de page qui apparaîtront sur chaque page que nous créerons et contiendront la mise en page HTML.
Editez le fichier functions.php et ajoutez le code suivant :
<?php
function pdo_connect_mysql() {
$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'root';
$DATABASE_PASS = '';
$DATABASE_NAME = 'phpcrud';
try {
return new PDO('mysql:host=' . $DATABASE_HOST . ';dbname=' . $DATABASE_NAME . ';charset=utf8', $DATABASE_USER, $DATABASE_PASS);
} catch (PDOException $exception) {
// If there is an error with the connection, stop the script and display the error.
exit('Failed to connect to database!');
}
}
function template_header($title) {
echo <<<EOT
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>$title</title>
<link href="style.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
</head>
<body>
<nav class="navtop">
<div>
<h1>Website Title</h1>
<a href="index.php"><i class="fas fa-home"></i>Home</a>
<a href="read.php"><i class="fas fa-address-book"></i>Contacts</a>
</div>
</nav>
EOT;
}
function template_footer() {
echo <<<EOT
</body>
</html>
EOT;
}
?>
Assurez-vous de changer les détails de connexion MySQL à vos coordonnées, nous utilisons PDO pour nous connecter à MySQL, PDO nous facilitera l'interaction avec notre base de données MySQL.
4.2. Création de la page d'accueil
Lorsque vous naviguez vers http://localhost/phpcrud/ il servira le fichier index.php , cette page sera notre page d'accueil.
Modifiez le fichier index.php et ajoutez le code suivant :
<?php
include 'functions.php';
// Your PHP code here.
// Home Page template below.
?>
<?=template_header('Home')?>
<div class="content">
<h2>Home</h2>
<p>Welcome to the home page!</p>
</div>
<?=template_footer()?>
Cela créera une page d'accueil de base, nous pouvons utiliser cette page pour naviguer vers les autres pages. Comme vous pouvez le voir, nous incluons le fichier functions.php et exécutons les fonctions de modèle que nous avons créées, rappelez-vous que ces fonctions ajouteront le code d'en-tête et de pied de page à notre page d'accueil.
Maintenant, si nous naviguons vers http://localhost/phpcrud/, nous verrons ce qui suit :
C'est essentiellement tout pour la page d'accueil, n'hésitez pas à ajouter votre propre contenu, cette page est juste pour que nous puissions naviguer vers les autres pages.
4.3. Création de la page de lecture
Cette page remplira les enregistrements de notre table de contacts dans une table HTML.
Modifiez le fichier read.php et ajoutez le code suivant :
<?php
include 'functions.php';
// Connect to MySQL database
$pdo = pdo_connect_mysql();
// Get the page via GET request (URL param: page), if non exists default the page to 1
$page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1;
// Number of records to show on each page
$records_per_page = 5;
Une fois de plus, nous incluons le fichier de fonctions, mais cette fois nous nous connectons à notre base de données MySQL en exécutant la fonction : pdo_connect_mysql, si la connexion réussit, nous pouvons utiliser le $pdo variable pour exécuter des requêtes.
Nous créons également 2 autres variables, la $page déterminera la page sur laquelle l'utilisateur se trouve actuellement, la $records_per_pagesera utilisé pour limiter le nombre d'enregistrements à afficher sur chaque page, par exemple, si nous limitons le nombre d'enregistrements à 5 et que nous avons 10 enregistrements dans notre table de contacts , alors il n'y aura que 2 pages et 5 enregistrements sur chaque page , l'utilisateur pourra naviguer entre les pages.
Ajoutez le code suivant au fichier read.php :
// Prepare the SQL statement and get records from our contacts table, LIMIT will determine the page
$stmt = $pdo->prepare('SELECT * FROM contacts ORDER BY id LIMIT :current_page, :record_per_page');
$stmt->bindValue(':current_page', ($page-1)*$records_per_page, PDO::PARAM_INT);
$stmt->bindValue(':record_per_page', $records_per_page, PDO::PARAM_INT);
$stmt->execute();
// Fetch the records so we can display them in our template.
$contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);
Le code ci-dessus sélectionnera les enregistrements de la table des contacts , cela sera déterminé par la page actuelle sur laquelle se trouve l'utilisateur, les enregistrements seront triés par la colonne id , nous pouvons facilement changer l'ordre par colonne si nous le voulions, par exemple, si nous le changeons en créé , il triera les enregistrements par date de création à la place.
Nous utilisons également une instruction préparée pour la requête ci-dessus, cela garantira que notre requête est sécurisée (échappe aux données d'entrée de l'utilisateur).
Ajoutez le code suivant au fichier read.php :
// Get the total number of contacts, this is so we can determine whether there should be a next and previous button
$num_contacts = $pdo->query('SELECT COUNT(*) FROM contacts')->fetchColumn();
?>
La requête SQL ci-dessus obtiendra le nombre total d'enregistrements dans la table des contacts , nous n'avons pas besoin d'utiliser une instruction préparée ici car la requête n'inclut pas de variables d'entrée utilisateur.
Ajoutez le code suivant au fichier read.php :
<?=template_header('Read')?>
<div class="content read">
<h2>Read Contacts</h2>
<a href="create.php" class="create-contact">Create Contact</a>
<table>
<thead>
<tr>
<td>#</td>
<td>Name</td>
<td>Email</td>
<td>Phone</td>
<td>Title</td>
<td>Created</td>
<td></td>
</tr>
</thead>
<tbody>
<?php foreach ($contacts as $contact): ?>
<tr>
<td><?=$contact['id']?></td>
<td><?=$contact['name']?></td>
<td><?=$contact['email']?></td>
<td><?=$contact['phone']?></td>
<td><?=$contact['title']?></td>
<td><?=$contact['created']?></td>
<td class="actions">
<a href="update.php?id=<?=$contact['id']?>" class="edit"><i class="fas fa-pen fa-xs"></i></a>
<a href="delete.php?id=<?=$contact['id']?>" class="trash"><i class="fas fa-trash fa-xs"></i></a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<div class="pagination">
<?php if ($page > 1): ?>
<a href="read.php?page=<?=$page-1?>"><i class="fas fa-angle-double-left fa-sm"></i></a>
<?php endif; ?>
<?php if ($page*$records_per_page < $num_contacts): ?>
<a href="read.php?page=<?=$page+1?>"><i class="fas fa-angle-double-right fa-sm"></i></a>
<?php endif; ?>
</div>
</div>
<?=template_footer()?>
Ceci est le modèle de la page de lecture, le code itère les contacts et les ajoute au tableau HTML, nous pourrons lire les enregistrements sous forme de tableau lorsque nous naviguerons vers la page de lecture.
La pagination est ajoutée afin que nous puissions naviguer entre les pages de la page lue (page 1, page 2, etc.).
Pour les icônes que nous utilisons Font Awesome , assurez-vous qu'il est inclus dans la fonction de modèle d'en-tête ou les icônes n'apparaîtront pas.
Et maintenant, si nous naviguons vers http://localhost/phpcrud/read.php , nous verrons ce qui suit :
Alors maintenant, nous savons comment afficher les enregistrements de notre base de données MySQL, notez que les boutons qui apparaissent dans le tableau (créer, modifier et supprimer) ne fonctionneront pas, c'est parce que nous n'avons pas encore créé ces pages.
Vous pouvez également cliquer sur le lien Contacts dans la barre d'en-tête pour accéder à la page de lecture.
4.4. Création de la page de création
La page de création sera utilisée pour créer de nouveaux enregistrements et les insérer dans notre table Contacts .
Modifiez le fichier create.php et ajoutez :
<?php
include 'functions.php';
$pdo = pdo_connect_mysql();
$msg = '';
// Check if POST data is not empty
if (!empty($_POST)) {
// Post data not empty insert a new record
// Set-up the variables that are going to be inserted, we must check if the POST variables exist if not we can default them to blank
$id = isset($_POST['id']) && !empty($_POST['id']) && $_POST['id'] != 'auto' ? $_POST['id'] : NULL;
// Check if POST variable "name" exists, if not default the value to blank, basically the same for all variables
$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$phone = isset($_POST['phone']) ? $_POST['phone'] : '';
$title = isset($_POST['title']) ? $_POST['title'] : '';
$created = isset($_POST['created']) ? $_POST['created'] : date('Y-m-d H:i:s');
// Insert new record into the contacts table
$stmt = $pdo->prepare('INSERT INTO contacts VALUES (?, ?, ?, ?, ?, ?)');
$stmt->execute([$id, $name, $email, $phone, $title, $created]);
// Output message
$msg = 'Created Successfully!';
}
?>
Le code ci-dessus vérifiera si le tableau POST (données du formulaire) n'est pas vide, si ce n'est pas le cas, cela signifie essentiellement que l'utilisateur a rempli le formulaire et cliqué sur le bouton Soumettre, cela insérera alors un nouvel enregistrement dans notre table Contacts .
Ajouter après :
<?=template_header('Create')?>
<div class="content update">
<h2>Create Contact</h2>
<form action="create.php" method="post">
<label for="id">ID</label>
<label for="name">Name</label>
<input type="text" name="id" placeholder="26" value="auto" id="id">
<input type="text" name="name" placeholder="John Doe" id="name">
<label for="email">Email</label>
<label for="phone">Phone</label>
<input type="text" name="email" placeholder="johndoe@example.com" id="email">
<input type="text" name="phone" placeholder="2025550143" id="phone">
<label for="title">Title</label>
<label for="created">Created</label>
<input type="text" name="title" placeholder="Employee" id="title">
<input type="datetime-local" name="created" value="<?=date('Y-m-d\TH:i')?>" id="created">
<input type="submit" value="Create">
</form>
<?php if ($msg): ?>
<p><?=$msg?></p>
<?php endif; ?>
</div>
<?=template_footer()?>
Ceci est le modèle de notre page de création, comme vous pouvez le voir, nous avons créé un formulaire et nommé chaque champ de saisie en conséquence, le nom du champ de saisie est la façon dont nous obtiendrons la variable POST dans notre code PHP, par exemple, si nous nommez un champ de saisie "zip_code", nous pouvons obtenir la valeur de ce champ de saisie avec $_POST['code_postal']en PHP (en supposant que la méthode du formulaire est définie sur post ).
Et maintenant, si nous naviguons vers http://localhost/phpcrud/create.php ou cliquons sur le bouton Créer sur la page de lecture, nous verrons ce qui suit :
4.5. Création de la page de mise à jour
La page de mise à jour sera utilisée pour mettre à jour les enregistrements dans notre table Contacts , cette page est similaire à la page de création mais au lieu d'insérer un nouvel enregistrement, nous mettrons à jour les enregistrements existants. Nous pourrons obtenir l'ID d'enregistrement avec une requête GET.
Modifiez le fichier update.php et ajoutez :
<?php
include 'functions.php';
$pdo = pdo_connect_mysql();
$msg = '';
// Check if the contact id exists, for example update.php?id=1 will get the contact with the id of 1
if (isset($_GET['id'])) {
if (!empty($_POST)) {
// This part is similar to the create.php, but instead we update a record and not insert
$id = isset($_POST['id']) ? $_POST['id'] : NULL;
$name = isset($_POST['name']) ? $_POST['name'] : '';
$email = isset($_POST['email']) ? $_POST['email'] : '';
$phone = isset($_POST['phone']) ? $_POST['phone'] : '';
$title = isset($_POST['title']) ? $_POST['title'] : '';
$created = isset($_POST['created']) ? $_POST['created'] : date('Y-m-d H:i:s');
// Update the record
$stmt = $pdo->prepare('UPDATE contacts SET id = ?, name = ?, email = ?, phone = ?, title = ?, created = ? WHERE id = ?');
$stmt->execute([$id, $name, $email, $phone, $title, $created, $_GET['id']]);
$msg = 'Updated Successfully!';
}
// Get the contact from the contacts table
$stmt = $pdo->prepare('SELECT * FROM contacts WHERE id = ?');
$stmt->execute([$_GET['id']]);
$contact = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$contact) {
exit('Contact doesn\'t exist with that ID!');
}
} else {
exit('No ID specified!');
}
?>
Le code ci-dessus vérifiera l'ID de contact, l'ID sera un paramètre dans l'URL, par exemple, http://localhost/phpcrud/update.php?id=1 obtiendra le contact avec l'ID de 1, puis nous pouvons gérer la requête avec la méthode GET et exécuter une requête MySQL qui obtiendra le contact par ID.
Ajouter après :
<?=template_header('Read')?>
<div class="content update">
<h2>Update Contact #<?=$contact['id']?></h2>
<form action="update.php?id=<?=$contact['id']?>" method="post">
<label for="id">ID</label>
<label for="name">Name</label>
<input type="text" name="id" placeholder="1" value="<?=$contact['id']?>" id="id">
<input type="text" name="name" placeholder="John Doe" value="<?=$contact['name']?>" id="name">
<label for="email">Email</label>
<label for="phone">Phone</label>
<input type="text" name="email" placeholder="johndoe@example.com" value="<?=$contact['email']?>" id="email">
<input type="text" name="phone" placeholder="2025550143" value="<?=$contact['phone']?>" id="phone">
<label for="title">Title</label>
<label for="created">Created</label>
<input type="text" name="title" placeholder="Employee" value="<?=$contact['title']?>" id="title">
<input type="datetime-local" name="created" value="<?=date('Y-m-d\TH:i', strtotime($contact['created']))?>" id="created">
<input type="submit" value="Update">
</form>
<?php if ($msg): ?>
<p><?=$msg?></p>
<?php endif; ?>
</div>
<?=template_footer()?>
Ceci est le modèle de la page de mise à jour, les valeurs d'entrée sont déjà spécifiées avec les colonnes de contact, la requête MySQL que nous avons créée précédemment obtiendra ces valeurs.
Sur la page de lecture (Contacts), nous devrions pouvoir cliquer sur l'icône de mise à jour à côté d'un enregistrement et le mettre à jour, nous devrions voir quelque chose comme ceci :
4.6. Création de la page de suppression
La page de suppression sera utilisée pour supprimer des enregistrements du tableau Contacts . Avant qu'un utilisateur puisse supprimer un enregistrement, il devra le confirmer, cela empêchera une suppression accidentelle.
Modifiez le fichier delete.php et ajoutez :
<?php
include 'functions.php';
$pdo = pdo_connect_mysql();
$msg = '';
// Check that the contact ID exists
if (isset($_GET['id'])) {
// Select the record that is going to be deleted
$stmt = $pdo->prepare('SELECT * FROM contacts WHERE id = ?');
$stmt->execute([$_GET['id']]);
$contact = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$contact) {
exit('Contact doesn\'t exist with that ID!');
}
// Make sure the user confirms beore deletion
if (isset($_GET['confirm'])) {
if ($_GET['confirm'] == 'yes') {
// User clicked the "Yes" button, delete record
$stmt = $pdo->prepare('DELETE FROM contacts WHERE id = ?');
$stmt->execute([$_GET['id']]);
$msg = 'You have deleted the contact!';
} else {
// User clicked the "No" button, redirect them back to the read page
header('Location: read.php');
exit;
}
}
} else {
exit('No ID specified!');
}
?>
Pour supprimer un enregistrement, le code vérifiera si la variable de requête GET " id " existe, si c'est le cas, vérifiez si l'enregistrement existe dans la table Contacts et confirmez à l'utilisateur s'il souhaite supprimer le contact ou non, une simple requête GET déterminera sur quel bouton l'utilisateur a cliqué (Oui ou Non).
Ajouter après :
<?=template_header('Delete')?>
<div class="content delete">
<h2>Delete Contact #<?=$contact['id']?></h2>
<?php if ($msg): ?>
<p><?=$msg?></p>
<?php else: ?>
<p>Are you sure you want to delete contact #<?=$contact['id']?>?</p>
<div class="yesno">
<a href="delete.php?id=<?=$contact['id']?>&confirm=yes">Yes</a>
<a href="delete.php?id=<?=$contact['id']?>&confirm=no">No</a>
</div>
<?php endif; ?>
</div>
<?=template_footer()?>
Le code ci-dessus est le modèle de la page de suppression, cela inclut les boutons Oui et Non (confirmation de suppression) et le message de sortie. Les boutons Oui et Non créeront une nouvelle requête GET qui confirmera le choix de l'utilisateur.
Sur la page de lecture (Contacts), cliquez sur le bouton de suppression de l'un des enregistrements, vous devriez voir quelque chose comme ceci :
Conclusion
Toutes nos félicitations! Vous avez créé avec succès une application CRUD avec PHP et MySQL, et ensuite ? Envisagez d'ajouter vos propres colonnes à la table Contacts et au code.
Si vous avez apprécié ce didacticiel, n'oubliez pas de le partager en utilisant les liens sociaux ci-dessous et consultez nos nombreux autres didacticiels sur notre site Web.
Profitez du codage !
Merci beaucoup!
ReplyDelete