Apprendre à programmer

Afficher des Fichiers PDF depuis une Base de Données en PHP

L’affichage de fichiers PDF sur des sites web est une pratique courante, mais le stockage et la récupération efficaces de ces fichiers, surtout lorsqu’ils sont sauvegardés dans une base de données, peuvent poser des défis. Dans ce guide pratique, nous allons explorer étape par étape comment afficher des fichiers PDF enregistrés dans une base de données sur une page HTML à l’aide du langage de programmation PHP.

Création de la Structure de la Base de Données

Pour commencer, nous devons mettre en place une structure de base de données pour stocker nos fichiers PDF. Nous allons créer une table appelée pdf_files avec les colonnes suivantes :

  • id : un identifiant unique pour chaque fichier PDF, auto-incrémenté pour assurer l’unicité.
  • nom : le nom du fichier PDF.
  • contenu : le contenu réel du fichier PDF, stocké en tant que données BLOB.

Voici un exemple de requête SQL pour créer cette table :

CREATE TABLE pdf_files (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nom VARCHAR(255) NOT NULL,
    contenu LONGBLOB NOT NULL
);
Création du Formulaire de Téléchargement

Nous devons maintenant créer un formulaire HTML permettant aux utilisateurs de télécharger des fichiers PDF sur notre site. Voici à quoi pourrait ressembler ce formulaire :

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Télécharger un fichier PDF</title>
</head>
<body>
    <h2>Télécharger un fichier PDF</h2>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="pdf_file" accept="application/pdf">
        <button type="submit" name="submit">Télécharger</button>
    </form>
</body>
</html>
Gestion du Téléchargement et de l’Enregistrement

Nous devons désormais créer un script PHP (upload.php) pour gérer le téléchargement et l’enregistrement du fichier PDF dans la base de données. Voici un exemple de script :

<?php
if (isset($_POST['submit'])) {
    if (isset($_FILES['pdf_file']) && $_FILES['pdf_file']['error'] === UPLOAD_ERR_OK) {
        // Connexion à la base de données
        $pdo = new PDO('mysql:host=hostname;dbname=nom_de_la_base_de_données', 'nom_utilisateur', 'mot_de_passe');

        // Récupération du nom et du contenu du fichier
        $nom = $_FILES['pdf_file']['name'];
        $contenu = file_get_contents($_FILES['pdf_file']['tmp_name']);

        // Préparation et exécution de la requête d'insertion
        $stmt = $pdo->prepare("INSERT INTO pdf_files (nom, contenu) VALUES (:nom, :contenu)");
        $stmt->bindParam(':nom', $nom);
        $stmt->bindParam(':contenu', $contenu, PDO::PARAM_LOB);
        $stmt->execute();

        // Redirection vers la page d'accueil avec un message de succès
        header("Location: index.php?upload_success=1");
        exit();
    } else {
        echo "Une erreur s'est produite lors du téléchargement du fichier.";
    }
}
?>
Affichage du Fichier PDF Enregistré

Enfin, pour afficher le fichier PDF enregistré dans la base de données sur une page HTML, nous créons une autre page (view_pdf.php) qui récupère et affiche le contenu du fichier PDF. Voici un exemple de script :

<?php
$pdo = new PDO('mysql:host=hostname;dbname=nom_de_la_base_de_données', 'nom_utilisateur', 'mot_de_passe');

if (isset($_GET['id'])) {
    $id = $_GET['id'];

    $stmt = $pdo->prepare("SELECT nom, contenu FROM pdf_files WHERE id = :id");
    $stmt->bindParam(':id', $id);
    $stmt->execute();
    $pdf = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($pdf) {
        header("Content-type: application/pdf");
        echo $pdf['contenu'];
    } else {
        echo "Fichier PDF non trouvé.";
    }
} else {
    echo "ID du fichier PDF non spécifié.";
}
?>

En suivant ces étapes, vous pourrez créer un système robuste pour télécharger, stocker et afficher des fichiers PDF depuis une base de données sur une page HTML, offrant ainsi une expérience utilisateur enrichie sur votre site web. Assurez-vous de remplacer les valeurs de connexion à la base de données (hostname, nom_de_la_base_de_données, nom_utilisateur, mot_de_passe) par les vôtres.

Voici comment vous pourriez illustrer chaque exemple avec du code :

Téléchargement d’un fichier PDF
<!-- Formulaire HTML pour télécharger un fichier PDF -->
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="pdf_file" accept="application/pdf">
    <button type="submit" name="submit">Télécharger</button>
