
Partie 1 -> Clique ici [Premium]
Partie 2 -> Clique ici [Premium]
Partie 3 -> Clique ici [Premium]
Bonjour, bonsoir,
On se retrouve aujourd'hui pour l'épisode 4 de ma série, les articles.
Avant toute chose, je tiens à préciser que j'ai refais le design, mais le PHP ne change évidemment pas
Il est temps de commencer ce tutoriel.
Nous allons devoir utiliser trois page en .php
Premièrement nous allons afficher les cinq derniers articles sur l'index.php,
Deuxièmement nous créerons le fichier list_news.php pour afficher tous les articles
Et troisièmement news.php qui servira à l'affiche complète d'un article qui sera sous la forme news?id=
Nous allons commencer par l'index.php, pour ma part je vais utiliser un UI Element Tabs pour afficher les articles.

Et la deuxième, affichera le dernier article complet.
Nous allons devoir exécuter une requête SQL grâce à PDO::query (query). Nous sélectionnerons toutes les colonnes dans la table articles qui seront ordonnée par id que nous limiterons évidemment à 5.
Ensuite nous feront une boucle while.
Nous commençons par exécuter notre requête SQL avec query.
PHP:
<?php
$req = $bdd->query('');
?>
$req signifie requête, mais vous pouvez l'appeler autrement, il faudra juste modifier $req par ce que vous avez mis dans la boucle while.
$bdd sert à nous connecter à notre base de données.
Question: Il se connecte tout seul ? Sans qu'on lui donne les accès de notre base de données ?
Réponse: Mais non, nous avons déclaré notre fichier configuration.php qui, dans celui-ci à la connectivité.
Maintenant, nous allons sélectionner, ordonnée et limiter le tout.
PHP:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 5');
?>
SELECT * permet de sélectionner toutes les colonnes.
FROM articles, comme celui-ci veut dire en anglais à partir de articles.
ORDER BY id signifie que la table articles sera ordonnée par id.
DESC LIMIT 5 permet de limiter le nombre d'article à 5 mais comparer à LIMIT il prendra les derniers articles et non les 5 premiers.
Maintenant on passe à la boucle while
PHP:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 5');
while()
{
?>
Maintenant nous allons dire que $article = $req->fetch()
En gros, on veut que ce qui est égale à $req soit compresser dans $article et qu'il récupère les données avec PDOStatement::fetch (fetch)
Donc sa nous donne
PHP:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 5');
while($article = $req->fetch())
{
?>
Une fois cela de fait, on va créer la table SQL articles avec comme colonne id en int 11 en auto increment avec une clé (key), titre en varchar 255, contenu en text, auteur en varchar 25 puis date_p en date

Une fois ça de fait, on peut continuer la partie PHP
Nous allons afficher le titre et le contenu par
PHP:
<?php echo $article['titre']; // affiche le titre ?>
<?php echo $article['contenu']; // affiche le contenu ?>
Nous allons maintenant fermer la boucle avec
PHP:
<?php } ?>
Ce qui donne
PHP:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 5');
while($article = $req->fetch())
{
?>
<h4><?php echo $article['titre']; ?></h4>
<p><?php echo $article['contenu']; ?> ?></p>
<hr>
<?php } ?>
Maintenant, nous allons limiter le contenu à afficher et bloquer les BBCodes (Merci à @Walky SEC pour le blocage des BBCodes
En dessous de la boucle while, nous allons dire que $contenu_b = $article['contenu']; pour nous facilité la tâche.
Ce qui donne
PHP:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 5');
while($article = $req->fetch())
{
$contenu_b = $article['contenu'];
?>
Maintenant il est temps de limiter le contenu!

(Désolé de faire avec un screen, la function substr est bloqué sur le forum par Cloudflare
Notre contenu est maintenant réduit à 500 caractères.
Ce qui donne

Donc maintenant pour afficher notre $article['contenu']; nous allons utiliser $contenu_reduit;
Nous allons faire la même chose pour la catégorie Dernier article mais nous enlèverons le code qui permet de limiter le contenu et afficher simplement le dernier article.
Code:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC LIMIT 1');
while($article = $req->fetch())
{
?>
<h4 align="center"><?php echo $article['titre']; ?></h4>
<hr>
<p><?php echo $article['contenu']; ?></p>
<?php } ?>

Nous avons fini cette partie.
Maintenant nous allons faire la page list_news.php, elle est identique à celle du dessus à part le design et que nous ne limiterons rien.
Donc, à la place de mettre DESC LIMIT 5, nous allons mettre simplement DESC.
Ce qui donne
Code:
<?php
$req = $bdd->query('SELECT * FROM articles ORDER BY id DESC');
while($article = $req->fetch())
{
?>
<li class="latest">
<div class="user-timeline-date"><a href="news?id=<?php echo $article['id']; ?>">Accéder à l'article</a></div>
<div class="user-timeline-title">#<?php echo $article['id']; ?> - <?php echo $article['titre']; ?></div>
<div class="user-timeline-description">Par <?php echo $article['auteur']; ?> le <?php echo $article['date_p']; ?></div>
</li>
<?php } ?>
Nous avons fini la page list_news.php, oui c'était rapide
Aller, attaquons la dernière page! Un peu de
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
et c'est partie 
Nous allons appeler les données des articles avec la colonne id. (?id=)
Nous allons alors mettre
PHP:
if(isset($_GET['id']) AND !empty($_GET['id'])) {
$get_id = htmlspecialchars($_GET['id']);
Je ne précise plus qu'il faut évidemment nos require_once, session_start() etc ...
Ensuite nous allons préparer notre requête puis l'exécuter.
PHP:
$article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
$article->execute(array($get_id));
Nous allons maintenant retourner le nombre de ligne affectées par le dernier appel à la fonction execute() puis récupérer la ligne de l'id sélectionné.
PHP:
if($article->rowCount() == 1) {
$article = $article->fetch();
$titre = $article['titre'];
$contenu = $article['contenu'];
$date_i = $article['date_p'];
$auteur = $article['auteur'];
}
Maintenant nous allons afficher les erreurs possible.
PHP:
else {
die('Cet article n\'existe pas !'); // Si l'id entrée n'existe pas
}
} else {
header("Location: list_news.php");
exit(); // Si vous vous diriger sur news.php directement, vous pouvez évidemment mettre ce que vous voulez, mais je préfère faire une redirection.
}
Si vous avez tout bien suivis, vous devriez avoir ceci
PHP:
<?php
session_start();
if(isset($_SESSION['id']))
{
}else
{
header('Location: login');
exit();
}
require_once('includes/configuration.php');
require_once('includes/fonctions/configuration.fonction.php');
if(isset($_GET['id']) AND !empty($_GET['id'])) {
$get_id = htmlspecialchars($_GET['id']);
$article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
$article->execute(array($get_id));
if($article->rowCount() == 1) {
$article = $article->fetch();
$titre = $article['titre'];
$contenu = $article['contenu'];
$date_i = $article['date_p'];
$auteur = $article['auteur'];
} else {
die('Cet article n\'existe pas !'); // Si l'id entrée n'existe pas
}
} else {
header("Location: list_news.php");
exit(); // Si vous vous diriger sur news.php directement, vous pouvez évidemment mettre ce que vous voulez, mais je préfère faire une redirection.
}
?>
La partie PHP est terminé, maintenant nous allons afficher les données avec
PHP:
<?= $article['']; ?>

Et voilà c'est déjà fini
Comme d'habitude, si vous voulez des précisions, n'hésitez pas
Je vous m'ai dès à présent un site comportant les dernières modification apporté au tutoriel, donc il est actuellement au stade du tutoriel numéro 4
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Télécharger le projet:
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Dernière édition: