🍏
SAE203
  • 📖CM1 : Présentation de la SAE
  • 💾CM2 : Introduction à GitHub
  • 🎆TD01 : intégration 1/2
  • 🎆TD02 : intégration 2/2
  • 🎆CM3 : Template et responsive
  • 📔TD03 : Formulaire et traitement
  • 🗓️TD04 : filter_var et filtrage des données des formulaires en PHP
  • 🤝CM4 : Eco-conception & accessibilité
  • 💾TD05 : github
  • 🌳TD06 : Eco-conception & accessibilité
  • 🐛TP01 : réalisation de la page listing.php
  • 🌐TD07 : HEBERGEMENT SITE SAE203
  • 🌐TD08 : Les Clés du DevOps
  • 🏆BILAN des rendus
  • 😇Guide de Dépannage Git
  • **anciennes pages ci-dessous**
  • 🐛ancien TP01 : réalisation de la page listing.php
  • 🗓️ancien TD04 : vérification front
  • 📚ancien TD05 : MYSQL en ligne de commandes
  • *************************
  • 📖CM5 : Présentation de la semaine 2
  • 🤩TD 09 et 10 : librairie CRUD en PHP (1/2)
  • 😎TD 11 et 12 : librairie CRUD en PHP (2/2)
  • 🏍️TP 02 : Recherche : autocomplétion du formulaire + résultats
  • 🔐TD 13: Les secrets du htaccess
  • 🐛TP 03: débugage
  • ✅Bilan des rendus de la 2ieme semaine
Propulsé par GitBook
Sur cette page
  • 1. Suppression d'un album :
  • 2. Modification des données :
  • 5. À la fin :
Exporter en PDF

TD 11 et 12 : librairie CRUD en PHP (2/2)

1. Suppression d'un album :

  • Pour effacer un album de la table, on va créer la page table1_delete.php qui va recevoir en méthode GET l'id de l'album à effacer dans la table grâce au lien d'effacement dans table1_gestion.php (fonction afficherListe() dans lib_crud.inc.php) :

...
echo '<td><a href="table1_delete.php?num='
	.$value['bd_id'].'">Supprimer</a></td>'."\n";
...
  • La page table1_delete.php va contenir le code suivant :

<!DOCTYPE html>
<html>
	<head>
		<title>SAE203</title>
	</head>
	<body style="font-family:sans-serif;">
	    <a href="../index.php">Accueil</a> | <a href="table1_gestion.php">Gestion</a>
	    <hr />
	    <h1>Supprimer une bande dessinée</h1>
	    <hr />
	    <?php
	        require '../lib_crud.inc.php';
	
	        $id=$_GET['num'];
	
	        $co=connexionBD();
	        effacerBD($co, $id);
	        deconnexionBD($co);
	    ?>
	</body>
</html>
  • Dans cette page, on récupère le numéro de l'album, on se connecte à la base de données, on appelle la fonction effacerBD()en lui passant deux paramètres : l'identifiant de connexion à la base de données ($co) et le numéro de l'album à effacer ($id).

  • Il faut donc ajouter le code de la fonction effacerBD() dans lib_crud.inc.php :

...
    // fonction d'effacement d'une BD
    function effacerBD($mabd, $id) {
        $req = '???';
        echo '<p>'.$req.'</p>'."\n";
        try{
            $resultat = $mabd->query($req);
        } catch (PDOException $e) {
            // s'il y a une erreur, on l'affiche
            echo '<p>Erreur : ' . $e->getMessage() . '</p>';
            die();
        }
        if ($resultat->rowCount()==1) {
            echo '<p>La bande dessinée '.$id.' a été supprimée du catalogue.</p>'."\n";
        } else {
            echo '<p>Erreur lors de la suppression.</p>'."\n";
            die();
        }
    }
  • Dans le code précédent, il faut évidemment remplacer ??? par la requête d'effacement d'un album dans la table bandes_dessinees. Attention, avec une requête de type UPDATEou DELETE, il faut absolument mettre une clause WHERE dans la requête ! Sinon, on efface ou on modifie toutes les lignes de la table.

  • Dans l'exemple ci-dessous, j'avais ajouté l'album de titre "Jérôme", il apparaît bien dans la liste, j'appuie sur supprimer et il a effectivement disparu de la liste des albums.

