1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
| <?php
// Pour enregistrer le $_POST en session et éviter de re saisir tous les champs en cas d'erreur de saisie
session_start();
// Classe de connexion
class C_PDO
{
private static $connexion;
private static function newC_PDO()
{
// VARIABLES A REMPLACER
$hostname = "localhost";
$database = "alainbweb";
$username = "root";
$password = "";
// Options de configuration PDO utilisées dans les exemples
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;
self::$connexion = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);
}
public static function getC()
{
if(self::$connexion == NULL) {self::newC_PDO();}
return self::$connexion;
}
}
// Fonction d'insertion
function inserersolution($des, $quant, $prix)
{
try
{
$connexion = C_PDO::getC();
$requete = "INSERT INTO solution_lentille (designation, quantite, prix_produit) VALUES(?, ?,?)";
$stmt = $connexion->prepare($requete);
$stmt->execute([$des, $quant, $prix]);
// Trouve l'id auto incrémenté
$id = $connexion->lastInsertId ();
}
catch(PDOException $e)
{
exit($e->getMessage());
}
return $id;
}
// Fonction de modification
function modifiersolution( $id, $des, $quant, $prix)
{
try
{
$connexion = C_PDO::getC();
$requete = "UPDATE solution_lentille SET designation = ?, quantite = ?, prix_produit = ? WHERE solution_lentille.id = ?";
$stmt = $connexion->prepare($requete);
$stmt->execute([$des, $quant, $prix, $id]);
$count = $stmt->rowCount();
}
catch(PDOException $e)
{
exit($e->getMessage());
}
return $count ? "Mise à jour OK" : "Aucune mise à jour n'a été faite";
}
// Fonction de suppression
function supprimersolution($id)
{
try
{
$connexion = C_PDO::getC();
$requete = "DELETE FROM solution_lentille WHERE solution_lentille.id = ?";
$stmt = $connexion->prepare($requete);
$stmt->execute([$id]);
$count = $stmt->rowCount();
}
catch(PDOException $e)
{
exit($e->getMessage());
}
return $count ? "Supression OK" : "Aucune suppression n'a été faite";
}
// function de vérification commune à l'ajout et à la modification
function verifpost ($post)
{
$erreur = !is_numeric($post['quant']) ? "La quantité doit être une valeur numérique" : null;
$erreur = !is_numeric($post['prix']) ? "Le prix doit être une valeur numérique" : $erreur;
$erreur = empty($post['des']) ? "La désignation doit être renseignée" : $erreur;
return $erreur;
}
// Ajout en provenance du formulaire
if (isset($_POST["ajout"]) && $_POST["ajout"] == "ajouter")
{
// Enregistre le post en session pour éviter d'avoir à ressaisir tous les champs en cas d'erreur
$_SESSION['ajout_lentilles'] = $_POST;
//J'applique trim sur les éléments du tableau pour supprimer les espaces blancs en début et fin de chaine qui pourraient être rentrés inopinément par l'utilisateur
$post = array_map('trim',$_POST);
//Fonction de vérification
$erreur = verifpost($post);
// Si pas d'erreur on lance l'insertion en récupèrant l'id auto incrémenté
$id = empty($erreur) ? inserersolution($post['des'], $post['quant'], $post['prix']) : null;
// On affiche un message d'erreur uniquement si nécéssaire. Si OK le header renverra vers l'élément inséré
$_SESSION['message_lentilles'] = isset($erreur) ? $erreur : null;
// Header pour éviter les multiples post et le messgae du navigateur si on réaffiche cette page. L'ancre id sert pour aller à l'élément inséré
header('Location: '.$_SERVER['PHP_SELF'].'#lent'.$id);exit;
}
// Modification en provenance du formulaire
if (isset($_POST["modif"]) && $_POST["modif"] == "modifier")
{
$_SESSION['modif_lentilles'] = $_POST;
$post = array_map('trim',$_POST);
$erreur = verifpost($post);
$_SESSION['message_lentilles'] = empty($erreur) ? modifiersolution($post['id'], $post['des'], $post['quant'], $post['prix']) : $erreur;
header('Location: '.$_SERVER['PHP_SELF'].'#lent'.$post['id']);exit;
}
// Suppression en provenance du formulaire
if (isset($_POST["suppr"]) && $_POST["suppr"] == "supprimer")
{
$_SESSION['message_lentilles'] = supprimersolution($_POST['id']);
header('Location: '.$_SERVER['PHP_SELF']);exit;
}
// Variables qui pourront être affichées dans le html pour les ajouts, modifications et suppressions
$message = isset($_SESSION['message_lentilles']) ? $_SESSION['message_lentilles'] : null;
$modif = isset($_SESSION['modif_lentilles']) ? $_SESSION['modif_lentilles'] : null;
// $id_modif pour cibler le formulaire de modification
$id_modif = isset($_SESSION['modif_lentilles']['id']) ? $_SESSION['modif_lentilles']['id'] : null;
// On fait également un test sur message pour ne pas remplir les champs du formulaire d'ajout si l'insertion est réussie
$ajout = isset($_SESSION['ajout_lentilles'],$_SESSION['message_lentilles']) ? $_SESSION['ajout_lentilles'] : null;
// On efface les variables de session pour qu'elles ne soient définies qu'une fois
unset($_SESSION['message_lentilles'],$_SESSION['modif_lentilles'],$_SESSION['ajout_lentilles']);
//Affichage des résultats en alimentant (hydratant) les champs des formulaires de modification et suppression
$select = "SELECT id, designation, quantite, prix_produit FROM solution_lentille ORDER BY designation";
$connexion = C_PDO::getC();
// Pas besoin de requête préparée ici puisqu'il n'y a pas de variables utilisateur dans la requête
$read = $connexion->query($select);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CRUD (Create, read, update and delete)</title>
<style>
body {
font-family:Verdana, Geneva, sans-serif
}
form p {
margin:0.5em;
padding:0;
}
form .label {
display:inline-block;
width:120px;
}
#message {
border:1px solid black;
background:#0CF;
font-size:1.5em;
text-align:center;
}
</style>
</head>
<body>
<?php
// On fait afficher ici les messages de suppression et d'ajout mais pas ceux de modification qui seront affichés dans le formulaire concerné
if(isset($message) && empty($id_modif)) echo '<p id="message">'.htmlspecialchars($message).'</p>';?>
<p>Ajouter</p>
<form action="#" method="post">
<fieldset>
<legend>Ajouter</legend>
<p><label><span class="label">Designation : </span><input type="text" name="des" value="<?=isset($ajout['des']) ? htmlspecialchars($ajout['des']) : null;?>" /></label></p>
<p><label><span class="label">Quantite : </span><input type="number" name="quant" value="<?=isset($ajout['quant']) ? htmlspecialchars($ajout['quant']) : null;?>" /></label></p>
<p><label><span class="label">Prix : </span><input type="text" name="prix" value="<?=isset($ajout['prix']) ? htmlspecialchars($ajout['prix']) : null;?>" /></label></p>
<button type="submit" name="ajout" value="ajouter">Ajouter</button>
</fieldset>
</form>
<p style="margin-top:3em">Modifier ou Supprimer</p>
<?php
foreach ($read as $row)
{?>
<!-- l'id sert d'ancre de redirection pour les ajouts / modifications (Attention de ne pas utiliser d'id statique dans ces lignes puisque c'est une boucle)-->
<form action="#" method="post" style="margin-bottom:0.5em" id="lent<?= isset($row->id)? htmlspecialchars($row->id) : ''?>">
<fieldset>
<!-- message des modifications -->
<?= isset($id_modif, $message) && $row->id == $id_modif ? '<p style="color:blue">'.htmlspecialchars($message).'<p>' : ''?>
<input type="hidden" name="id" value="<?= htmlspecialchars($row->id)?>" >
<p><label><span class="label">Designation : </span><input type="text" name="des" value="<?= $row->id == $id_modif ? htmlspecialchars($modif['des']) : htmlspecialchars($row->designation) ?>" /></label></p>
<p><label><span class="label">Quantite : </span><input type="number" name="quant" size="10" value="<?= $row->id == $id_modif ? htmlspecialchars($modif['quant']) : htmlspecialchars($row->quantite) ?>" /></label></p>
<p><label><span class="label">Prix : </span><input type="text" name="prix" value="<?= $row->id == $id_modif ? htmlspecialchars($modif['prix']) : htmlspecialchars($row->prix_produit) ?>" /></label></p>
<button type="submit" name="suppr" value="supprimer">Supprimer</button>
<button style="margin-left:2em" type="submit" name="modif" value="modifier">Modifier</button>
</fieldset>
</form>
<?php }?>
</body>
</html> |
Partager