#4 Espace membre - Les articles

Iktus

Premium
Inscription
21 Octobre 2013
Messages
1 675
Réactions
374
Points
12 981
f83b8c253b2040ef98794d6a6448ddf3.png


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.
29cfb2cebddc4ebabb78972397d5fc60.png
Comme vous pouvez le constater, il y a deux "catégories", la première affichera les cinq derniers article mais avec un contenu limité à un nombre précis de caractères.
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

941ef7781ded4be2a3f380f578f9239c.png

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!

b657283f0430474aa4fb6a3716ec1e1e.png


(Désolé de faire avec un screen, la function substr est bloqué sur le forum par Cloudflare :d:)

Notre contenu est maintenant réduit à 500 caractères.
Ce qui donne

ba896bc31e0a4b959c9b23ddbed50d06.png


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 } ?>

45a6daa7545081c7ea11a598e1ded0d3.gif

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 :trollface:

Aller, attaquons la dernière page! Un peu de et c'est partie :DJ:
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['']; ?>
e699f9ca64934032883f31dc5c078c5d.png

Et voilà c'est déjà fini :D
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 :smile:


Télécharger le projet:
 
Dernière édition:

WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 704
Réactions
8 499
Points
32 425
Ton indentation :puke: Centre pas le code ça fait moche :puke: Sinon good ça aidera les débutants :p
 

Ruby.

Undefined
Inscription
25 Avril 2012
Messages
518
Réactions
118
Points
11 846
Super tuto, ça aidera plus d'un surtout les débutants

dit je voulais savoir tu l'as trouvé où ton thème?
 
Haut