2. Modification des données :

  • Pour modifier les données, on va utiliser le même formulaire que pour la création mais il faut le pré-remplir avec la valeur actuelle des champs.

  • Le code incomplet de table1_update_form.php est donné ici, il manque le pré-remplissage des champs prix et nombre de pages :

<!DOCTYPE html>
<html>
<head>
	<title>SAE203</title>
</head>
<body style="font-family:sans-serif;">
    <a href="../index.php">Accueil</a> | <a href="table1_gestion.php">Gestion</a>
	<hr>
    <h1>Modifier une bande dessinée</h1>
    <hr />
    <?php
        require '../lib_crud.inc.php';

        $id=$_GET['num'];
        $co=connexionBD();
        $album=getBD($co, $id);
        var_dump($album);
        deconnexionBD($co);
    ?>
    <form action="table1_update_valide.php" method="POST" enctype="multipart/form-data" >
        <input type="hidden" name="num" value="<?= $id; ?>" />
        Titre : <input type="text" name="titre" value="<?php echo $album['bd_titre']; ?>" required/><br />
        Année : <input type="number" name="annee" min="-5000" max="3000" value="<?= $album['bd_annee']; ?>" required /><br />
        Nb pages : <input type="number" name="pages" value="" required /><br />
        Prix : <input type="number" name="prix" min="0.00" max="10000.00" step="0.01" value="" required /><br />
        Résumé : <textarea name="resume" required><?= $album['bd_resume']; ?></textarea><br />
        Photo : <input type="file" name="photo" required /><br />
        Auteur : <select name="auteur" required>
        <?php
            $co=connexionBD();
            //afficherAuteursOptionsSelectionne($co, $album['_auteur_id']);
            deconnexionBD($co);
        ?>
        </select><br />
        <input type="submit" value="Modifier" />
    </form>
</body>
</html>

3. Fonction getBD() pour récupérer les informations d'un album :

  • Pour pré-remplir les champs, on va créer une fonction getBD() dans lib_crud.inc.php qui va prendre en paramètres la connexion à la base de données et l'id de l'album à modifier.

  • On va récupérer cet id et on va remplir une variable $album avec les informations pour cet album.

  • Ajoutez la fonction getBD() dans lib_crud.inc.php, modifiez le code pour créer la "bonne" requête à la place de ??? :

...
    // fonction de récupération des informations d'une BD
    function getBD($mabd, $idAlbum) {
        $req = '???='.$idAlbum;
        echo '<p>GetBD() : '.$req.'</p>'."\n";
        try {
            $resultat = $mabd->query($req);
        } catch (PDOException $e) {
            // s'il y a une erreur, on l'affiche
            echo '<p>Erreur : ' . $e->getMessage() . '</p>';
            die();
        }
        // la fonction retourne le tableau associatif 
        // contenant les champs et leurs valeurs
        return $resultat->fetch();
    }
  • Il manque la sélection du "bon" auteur pour notre album. On va donc créer une fonction afficherAuteursOptionsSelectionne() qui va générer, comme la fonction afficherAuteursOptions() les balises <option> du <select> mais cette fonction va en plus ajouter l'attribut selected="selected" dans la balise pour pré-sélectionner l'auteur de l'album dans la liste.

  • Le code de la fonction afficherAuteursOptionsSelectionne est donné ici, on remarque que l'on connaît le "bon" auteur car c'est le paramètre $idAuteur qui le contient :

...
	// afficher le "bon" auteur parmi les auteurs (prénom et nom)
   // dans les balises "<option>"
	function afficherAuteursOptionsSelectionne($mabd, $idAuteur) {
        $req = "SELECT * FROM auteurs";
        try {
            $resultat = $mabd->query($req);
        } catch (PDOException $e) {
            // s'il y a une erreur, on l'affiche
            echo '<p>Erreur : ' . $e->getMessage() . '</p>';
            die();
        }
        foreach ($resultat as $value) {
            echo '<option value="'.$value['auteur_id'].'"';
            if ($value['auteur_id']==???) {
                echo ' selected="selected"';
            }
            echo '>';
            echo $value['auteur_prenom'].' '.$value['auteur_nom'];
            echo '</option>'."\n";
        }
    }
  • Testez votre code et vérifiez que le "bon" auteur est pré-sélectionné dans la liste.

4. Modification des données :

  • On donne le code de la page table1_update_valide.php :

