08 Mar2016
Les opérations CRUD avec l'interface procédurale de Mysqli
Objectif :
- Créer une table sous Mysql.
- Effectuer les opérations CRUD (Insertion , Lecture , Mise à jour , Suppression) en php sur une table dans la base de donnée.
- Utiliser Les fonctions procédurale de l'extension Mysqli.
- Faire des redirections.
Énoncé :
On souhaite développer une application qui permet à l'utilisateur d'effectuer les différentes opérations CRUD sur la table "exercice": exercice (id , titre, auteur, date_creation)
- Créer une base de données "exelib" sous Mysql et dans laquelle ajouter la table exercice.
- Développer une page php qui permet d'ajouter un nouveau exercice , récupère et affiche la liste des exercices sous forme d'un tableau (Voir la figure 1) :
- Le lien "Modifier" envoie vers une page qui récupère l'exercice par son id , l'affiche sur un formulaire afin de permettre à l'utilisateur de le modifier. Après la modification on redirige l'utilisateur vers la première page (Figure 1) en affichant un message de réussite ou d’échec de la modification.
- Le lien "Supprimer" envoie vers une page qui traite la suppression de l'exercice en question après confirmation de l’utilisateur (Voir Figure 2).Après le traitement on redirige l'utilisateur vers la première page (Figure 1) en affichant un message de réussite ou d’échec de la suppression (Voir Figure 3).
- la requête pour créer la table exercice sous phpMyAdmin :
CREATE TABLE exercice ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, titre VARCHAR(70) NOT NULL, auteur VARCHAR(30) NOT NULL, date_creation date NOT NULL )
- Script de la page "exercice.php" qui permet d'ajouter un exercice et afficher la liste des exercices .
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "exelib"; // Création de la connexion $conn = mysqli_connect($servername, $username, $password, $dbname); // Tester la connexion if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } //Après clic sur le bouton "Envoyer" envoie de données par post if(count($_POST)>2) { //récupération et protection des données envoyées $titre = mysqli_real_escape_string($conn,$_POST["titre"]); $auteur = mysqli_real_escape_string($conn, $_POST["auteur"]); $date = mysqli_real_escape_string($conn, $_POST["date"]); $sql = "INSERT INTO exercice (titre, auteur, date_creation) VALUES ('{$titre}', '{$auteur}', '{$date}')"; //exécuter la requête d'insertion if (mysqli_query($conn, $sql)) { $message= "L’exercice a été ajouté avec succès"; } else { $message = "Error: " . $sql . "<br>" . mysqli_error($conn); } } //les autres pages peuvent envoyer un message dans L’URL. On le récupère ici pour l'afficher dans l’élément "div.message" if(isset($_GET["message"])){ $message=$_GET["message"]; } ?> <!doctype html> <html> <head> <title>PHP CRUD</title> <meta charset="utf-8"> <style type="text/css"> /* Des styles pour la mise en forme de la page*/ div{ margin: auto; width: 600px; margin-bottom: 20px; } label{ display: block; width: 150px; float: left; } thead{ background: #f39c12; } tbody{ background: #3498db; color: white } td,th{ width: 100px; text-align: center; border: 1px solid white; } a{ color: white; } .message{ background: #d35400; color:white; padding: 5px; } </style> </head> <body> <?php if(isset($message)) { echo "<div class='message'>".$message."</div>"; } ?> <div class="frm"> <form name="exe" action="exercice.php" method="post"> <fieldset> <legend>Ajouter un exercice</legend> <label for="titre">Titre de l'exercice</label> <input type="text" id="titre" name="titre" required autofocus><br/> <label for="auteur">Auteur de l'exercice</label> <input type="text" id="auteur" name="auteur" required><br/> <label for="date">Date création</label> <input type="date" id="date" name="date" required placeholder="YYYY/MM/DD"><br/> <input Type="submit" value="Envoyer"> </fieldset> </form> </div> <div class="grid"> <table cellspacing="0"> <thead> <tr> <th>id</th> <th>titre</th> <th>auteur</th> <th>date</th> <th colspan="2">Actions</th> </tr> </thead> <tbody> <!-- Récupération de la liste des exercices --> <?php $sql = "SELECT * FROM exercice"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // Parcourir les lignes de résultat while($row = mysqli_fetch_assoc($result)) { echo "<tr><td> " . $row["id"]. "</td><td>" . $row["titre"]. "</td><td>" . $row["auteur"]."</td><td>" . $row["date_creation"] ."</td><td><a href=\"modif_exe.php?id=".$row["id"]."\">Modifier</a></td>" ."</td><td><a href=\"supp_exe.php?id=".$row["id"]."\" onclick=\"return confirm('Vous voulez vraiment supprimer cet exercice')\">Supprimer</a></td></tr>"; } // Le lien Modifier envoie vers la page modif_exe.php avec l'id de l'exercice // Le lien Supprimer envoie vers la page supp_exe.php avec l'id de l'exercice // L'attribut "onclick" fait appel à la fonction confirm() afin de permettre à l'utilisateur de valider l'action de suppression. } ?> </tbody> </table> </div> </body> </html>
- Script de la page modif_exe.php qui permet de modifier un exercice
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "exelib"; // Création de la connexion $conn = mysqli_connect($servername, $username, $password, $dbname); // Tester la connexion if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } //Après appel de la page on récupéré l'id de l'exercice en question if(isset($_GET["id"])){ //protection de données $idm = mysqli_real_escape_string($conn,$_GET["id"]); $sql = "SELECT * FROM exercice WHERE id=$idm"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // Récupérer des informations de l'exercice en question qui seront par la suite afficher dans le formulaire en bas $row = mysqli_fetch_assoc($result); $id=$row["id"]; $titre=$row["titre"]; $auteur=$row["auteur"]; $date=$row["date_creation"]; } else{ //Si erreur envoie de message à la page exercice.php $message="L'exercice est introuvable"; header("Loation:exercice.php?message=$message"); } } // Après clic sur le bouton modifier on récupère les données envoyées par la méthode post if(count($_POST)>3) { $titre = mysqli_real_escape_string($conn,$_POST["titre"]); $auteur = mysqli_real_escape_string($conn, $_POST["auteur"]); $date = mysqli_real_escape_string($conn, $_POST["date"]); $id=mysqli_real_escape_string($conn, $_POST["id"]); $sql = "update exercice set titre='{$titre}' , auteur='{$auteur}', date_creation='{$date}' WHERE id=$id"; //executer le requete de l'update et redirection vers la page exercice.php if (mysqli_query($conn, $sql)) { $message= "L'exercice a été mis à jour avec succes"; } else { $message = "Error: " . $sql . "<br>" . mysqli_error($conn); } header("Location:exercice.php?message=$message"); } ?> <!-- Afficher le formulaire rempli par les données de l'exercice récupéré en haut.--> <form name="exe" action="modif_exe.php" method="post"> <fieldset> <legend>Modifier un exercice</legend> <input type="hidden" id="id" name="id" value="<?php if(isset($id)) { echo $id; } ?>"><br/> <label for="titre">Titre de l'exercice</label> <input type="text" id="titre" name="titre" required value="<?php if(isset($titre)) { echo $titre; } ?>"><br/> <label for="auteur">Auteur de l'exercice</label> <input type="text" id="auteur" name="auteur" required value="<?php if(isset($auteur)) { echo $auteur; } ?>"><br/> <label for="date">Date creation</label> <input type="date" id="date" name="date" required value="<?php if(isset($date)) { echo $date; } ?>"><br/> <input Type="submit" value="Modifier"> </fieldset> </form>
- Script de la page supp_exe.php qui tarite la supression d'un exercice donné.
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "exelib"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } if(!empty($_GET["id"])){ //Supprimer l'exercice dont l'id est envoyé avec l'URL $ids = mysqli_real_escape_string($conn,$_GET["id"]); $sql = "DELETE FROM exercice WHERE id=$ids"; echo $sql; if (mysqli_query($conn, $sql)) { $message= "l'exercice a été supprimé avec succés"; } else { $mesasge="Erreur pendant la suppression de l'exercice: " . mysqli_error($conn); } //Redirection vers la page exercice.php avec un message résultat de la suppression header("Location:exercice.php?message=$message"); }