8797 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous Smiley cligne

Ayant en projet un site personnel, ce dernier comportera des articles un peu comme les actualités ici sur alsacréations ou alors comme cet exemple.

Voulant évidemment partir directement dans la bonne direction et comme c'est encore un peu flou pour moi, je me permets de venir chercher des conseils auprès de vous.

Concrètement, lors de l'écriture d'un article, faut-il simplement écrire une page ?

Pour mieux me faire comprendre, voici un exemple du comment je vois la chose.

Supposons un site, xxxx.com, je vais par exemple écrire un article sur les alimentations à découpage, je vais donc créer une page HTML qui s’appellerait alimentations_a_decoupage.html ( ou PHP si nécessaire ).

Faut-il mettre l'article ( voir la page complète ) dans une base de données ou bien suffit-il d'écrire la page HTML un point c'est tout ?

Etant donné ( j'espère ) que le site s'étoffera, il faudra prévoir une barre de recherche sur la page d'accueil du site, j'imagine que pour cette fonctionnalité, il voudrait mieux mettre les articles dans une BDD ?

D'autres avantages m'échappent très certainement.

Je vous remercie en avance et vous souhaite une bonne soirée.

Cordialement

Marc...
Tu sais qu'un CMS comme Wordpress (ou d'autres) fait déjà tout ça (et ton problème d'URL aussi) ?
Modifié par jb_gfx (26 Dec 2011 - 20:30)
Salut Smiley cligne

Je ne le savais pas non ( pour les articles je m'en doute quand même un peu ), mais j'avoue que je préférais apprendre à coder directement plutôt que de passer par un CMS.

Histoire de savoir coder à la main plutôt que par un logiciel.

En tout cas dans un premier temps pour me familiariser avec les langages PHP et SQL.

Sauf on me dit que c'est mieux de passer par un logiciel de ce genre.
Eh bien je suis d'accord avec toi, mais j'ai très envie de mener à bien ce projet, il me tient vraiment à cœur.

Comme il s'agit d'un site personnel, je n'ai pas de date butoire pour le réaliser, je suis donc libre d'y aller à mon rythme.

Je pourrais très bien faire un site statique avec des pages en HTML ( non générées par du PHP ), mais je vois plus vers l'avant afin que le site reste "adaptable" par la suite aux futurs amélioration.

Je voudrais par contre ( par exemple ) que les articles puissent bénéficier des commentaires des visiteurs.

Je crois que dans un premier temps, je vais établir un cahier des charges et des attentes que j'ai de ce site internet.
Franchement part sur un Wordpress et pour l'apprentissage de PHP tu fais ça a coté avec des exercices plus simples.
Ok, je vais donc continuer à lire mon bouquin sur Wordpress Smiley cligne

Mais dis moi une chose, je sais que je le découvrirai par la suite, mais je suis très curieux, comment Worpress gère-t-il cette histoire d'URL ?

J'ai d'ailleurs rajouté une question sur le forum de Webrankinfo qui pourrait être intéressante...
Bonjour,

Moi aussi j'ai appris PHP en faisant un blog directement (j'avais déjà des bonnes bases en javascript). Si je peux t'aiguiller je te dirais de commencer par un exercice qui te familiariserais avec le principe du CRUD car ça répondra à pas mal de tes besoins au débuts. Il doit y avoir pas mal de tuto sur le net à ce sujet.

Ensuite je ne peux que te conseiller l'excellent site du zero si tu ne connais pas où il y a un cour plutôt bien foutu pour apprendre le PHP.

En espérant t'avoir fourni quelques pistes ^^
marc.suisse a écrit :

Mais dis moi une chose, je sais que je le découvrirai par la suite, mais je suis très curieux, comment Worpress gère-t-il cette histoire d'URL ?


Les URL sont paramétrables. Wordpress utilise un système de réécriture assez souple.

marc.suisse a écrit :

J'ai d'ailleurs rajouté une question sur le forum de Webrankinfo qui pourrait être intéressante...


Désolé mais WRI et moi on est pas potes, pour moi c'est au SEO, ce que Mac Do est à la gastronomie et c'est le dernier endroit ou j'irais poser des questions techniques. Smiley smile
Modifié par jb_gfx (26 Dec 2011 - 23:36)
Bonjour à toutes et tous Smiley cligne

Alors j'ai commencé à tatoner un peu et j'ai déjà écris plusieurs pages de mon blog.

Seulement voilà. certaines personnes me disent que je fonce vers un mur.

Puis-je vous proposer le code des 2 pages principales du site afin que vous me donniez vos avis ( sincères et qui font mal Smiley lol ) .

Afin que je sache si je dois perséverer ou si je dois vraiment me tourner vers wordpress.

Merci d'avance Smiley cligne

la première est la page blog.php qui affiche les 5 derniers articles, tandis que le deuxième est la page article.php qui affiche l'article désiré après avoir cliqué sur le lien de la page blog.php.

<?php
    session_start();
    ?>
    <!DOCTYPE html>
    <html lang="fr">
      <head>
       
        <title>La partie blog de Marc Schaefges</title>
        
        <meta charset="utf-8">
        <meta name="description" content="Articles divers sur différents domaines me passionnants, tel que l'informatique, l'électronique, les sites internet, la mécanique automobile, etc...">
        <meta name="keywords" content="Région Morgienne, Vaud, Suisse,informatique, électronique, mécanique automobile,">
        <meta name="author" content="Marc Schaefges">
        <meta name="geo.placename" content="Morges, Vaud, Suisse">
        <meta name="viewport" content="width=device-width"> 
        <link rel="stylesheet" media="all" href="screen.css">

       </head>
       
    <body>

    <!-- On déclare les nouveaux éléments html5 pour internet explorer --> 
        
    <!--[if lt IE 9]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>  
    <![endif]-->

        <header>
            <div class="gauche_header">
            
                <h1><a href="">Marc Schaefges</a></h1>
                <h2 class="titre">La partie blog....</h2>
                
            </div>
            
            <div class="droite_header">
            
            <nav class="menu_principal" role="navigation">

              <ul>
                <li><a href="index.php">Accueil</a></li>
                <li><a href="blog.php" class="actuel">Blog</a></li>
                <li><a href="contact.php">Contact</a></li>
              </ul>
              
            </nav>
                <img class="voiture" src="images/nissan.png" alt="image d'une voiture" />
            
            </div>
        </header>
        
    <div class="middle">
        
        <aside>
            <section class="haut">
                <h1 class="categories">Catégories</h1>

            <nav class="sous_menu" role="navigation">
              <ul>
                <li><a href="menu.php#mecanique">Mécanique auto</a></li>
                <li><a href="menu.php#informatique">Informatique</a></li>
                <li><a href="menu.php#electronique">Electronique</a></li>
                <li><a href="menu.php#divers">Divers</a></li>
              </ul>
            </nav>    
            
            </section>
                 
            <section class="milieu">
                <h2 class="articles_hasard">Articles au hasard</h2>
                 <nav class="menu_hasard" role="navigation">
                  <ul>
                  <?php
    try
    {
        
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options);
        $bdd->query("SET NAMES 'utf8', lc_time_names = 'fr_FR'"); // JEU DE CARACTERES UTILISE ET heure locale format Français
        
       $reponse = $bdd->query('SELECT id, titre FROM articles ORDER BY RAND() LIMIT 7');
            
                
                
        
       
        while ($donnees = $reponse->fetch())
        {
        ?>
           <li><a href="article.php?id=<?php echo $donnees['id'];?>"><?php echo $donnees['titre'];?></a></li>
        <?php
        }
        
        $reponse->closeCursor(); // Termine le traitement de la requête

    }
    catch(Exception $e)
    {
        // En cas d'erreur précédemment, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
    }


    ?>
                    </ul>
                 </nav>    
            </section>
            <section class="bas">
            <h1 id="newsletter">Abonnez-vous à ma newsletter</h1>
            <form action="newsletter.php?page=blog.php" method="post">
            <input class="mail_newsletter" type="text" name="mail_newsletter" id="mail_newsletter" value="Votre adresse mail" required title="Une adresse mail est requise!" />
            <button class="newsletter">Go !</button>
            </form>
            <?php
        if (isset($_SESSION['alerte']))
            {
            echo $_SESSION['alerte'];
            unset($_SESSION['alerte']);
            }  
      ?>
            </section>
            
        </aside>
        
        <section class="content">
         <h1 class="derniers_articles">Articles brûlants</h1>
    <?php
    try
    {
        
        
        
      $reponse = $bdd->query('SELECT COUNT(commentaires.id) as nb, DATE_FORMAT( articles.date_creation, \'%d/%m/%Y à %Hh%i\') AS date, articles.date_creation, articles.id, articles.titre, articles.article 
                            FROM articles
                            LEFT JOIN commentaires ON articles.id = commentaires.article
                            GROUP BY articles.date_creation, articles.id, articles.titre, articles.article
                            ORDER BY articles.id DESC limit 5'
                            );
                            
    while ($donnees = $reponse->fetch())
            {
            if ( $donnees['nb'] <= 1 )
            {
            $nombre_commentaire = 'commentaire';
            }
            else
            {
            $nombre_commentaire = 'commentaires';
            }
            ?>
            <article class="article">
                <h2 class="titre"><?php echo $donnees['titre'];?></h2>
                <h3 class="date_creation"><time datetime="<?php echo $donnees['date_creation']; ?>" pubdate="pubdate"><?php echo $donnees['date']; ?></time></h3><p><?php echo $donnees['nb'].' '.$nombre_commentaire; ?> </p>
                <?php $contenu = substr($donnees['article'], 0, 500); // Affichage des 500 premiers caractères d'un article et rajout de 3 points à la fin...
                $contenu .= " ...<br/>";?>
                <p><?php echo $contenu;?></p>
                <p><a href="article.php?id=<?php echo $donnees['id']; ?>">Découvrir la suite</a></p>
            </article>
            <hr>
            
        <?php
        }
        
        $reponse->closeCursor(); // Termine le traitement de la requête

    }
    catch(Exception $e)
    {
        // En cas d'erreur précédemment, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
    }

        ?>
               
        </section>
        
    </div>
     </body>


<!DOCTYPE html>
    <html lang="fr">
      <head>
       
        <title>La partie blog de Marc Schaefges, bienvenue !</title>
        
        <meta charset="utf-8">
        <meta name="description" content="Articles divers sur différents domaines me passionnants, tel que l'informatique, l'électronique, les sites internet, la mécanique automobile, etc...">
        <meta name="keywords" content="Région Morgienne, Vaud, Suisse,informatique, électronique, mécanique automobile,">
        <meta name="author" content="Marc Schaefges">
        <meta name="geo.placename" content="Morges, Vaud, Suisse">
        <meta name="viewport" content="width=device-width"> 
        <link rel="stylesheet" media="all" href="screen.css">

       </head>
       
    <body>

    <!-- On déclare les nouveaux éléments html5 pour internet explorer --> 
        
    <!--[if lt IE 9]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>  
    <![endif]-->

        <header>
            <div class="gauche_header">
            
                <h1><a href="blog.php">Marc Schaefges</a></h1>
                <h2 class="titre">La partie blog....</h2>
                
            </div>
            
            <div class="droite_header">
            
            <nav class="menu_principal" role="navigation">

              <ul>
                <li><a href="index.php">Accueil</a></li>
                <li><a href="blog.php">Blog</a></li>
                <li><a href="contact.php">Contact</a></li>
              </ul>
              
            </nav>
                <img class="voiture" src="images/nissan.png" alt="image d'une voiture" />
            
            </div>
        </header>
        
    <div class="middle">
        
        <aside>
            <section class="haut">
                <h1 class="categories">Catégories</h1>

            <nav class="sous_menu" role="navigation">
               <ul>
                <li><a href="menu.php#mecanique">Mécanique auto</a></li>
                <li><a href="menu.php#informatique">Informatique</a></li>
                <li><a href="menu.php#electronique">Electronique</a></li>
                <li><a href="menu.php#divers">Divers</a></li>
              </ul>
            </nav>    
            
            </section>
                 
            <section class="milieu">
                <h2 class="articles_hasard">Articles au hasard</h2>
                 <nav class="menu_hasard" role="navigation">
                  <ul>
                  <?php
                  session_start();
    try
    {
        
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options);
        $bdd->exec("SET NAMES utf8, lc_time_names = 'fr_FR'");// JEU DE CARACTERES UTILISE ET heure locale format Français
        
        
          $reponse = $bdd->query('SELECT id, titre FROM articles ORDER BY RAND() LIMIT 7');
        
       
        while ($donnees = $reponse->fetch())
        {
        ?>
           <li><a href="article.php?id=<?php echo $donnees['id'];?>"><?php echo $donnees['titre'];?></a></li>
        <?php 
         }     
        $reponse->closeCursor(); // Termine le traitement de la requête
            ?>
                </ul>
                 </nav>    
            </section>
            <section class="bas">
            <h1 id="newsletter">Abonnez-vous à ma newsletter</h1>
            <form action="newsletter.php?page=article.php?id=<?php echo $_GET['id'];?>" method="post">
            <input class="mail_newsletter" type="text" name="mail_newsletter" id="mail_newsletter" value="Votre adresse mail" required title="Une adresse mail est requise!" />
            <button class="newsletter">Envoyer !</button>
            </form>
            <?php
            if (isset($_SESSION['alerte']))
            {
            echo $_SESSION['alerte'];
            unset($_SESSION['alerte']);
            }  
            ?>
            </section>
        </aside>
        
        <section class="content">
        <?php 
         if (isset($_GET["id"]) && !empty($_GET['id']))
         {
         $reponse = $bdd->query('SELECT DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%i\') AS date_creation, titre, article FROM articles WHERE id=\'' . $_GET['id'] . '\'');
        
         while ($donnees = $reponse->fetch())
        {
        ?>
            <h1 class="derniers_articles"><?php echo $donnees['titre'];?></h1>

            <article class="article">
                <h3 class="date_creation"><?php echo $donnees['date_creation']; ?></h3>
                <?php echo $donnees['article']; ?>
                <hr>
                <p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/"><img alt="Licence Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" />
                </a><br /><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Dataset" property="dct:title" rel="dct:type">L'article, <strong><?php echo $donnees['titre'];?></strong></span> de 
                <a xmlns:cc="http://creativecommons.org/ns#" href="http://localhost/blog/blog.php" property="cc:attributionName" rel="cc:attributionURL">Marc Schaefges</a> est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/">
                licence Creative Commons Attribution - Pas d&#39;Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé</a>.<br />Les autorisations au-delà du champ de cette licence peuvent être obtenues sur la page suivante <a xmlns:cc="http://creativecommons.org/ns#" 
                href="contact.php" rel="cc:morePermissions">http://localhost/blog/contact.php</a>.</p>
            </article>
            
        <?php
         }
         }
         
        $reponse->closeCursor(); // Termine le traitement de la requête
        ?>
            <article class="commentaires">
            <h1 id="ancre">Vos commentaires...</h1>
            <?php
            
            if (isset($_SESSION['alerte']))
            {
            echo $_SESSION['alerte'];
            unset($_SESSION['alerte']);
            } 
            $reponse = $bdd->query('SELECT DATE_FORMAT(date_envoi, \'%d/%m/%Y à %Hh%i\') AS date_envoi, id, commentaire, site_internet, adresse_courriel, auteur FROM commentaires WHERE article=\'' . $_GET['id'] . '\'ORDER BY id DESC');
            $bdd->exec("SET NAMES utf8, lc_time_names = 'fr_FR'");// JEU DE CARACTERES UTILISE ET heure locale format Français
             while ($donnees = $reponse->fetch())
            {
            
            ?>
            <p class="poster"><?php echo $donnees['commentaire']; ?></p>
            <?php 
            
            
            $image = "http://2.gravatar.com/avatar/".md5($donnees['adresse_courriel'])."?s=80";
            echo '<img src="'.$image.'" alt="votre avatar"/>';
            
            
            ?>
            <p class="poste">Posté par <strong><?php echo $donnees['auteur'];?></strong>, le <?php echo $donnees['date_envoi']; ?><br/>
            Son site web : <a href="<?php echo $donnees['site_internet'];?>"><?php echo $donnees['site_internet'];?></a></p>
             <?php
            }
            $reponse->closeCursor(); // Termine le traitement de la requête
            ?>
            </article>
            
            <hr>
            
            <form id="comment" action="commentaires.php?id=<?php echo $_GET['id'];?>" method="post">
            <label for="pseudo">
             Votre pseudo:
            </label>
            <input type="text" name="pseudo" id="pseudo" required title="Un pseudo est requis!" />
            <label for="site_internet">
             Votre site internet:
            </label>
            <input type="text" name="site_internet" id="site_internet"/>
            <label for="adresse_courriel" title="gravatar permet l'affichage d'une image perso">
             Votre adresse mail:<br/>
             ( pour gravatar )
            </label>
            <input type="email" name="adresse_courriel" id="adresse_courriel"/>
            <label for="annee">
             En quelle année sommes-nous ?<br/>( protection anti-spams ):
            </label>
            <input type="text" name="annee" id="annee" required title="Veuillez svp rentrer l'année en cours!" />
            <label for="commentaire">
            Votre commentaire:
            </label>
            <textarea required title="Veuillez svp laisser un message!" name="commentaire" id="commentaire" rows="10" cols="50"></textarea>
            <button>Envoyer !</button>
            </form>
    </section>
        
    </div>
    <?php     
    }
    catch(Exception $e)
    {
        // En cas d'erreur précédemment, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
    }


        ?> 
    </body>
marc.suisse a écrit :

Puis-je vous proposer le code des 2 pages principales du site afin que vous me donniez vos avis ( sincères et qui font mal Smiley lol ) .


C'est la cata. Smiley lol

Ton code est linéaire, pas réutilisable. La gestion des erreurs est quasi inexistante, et le peu que tu as fais est mauvais. Il n'y a aucune séparation des différentes couches (données, code métier, affichage).

A mon avis il faut que tu te renseignes sur ces pratiques et que tu repartes de zéro.
Modifié par jb_gfx (12 Jul 2012 - 15:58)
Hello !

En vrac :

- Le code HTML "général" (header/menus, etc.) n'est pas centralisé dans un seul fichier.(galère pour la maintenance.) [Utilisation des include ; front controller]
- Des traitements PHP, du HTML dans le même fichier, tant que c'est simple ça reste gérable, mais vaut mieux dissocier ces deux langages. [cf MVC]
- L'affichage des erreurs: en développement, oui, mais jamais en production; tu donnes des infos qui n'intéressent pas l'utilisateur, mais qui peuvent se révéler précieuses pour un hacker. (ou au moins lui faciliter la vie Smiley langue )
- Pas de vérification sur les variables GET: attention aux injections SQL.
Salut, je vous remercie pour vos critiques Smiley cligne