</form>
// Script PHP (upload.php) pour gérer le téléchargement et l'enregistrement du fichier PDF
if (isset($_POST['submit'])) {
    if (isset($_FILES['pdf_file']) && $_FILES['pdf_file']['error'] === UPLOAD_ERR_OK) {
        // Traitement du téléchargement et insertion dans la base de données
    } else {
        echo "Une erreur s'est produite lors du téléchargement du fichier.";
    }
}
Affichage de fichiers PDF dans un tableau de bord
// Affichage des fichiers PDF dans le tableau de bord
$stmt = $pdo->query("SELECT id, nom FROM pdf_files");
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Partage sécurisé de documents sensibles
// Vérification des autorisations d'accès aux fichiers PDF
$id_utilisateur = $_SESSION['id_utilisateur']; // Supposons que l'ID de l'utilisateur est stocké en session
$stmt = $pdo->prepare("SELECT id, nom FROM pdf_files WHERE id_utilisateur = :id_utilisateur");
$stmt->bindParam(':id_utilisateur', $id_utilisateur);
$stmt->execute();
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Gestion des contrats et des accords
// Affichage des contrats dans une section dédiée du tableau de bord
$stmt = $pdo->prepare("SELECT id, nom FROM pdf_files WHERE type_document = 'contrat'");
$stmt->execute();
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}

Voici comment vous pourriez illustrer chaque cas particulier avec des exemples de code :

Gestion des documents confidentiels
// Vérification des autorisations d'accès aux fichiers PDF sensibles
$id_utilisateur = $_SESSION['id_utilisateur']; // Supposons que l'ID de l'utilisateur est stocké en session
$stmt = $pdo->prepare("SELECT id, nom FROM pdf_files WHERE id_utilisateur = :id_utilisateur AND confidentialite = 'sensible'");
$stmt->bindParam(':id_utilisateur', $id_utilisateur);
$stmt->execute();
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Archivage de documents historiques
// Affichage des archives de documents historiques dans une section dédiée
$stmt = $pdo->prepare("SELECT id, nom FROM pdf_files WHERE date_creation < :date_limite");
$date_limite = date('Y-m-d', strtotime('-5 years')); // Exemple : afficher les documents plus anciens que 5 ans
$stmt->bindParam(':date_limite', $date_limite);
$stmt->execute();
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Collaboration sur des documents partagés
// Affichage des documents partagés pour collaboration
$stmt = $pdo->query("SELECT id, nom FROM pdf_files WHERE partage = 'public'");
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Personnalisation des documents pour les utilisateurs
// Génération d'une facture PDF personnalisée pour un utilisateur spécifique
$id_utilisateur = $_SESSION['id_utilisateur']; // Supposons que l'ID de l'utilisateur est stocké en session
$stmt = $pdo->prepare("SELECT nom_fichier FROM pdf_files WHERE id_utilisateur = :id_utilisateur AND type_document = 'facture'");
$stmt->bindParam(':id_utilisateur', $id_utilisateur);
$stmt->execute();
while ($row = $stmt->fetch()) {
    echo "<a href='view_pdf.php?id={$row['id']}'>{$row['nom']}</a><br>";
}
Audit et traçabilité des documents
// Enregistrement des métadonnées de modification pour un document PDF
$id_document = $_GET['id']; // Supposons que l'ID du document est passé en paramètre d'URL
$id_utilisateur = $_SESSION['id_utilisateur']; // Supposons que l'ID de l'utilisateur est stocké en session
$date_modification = date('Y-m-d H:i:s');
$stmt = $pdo->prepare("INSERT INTO modifications_documents (id_document, id_utilisateur, date_modification) VALUES (:id_document, :id_utilisateur, :date_modification)");
$stmt->bindParam(':id_document', $id_document);
$stmt->bindParam(':id_utilisateur', $id_utilisateur);
$stmt->bindParam(':date_modification', $date_modification);
$stmt->execute();

En utilisant ces extraits de code, vous pouvez voir comment chaque cas particulier est adressé avec des fonctionnalités spécifiques implémentées en PHP pour gérer les fichiers PDF dans une base de données de manière personnalisée et sécurisée.

Autres articles

Démarrer avec Symphony PHP : Guide complet...
Symfony est un framework PHP puissant et largement utilisé pour...
Read more
La fonction in_array() en PHP - Exercices...
Cet article explore des exercices corrigés de la fonction in_array()...
Read more
Guide détaillé de la fonction in_array() en...
En PHP, la manipulation des tableaux est une composante fondamentale...
Read more

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *