ajout projet cms elyes

This commit is contained in:
elyes
2025-11-03 00:39:36 +01:00
parent a1f7262e89
commit daa719eac7
25 changed files with 924 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
<?php
// Charge la config, la connexion BDD et le header
require_once __DIR__ . '/../inc/config.php';
require_once __DIR__ . '/../inc/db.php';
require_once __DIR__ . '/../inc/header.php';
// Récupère et valide l'ID d'article depuis l'URL
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($id <= 0) {
http_response_code(404);
include __DIR__.'/page404.php';
require_once __DIR__.'/../inc/footer.php';
exit;
}
// Requête sécurisée : récupère l'article + auteur avec jointure
$stmt = $pdo->prepare("
SELECT a.id, a.titre, a.contenu, a.date_creation, u.login AS auteur
FROM articles a
LEFT JOIN utilisateur u ON u.id = a.user_id
WHERE a.id = :id
");
$stmt->execute(['id'=>$id]);
$article = $stmt->fetch();
// Si aucun article trouvé → 404 propre
if (!$article) {
http_response_code(404);
include __DIR__.'/page404.php';
require_once __DIR__.'/../inc/footer.php';
exit;
}
?>
<article class="card">
<!-- Titre échappé pour prévenir la XSS -->
<h2><?= e($article['titre']) ?></h2>
<!-- Métadonnées : auteur (fallback Anonyme) + date formatée -->
<p class="muted">
Par <a href="/public/author.php?login=<?= urlencode($article['auteur'] ?? 'inconnu') ?>"><?= e($article['auteur'] ?? 'Anonyme') ?></a>
— <?= e(date('d/m/Y H:i', strtotime($article['date_creation']))) ?>
</p>
<!-- Contenu : échappé puis nl2br pour conserver les retours à la ligne -->
<div><?= nl2br(e($article['contenu'])) ?></div>
</article>
<!-- Lien de retour à l'accueil -->
<p><a href="/public/index.php">&larr; Retour à l'accueil</a></p>
<?php
// Footer commun (scripts, fermeture des balises)
require_once __DIR__ . '/../inc/footer.php';
?>

View File

@@ -0,0 +1,50 @@
<?php
// Charge la config, la connexion BDD et le header
require_once __DIR__ . '/../inc/config.php';
require_once __DIR__ . '/../inc/db.php';
require_once __DIR__ . '/../inc/header.php';
// Récupère le login depuis la requête et le valide
$login = trim($_GET['login'] ?? '');
if ($login === '') {
include __DIR__.'/page404.php';
require_once __DIR__.'/../inc/footer.php';
exit;
}
// Recherche de l'utilisateur par son login (requête préparée)
$stmt = $pdo->prepare("SELECT id, login FROM utilisateur WHERE login = :login");
$stmt->execute(['login'=>$login]);
$user = $stmt->fetch();
// Si l'utilisateur n'existe pas, message simple puis fin
if (!$user) {
echo "<div class='card'><p>Utilisateur introuvable.</p></div>";
require_once __DIR__ . '/../inc/footer.php';
exit;
}
// Titre de page avec le login
echo '<h2>Post de ' . e($user['login']) . '</h2>';
// Récupère les articles de cet auteur (du plus récent au plus ancien)
$stmt = $pdo->prepare("
SELECT id, titre, contenu, date_creation
FROM articles
WHERE user_id = :uid
ORDER BY date_creation DESC
");
$stmt->execute(['uid'=>$user['id']]);
// affichage des articles (extrait + lien "Lire la suite")
foreach ($stmt as $a) {
echo '<article class="card">';
echo '<h2><a href="/public/article.php?id='.(int)$a['id'].'">'.e($a['titre']).'</a></h2>';
echo '<p class="muted">'.e(date('d/m/Y H:i', strtotime($a['date_creation']))).'</p>';
echo '<p>'.e(excerpt($a['contenu'])).'</p>';
echo '<p><a class="btn" href="/public/article.php?id='.(int)$a['id'].'">Lire la suite</a></p>';
echo '</article>';
}
// Footer
require_once __DIR__ . '/../inc/footer.php';

View File

@@ -0,0 +1,43 @@
<?php
// Charge la config, la connexion BDD et le header
require_once __DIR__ . '/../inc/config.php';
require_once __DIR__ . '/../inc/db.php';
require_once __DIR__ . '/../inc/header.php';
// Récupère les 10 derniers articles avec leur auteur (avec jointure)
$stmt = $pdo->query("
SELECT a.id, a.titre, a.contenu, a.date_creation, u.login AS auteur
FROM articles a
LEFT JOIN utilisateur u ON u.id = a.user_id
ORDER BY a.date_creation DESC
LIMIT 10
");
$articles = $stmt->fetchAll(); // Tableau d'articles pour l'affichage
?>
<h2>Derniers posts</h2>
<?php if (!$articles): ?>
<!-- Message si aucun article n'est disponible -->
<p>Aucun article pour l'instant.</p>
<?php endif; ?>
<?php foreach ($articles as $a): ?>
<article class="card">
<!-- Titre + lien vers la page de l'article -->
<h2><a href="/public/article.php?id=<?= (int)$a['id'] ?>"><?= e($a['titre']) ?></a></h2>
<!-- Métadonnées : auteur + date formatée -->
<p class="muted">
Par <a href="/public/author.php?login=<?= urlencode($a['auteur'] ?? 'inconnu') ?>"><?= e($a['auteur'] ?? 'Anonyme') ?></a>
— <?= e(date('d/m/Y H:i', strtotime($a['date_creation']))) ?>
</p>
<!-- Extrait -->
<p><?= e(excerpt($a['contenu'], 150)) ?></p>
<!-- Lien pour lire l'article complet -->
<p><a class="btn" href="/public/article.php?id=<?= (int)$a['id'] ?>">Lire la suite</a></p>
</article>
<?php endforeach; ?>
<?php require_once __DIR__ . '/../inc/footer.php'; ?>

View File

@@ -0,0 +1,5 @@
<div class="card error">
<h2>Erreur 404</h2>
<p>La page demandée est introuvable.</p>
<p><a href="/public/index.php">Revenir à l'accueil</a></p>
</div>