jb_gfx =>

J'allais y venir justement à l'architecture MVC, j'en ai entendu parler, plus ou moins compris à quoi cela servait, mais sans plus.

J'imagine donc que je peux nettement améliorer mon code en utilisant cette manière de faire ?

jb_gfx a écrit :
Il n'y a aucune séparation des différentes couches (données, code métier, affichage).


Alors là, c'est quoi un code métier ??

S'agit-il des 3 différentes couches du modèle MVC ?

Tiens d'ailleurs il me semble avoir déniché un bon tuto : http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/

Tu dis aussi que le code est mauvais, cela veut dire que même si je sépare en modèle MVC, je ne peux pas réutiliser ce code ?

jb_gfx a écrit :
A mon avis il faut que tu te renseignes sur ces pratiques


Justement, c'est précisément ce que je suis en train de faire Smiley lol


Zed13 a écrit :
Le code HTML "général" (header/menus, etc.) n'est pas centralisé dans un seul fichier.(galère pour la maintenance.) [Utilisation des include ; front controller]


Alors les includes j'y ai pensé, mais je ne sais pas ce qu'est le front controller...

Zed13 a écrit :
L'affichage des erreurs: en développement, oui, mais jamais en production; tu donnes des infos qui n'intéressent pas l'utilisateur, mais qui peuvent se révéler précieuses pour un hacker. (ou au moins lui faciliter la vie langue )


Oui effectivement...

Zed13 a écrit :
Pas de vérification sur les variables GET: attention aux injections SQL.


Ceci par contre c'était prévus.

Merci à vous en tout cas Smiley cligne
Modifié par marc.suisse (12 Jul 2012 - 16:50)