<!DOCTYPE html>
<html>
	<head>
		<title>SAE203</title>
	</head>
	<body style="font-family:sans-serif;">
	    <a href="../index.php">Accueil</a> | <a href="table1_gestion.php">Gestion</a>
	    <hr />
	    <h1>Modifier une bande dessinée</h1>
	    <hr />
	    <?php
	        require '../lib_crud.inc.php';
	
	        $id=$_POST['num'];
	        $titre=$_POST['titre'];
	        $prix=$_POST['prix'];
	        $annee=$_POST['annee'];
	        $nbPages=$_POST['pages'];
	        $resume=trim($_POST['resume']);
	        $auteur=$_POST['auteur'];
	        var_dump($_POST);
	        var_dump($_FILES);
	
	        $imageType=$_FILES["photo"]["type"];
	        if ( ($imageType != "image/png") &&
	            ($imageType != "image/jpg") &&
	            ($imageType != "image/jpeg") ) {
	                echo '<p>Désolé, le type d\'image n\'est pas reconnu ! Seuls les formats PNG et JPEG sont autorisés.</p>'."\n";
	                die();
	        }
	
	        $nouvelleImage = date("Y_m_d_H_i_s")."---".$_FILES["photo"]["name"];
	
	        if(is_uploaded_file($_FILES["photo"]["tmp_name"])) {
	            if(!move_uploaded_file($_FILES["photo"]["tmp_name"], "../images/uploads/".$nouvelleImage)) {
	                echo '<p>Problème avec la sauvegarde de l\'image, désolé...</p>'."\n";
	                die();
	            }
	        } else {
	            echo '<p>Problème : image non chargée...</p>'."\n";
	            die();
	        }
	
	        $co=connexionBD();
	        modifierBD($co, $id, $titre, $annee, $prix, $nouvelleImage, $nbPages, $resume, $auteur);
	        deconnexionBD($co);
	    ?>
	</body>
</html>
  • Comme pour l'ajout, la page va récupérer les informations du formulaire de modification y compris la photo. On va ensuite appeler la fonction modifierBD() qui doit être créée dans lib_crud.inc.php et qui va réaliser la requête de modification des données dans la table.

  • Le code de la fonction modifierBD()est donné ici :

...
	// fonction de modification d'une BD dans la table bande_dessinees
    function modifierBD($mabd, $id, $titre, $annee, $prix, $nouvelleImage, $nbPages, $resume, $auteur)
    {
        $req = 'UPDATE bandes_dessinees 
                SET 
                    ??? 
                WHERE bd_id='.$id;
        echo '<p>' . $req . '</p>' . "\n";
        try {
            $resultat = $mabd->query($req);
        } catch (PDOException $e) {
            // s'il y a une erreur, on l'affiche
            echo '<p>Erreur : ' . $e->getMessage() . '</p>';
            die();
        }
        if ($resultat->rowCount() == 1) {
            echo '<p>La bande dessinée ' . $titre . ' a été modifiée.</p>' . "\n";
        } else {
            echo '<p>Erreur lors de la modification.</p>' . "\n";
            die();
        }
    }
  • Dans le code ci-dessus, modifiez la requête pour réaliser la modification de l'album dans la table.

  • Remarque : N'oubliez pas que les champs de type chaînes de caractères doivent être entourés de " dans les requêtes !

  • Le résultat en images devrait ressembler à ceci :

5. À la fin :

  • Nettoyez votre code en enlevant tous les affichages inutiles : les requêtes et les var_dump(). Vous pouvez les mettre en commentaires pour ne plus les exécuter.

  • N'oubliez pas de créer le CRUD complet pour la deuxième table (pour mon exemple, c'est la table auteurs mais pour vous cela dépend de ce que vous avez en deuxième table). Les deux CRUDs : pour la table 1 et la table 2 seront évalués pour votre note finale en SAE203.

  • Félicitations, vous avez réussi à créer un code CRUD en PHP pour la table 1, il vous faut faire la même chose (en plus simple car la table a normalement moins de champs) pour la table 2.

  • Si vous avez compris ce CRUD, vous saurez TOUS les faire, c'est toujours la même technique, ce qui change, c'est le nom de la table et le nom des champs.

  • Bon courage, portez-vous bien ! :)

PrécédentTD 09 et 10 : librairie CRUD en PHP (1/2)SuivantTP 02 : Recherche : autocomplétion du formulaire + résultats

Dernière mise à jour il y a 3 ans

😎