Tutoriel #4 Espace membre - Les articles

El Dios

Membre Premium
Premium
Inscription
21 Octobre 2013
Messages
1 663
Points
6 921
    Réponse de El Dios Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #1
Vous devez être inscrit pour voir les images


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.
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !
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

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

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!

Vous devez être inscrit pour voir les images


(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

Vous devez être inscrit pour voir les images


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

Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

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['']; ?>
Connectez-vous ou inscrivez-vous dès maintenant. pour voir le contenu de ce spoiler !

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'

Ancien staff
Ancien staff
Inscription
22 Octobre 2011
Messages
14 075
Points
16 005
    Réponse de WhiiTe' Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #2
Ton indentation :puke: Centre pas le code ça fait moche :puke: Sinon good ça aidera les débutants :p
 

El Dios

Membre Premium
Premium
Inscription
21 Octobre 2013
Messages
1 663
Points
6 921
    Réponse de El Dios Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #3

Ruby.

Undefined
Inscription
25 Avril 2012
Messages
518
Points
7 536
    Réponse de Ruby. Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #4
Super tuto, ça aidera plus d'un surtout les débutants

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

El Dios

Membre Premium
Premium
Inscription
21 Octobre 2013
Messages
1 663
Points
6 921
    Réponse de El Dios Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #5
Super tuto, ça aidera plus d'un surtout les débutants

dit je voulais savoir tu l'as trouvé où ton thème?
Merci :D
Il est disponible sur ThemeForest dans les Admin Templates sous le nom de Beagle :p
 

Sm0keFrenchWeed

</> Développeur Web </>
Premium
Inscription
14 Janvier 2016
Messages
416
Points
2 786
    Réponse de Sm0keFrenchWeed Forums généraux Informatique ⌨️ Programmation Programmation web : #4 Espace membre - Les articles
  • #7
Script fail, préparation de certaine requête, ni de sécurisation des post.
 



Retrouvez RealityGaming sur mobile

L'application mobile évolue depuis plusieurs semaines pour correspondre à vos besoins.
Retrouvez dès à présent les dernières versions sur iOS et Android.

Pour les reports de bug ou suggestions, c'est ici.

Membres du mois

Récompense de 70€ au membre qui a produit les meilleurs topics chaque mois (meilleur ratio résultats sur google + vues + réponses + likes sur une ou plusieurs de ses discussions). Plus d'infos.

RealityGaming sur YouTube !

Mobile app for XenForo 2 by Appify
Haut