ajout projet cms elyes
This commit is contained in:
54
cms_simplifie/public/article.php
Normal file
54
cms_simplifie/public/article.php
Normal 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">← Retour à l'accueil</a></p>
|
||||
|
||||
<?php
|
||||
// Footer commun (scripts, fermeture des balises)
|
||||
require_once __DIR__ . '/../inc/footer.php';
|
||||
?>
|
||||
50
cms_simplifie/public/author.php
Normal file
50
cms_simplifie/public/author.php
Normal 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';
|
||||
43
cms_simplifie/public/index.php
Normal file
43
cms_simplifie/public/index.php
Normal 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'; ?>
|
||||
5
cms_simplifie/public/page404.php
Normal file
5
cms_simplifie/public/page404.php
Normal 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>
|
||||
Reference in New Issue
Block a user