Premiers pas

Afficher la liste des auteurs.

Gestion de livres

Reproduire la page suivante avec :

  • Affichage depuis la liste des livres
  • Ajout fonctionnel
  • Suppression fonctionnelle
  • Edition fonctionnelle (on réutilisera le formulaire d'ajout en changeant le libellé du bouton de validation)
Formulaire à reproduire

db_config.php

<?php

$db_config = array();
$db_config['SGBD']	= 'mysql';
$db_config['HOST']	= '127.0.0.1';
$db_config['DB_NAME']	= 'Vente';
$db_config['USER']	= 'virgile';
$db_config['PASSWORD']	= 'toto';
$db_config['ENCODING'] = "utf8";
$db_config['OPTIONS']	= array(
    // Les erreurs provoqueront des exceptions PDO
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);

?>
            

connect.php

<?php
require_once 'db_config.php';
try {
    $db_server = new PDO($db_config['SGBD'] .
        ':host=' . $db_config['HOST'] .
        ';dbname=' . $db_config['DB_NAME'] .
        ';charset=' . $db_config['ENCODING'],
        $db_config['USER'],
        $db_config['PASSWORD']);
} catch (PDOException $e) {
    die("Connexion impossible au serveur MySQL :" . $e->getMessage());
}

?>
            

manageLivre.php

<?php

require_once 'connect.php';
error_reporting(E_ALL); // Afficher toutes les erreurs, utilise pour debugger

$isbn = '';
$titre = '';
$type = '';
$annee = '';
$prix = '';

// Test des donnees du formulaires
if (isset($_POST['ISBN'])) {
    $isbn = getPost('ISBN');

    // Suppression
    if (isset($_POST['Supprimer']) && '' != $isbn) {
        try {
            // Suppresion de la jointure avec les auteurs
            $query = $db_server->prepare('DELETE FROM AuteurLivre WHERE idLivre=?');
            $query->execute(array($isbn));

            // Suppression du livre
            $query = $db_server->prepare('DELETE FROM Livre WHERE isbn=?');
            $query->execute(array($isbn));

            $isbn = '';
        } catch (PDOException $e) {
            die('Erreur base :'.$e->getMessage());
        }
    } elseif (isset($_POST['Editer']) && '' != $isbn) {
        list($isbn, $titre, $type, $annee, $prix) = getLivre($db_server, $isbn);
    } else {
        if (
            isset($_POST['Titre']) &&
            isset($_POST['Type']) &&
            isset($_POST['Annee']) &&
            isset($_POST['Prix'])) {
            $titre = getPost('Titre');
            $type = getPost('Type');
            $annee = getPost('Annee');
            $prix = getPost('Prix');

            // Ajout
            if (isset($_POST['Ajouter']) && '' != $isbn) {
                $query = $db_server->prepare('INSERT INTO Livre (`ISBN`, `Titre`, `Type`, `Annee`, `Prix`) VALUES (?, ?, ?, ?, ?)');
                try {
                    $query->execute(array($isbn, $titre, $type, $annee, $prix));
                } catch (PDOException $e) {
                    die('Erreur base :'.$e->getMessage());
                }
                $isbn = '';
                $titre = '';
                $type = '';
                $annee = '';
                $prix = '';
            }
            if (isset($_POST['Enregistrer']) && '' != $isbn) {
                $query = $db_server->prepare('UPDATE Livre SET `Titre`=?, `Type`=?, `Annee`= ?, `Prix`=? WHERE isbn=?');
                try {
                    $query->execute(array($titre, $type, $annee, $prix, $isbn));
                } catch (PDOException $e) {
                    die('Erreur base :'.$e->getMessage());
                }

                $isbn = '';
                $titre = '';
                $type = '';
                $annee = '';
                $prix = '';
            }
        }
    }
}

// Formulaire
echo <<<_END
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>Exercice</title>
_END;

echo <<<_END
</head>
<body class="container"><header id="logo" class="jumbotron">
<h1>Gestion des livres</h1></header>
<article>
<section class="card">
<header><h2>Saisie</h2></header>
<form action="manageLivre.php" method="post">

_END;
echo '<label for="isbn">ISBN</label> <input type="text" id="isbn" name="ISBN" value="'.$isbn.'"/><br>';
echo '<label for="titre">Titre</label> <input type="text" id="titre" name="Titre" value="'.$titre.'"/><br>';
echo '<label for="type">Type</label> <input type="text" id="type" name="Type" value="'.$type.'"/><br>';
echo '<label for="annee">Annee</label> <input type="text" id="annee" name="Annee" value="'.$annee.'"/><br>';
echo '<label for="prix">Prix</label> <input type="text" id="prix" name="Prix" value="'.$prix.'"/><br>';
if (isset($_POST['Editer']) && '' != $isbn) {
    echo '<input type="submit" value="Enregistrer" name="Enregistrer"/>';
} else {
    echo '<input type="submit" value="Ajouter" name = "Ajouter">';
}
echo <<<_END

</form>
</section>
</article>
<article>
<h2>Ouvrages</h2>
_END;

$query = 'SELECT * FROM Livre ORDER BY Annee, isbn';
$results = $db_server->query($query);

foreach ($results as $row) {
    list($isbn, $titre, $type, $annee, $prix) = donneesLivre($row);
    // Resultats
    echo '<section class="card"><header class="card-header"><h2>'.$titre.'</h2></header><div class="card-body">';
    echo $type.' de '.$annee.'<br>';
    echo 'ISBN : '.$isbn.' / Prix :'.$prix.' &euro;<br>';
    echo <<<_END
<form action="manageLivre.php" method="post">
<input type="hidden" name="ISBN" value="$isbn"/>
<input type="submit" name="Supprimer" value="Supprimer"/>
<input type="submit" name="Editer" value="Editer"/>
</form>
</div></section>
_END;
}

$db_server = null;

// Fonction de securite
function getPost($var)
{
    return $_POST[$var];
}

function getLivre($db_server, $isbn)
{
    try {
        /** @var PDOStatement $query */
        $query = $db_server->prepare('select `ISBN`, `Titre`, `Type`, `Annee`, `Prix` from Livre where isbn=?');
        /** @var bool $result */
        $result = $query->execute(array($isbn));

        if ($query->rowCount()) {
            return donneesLivre($query->fetch());
        }

        return null;
    } catch (PDOException $e) {
        die('Erreur base :'.$e->getMessage());
    }
}

function donneesLivre($row)
{
    $isbn = stripslashes($row['ISBN']);
    $titre = stripslashes($row['Titre']);
    $type = stripslashes($row['Type']);
    $annee = stripslashes($row['Annee']);
    $prix = stripslashes($row['Prix']);

    return array($isbn, $titre, $type, $annee, $prix);
}

            

Création d'un utilisateur pour la BDD

CREATE USER 'lpars'@'localhost' IEDNTIFIED BY 'pouetpouet'; -- mot de passe à adapter
GRANT ALL PRIVILEGES ON ma_bdd.* TO 'lpars'@'localhost' WITH GRANT OPTION; -- BDD à adapter
FLUSH PRIVILEGES;