TODO:
-
Gros problème : on ne peut pas décemment
expliquer doctement que l'escape on input c'est pas bien, et utiliser directement PHP comme moteur de templates.
L'échappement à la sortie n'est viable qu'avec un très bon système d'affichage qui échappe par défaut. Mais pour être utilisable il faut qu'il rende possible d'inclure facilement des bouts de HTML qui eux-même utilisent des variables et doivent donc les échapper, et là tout de suite c'est un autre projet.
- La vue du site des couleurs est quand même assez dégueu.
CRUD
Acronyme CRUD Les quatre opérations de base pour la persistance des données :
- Search
- Create
- Read
- Update
- Delete
CRUD : PHP/MysQL
Les étapes de base pour créer votre mini-site CRUD sont :
- Créer une table dans votre base de données MySQL pour stocker les données de votre application : Vous pouvez utiliser l’interface graphique de phpMyAdmin ou utiliser la ligne de commande pour créer les tables.
- Créer un formulaire d’ajout : Créez un formulaire HTML avec les champs correspondant aux colonnes de votre table de base de données.
Lorsque le formulaire d’ajout est soumis sans erreurs, le script PHP doit être exécuté pour ajouter les données à votre base de données.
- Créer une page de lecture : Créez une page de lecture pour afficher tous les enregistrements de votre table de base de données.
Vous pouvez utiliser une boucle pour faire une pagination pour n'afficher qu'un certain nombre d'enregistrements par page.
- Créer un formulaire de mise à jour : Créez un formulaire HTML avec les champs correspondant aux colonnes de votre table de base de données.
On doit pouvoir confirmer ou annuler la mise à jour.
Lorsque le formulaire de mise à jour est soumis sans erreurs, le script PHP doit être exécuté pour mettre à jour les données dans votre base de données.
- Créer un formulaire de suppression : Créez un formulaire HTML avec un bouton pour supprimer un enregistrement. On doit pouvoir confirmer ou annuler la suppression des données.
Lorsque le formulaire de suppression est soumis, le script PHP doit être exécuté pour supprimer l’enregistrement correspondant de votre base de données.
Mise en place d'un (S)CRUD
- Recherche et visualisation
- Pagination : sert à limiter le nombre de lignes chargées sur la page.
- Tris sur les colonnes : implémenter des tris ascendant et descendant (ASC et DESC) pour classer vos facilement vos lignes.
- Filtres : Ajout de filtres sur les champs différents structurants.
- Boutons d'actions : Sur chaque ligne de vos listes, vous pouvez afficher des boutons (ou un bouton en dropdown) permettant d'accéder plus simplement aux autres étapes de votre CRUD.
- Création et édition : La création et la mise à jour d'une entité se fait grâce à un formulaire.
le formulaire d'édition est plus riche.
Ces deux actions doivent intégrer une validation des champs en amont de l'enregistrement en base pour assurer une parfaite intégrité des données.
- Suppression : La suppression est une étape définitive qui nécessite une étape de confirmation d'action.
Suivant votre contexte et si votre entité est liée à d'autres, vous pourrez bloquer l'action de suppression en cas de liaison ou choisir des options moins contraignantes comme le set null ou le cascade on delete.
Arborescence du site
_ /racine/
____ /style/
________ /css/
__________ /custom.css
________ /js/
__________ /custom.js
____ /includes/
______ /config.php (fichier pour les informations de configuration générales du site)
______ /db_connect.php (fichier pour la connexion à la base de données)
______ /functions.php (fichier contenant les fonctions réutilisables)
______ /header.php (fichier contenant la section header réutilisable)
______ /footer.php (fichier contenant la section footer réutilisable)
____ /backend ou admin/
______ /index.php (page d’accueil du backend)
______ /login.php (page de connexion du backend)
______ /dashboard.php (page de tableau de bord du backend)
______ /table1/
________ /create.php
________ /read.php
________ /update.php
________ /delete.php
______ /table2/
________ /create.php
________ /read.php
________ /update.php
________ /delete.php
____ /frontend ou public/
______ /index.php (page d’accueil du frontend)
Exemple
<?php
// Inclure le fichier des données et des fonctions
include('donnees.php');
// Récupérer l'action via GET
$action = key_exists('action', $_GET) ? trim($_GET['action']) : null;
switch ($action) {
case "calendrier": // Afficher le calendrier vide
$zonePrincipale = Calendrier(date('Y'), date('m'));
break;
case "tester":
$connection = connecter();
$corps = "<h1>Connexion établie ! </h1>";
$zonePrincipale = $corps;
break;
case "afficher":
include("select.php");
break;
case "delete":
include('delete1.php');
break;
case "update":
include('update1.php');
break;
case "saisir": // Saisie via le formulaire
$cible='saisir'; //insertion des données
include('insert.php');
break;
case "modifier": //un id particulier
include('update.php');
break;
case "supprimer": //un id particulier
include('delete.php');
break;
default:
$zonePrincipale = "";
break;
}
include('squelette.php');
?>
Résultat
Moteur de recherche
<?php
<form action="traitement_recherche.php" method="GET">
<label for="mot_cle">Mot-clé :</label>
<input type="text" id="mot_cle" name="mot_cle" required>
<br><br>
<button type="submit">Rechercher</button>
</form>
?>
Moteur de recherche
<?php
// Supposons que $les_mots_cles contient les mots-clés sous forme de chaîne de caractères
$tableau_mots_cles = explode(" ", $les_mots_cles);
$conditions = []; // Initialisation du tableau des conditions
$bind_params = []; // Initialisation du tableau pour les paramètres liés
// Boucle pour chaque mot-clé
foreach ($tableau_mots_cles as $mot) {
$mot = rtrim($mot, "s"); // Suppression du "s" à la fin du mot
if (strlen($mot) > 3) { // Vérification si le mot-clé a une longueur suffisante
$conditions[] = "f_motscles LIKE ?";
$bind_params[] = "%" . $mot . "%";
}
}
// Construction de la requête SQL
$requete = "SELECT * FROM table WHERE " . implode(" OR ", $conditions);
// Connexion à la base de données et exécution de la requête préparée
$statement = $connexion->prepare($requete);
$statement->execute($bind_params);
// Récupération des résultats
$resultats = $statement->fetchAll(PDO::FETCH_ASSOC);
?>