Probléme création de page PHP

Bonjour,
J'ai débuter il y a quelques semaines dans le monde du PHP, et plus précisément dans les Base de Données, j'arrive à bien m'en sortir jusque là, mais depuis peu je me heurte à un probléme.

En faite je fais un mini site, et je voudrais intégrer une base de données (pour le moment pas de soucis), en page d'accueil, les news (un résumé) et en faite je voudrais connaître une solution pour que ma base de données génère automatiquement des pages dynamiques pour que les visiteurs puissent cliquer sur les news et tombé sur une autre page avec la news entière.

Je vous remercie par avance de l'intérêt que vous portez à mon message d'aide.

Cordialement
Dexter
Configuration: Mac OS X
Firefox 3.1

31 réponses

Résumé de la discussion

La génération de pages dynamiques à partir d'une base de données permet d'afficher des news avec résumé sur l'accueil et d'ouvrir l'article complet sur une page dédiée. Plusieurs contributions proposent de lier les titres et images à des pages via GET, puis d'interroger la base et d'afficher le contenu complet. Des méthodes courantes utilisent substr pour l'extrait sur l'accueil, puis SELECT * FROM news avec ORDER BY ID DESC et LIMIT, et une page telle que news.php?id=… pour l'article. En cas d'évolution, privilégier une architecture séparant l'administration et l'affichage et moderniser le code avec PDO et des requêtes préparées pour renforcer la sécurité et la maintenance.

Bobot (l’IA à votre service)
  1. Je reviendrai surmen vers vous car je vais m'attaquer à une petite partie administration et après carrément un FORUM, ce qui risque d'être un peu plus dure qu'un simple système de news ^^
    1. Bon après une bonne journée de recherche, qui ne m'ont pratiquement servis à rien j'ai décidé de testé par moi même :

      J'ai donc utilisé un include tout simple et mis les variables comme ceci :
      <?php echo $donnees['nom']; ?>

      Comme ça suivant la page qui s'affiche, le title se met automatiquement ainsi que les metas, je vous remercie pour l'aide que vous m'avez apporter !!!

      Cordialement Dexter
      1. En faite oui je veux récupérer des infos de BDD pour les mettres dans la meta de ma page de news.
        1. non c'est pas une erreur de frappe, c'est le code dans le cas ou tu récupères un formulaire dont un champ a pour name "n".
          mais dans ton cas c'est différent tu veux récupérer ce qui sort de ta base sql c'est ça? Et éventuellement le transformer en variable de session?
          1. session_start();
            $_SESSION['nom'] = $_GET['n'];

            le ['n'] représente quoi une erreur de frappe ou je dois mettre autre chose que le n ?
            1. oui petite confusion dsl.
              pour être plus explicite Dexter, arrêtez moi si je me trompe, tu définis la variable de session comme ceci côté admin
              session_start();
              $_SESSION['nom'] = $_GET['n'];
              // là tu reçois le nom défini depuis un formulaire par exemple
              si tu as des manips à faire sur le nom côté admin, tu stockes la variable de session dans une variable temporaire:
              $nom = $_SESSION['nom'];
              //ton code agissant sur $nom vient ici
              après ce code tu renvoies la variable changée $nom_mod par ex dans la variable de session:
              $_SESSION['nom'] = $nom_mod;

              comme ça tu as une variable $_SESSION['nom'] qui va se trimballer partout durant la session, mais si tu veux la conserver au dela de la session, il faut l'écrire sur un disque, en sql par exemple
              1. Et donc pour la meta qui est dans la page news.php?['id'] j'ai ça :
                <META NAME="Desciption" CONTENT="<?php echo $nom; ?>">
                1. Ok je pense mettre planté quelque part :

                  Partie Admin (le code n'est pas complet c'est pour faire simple) :
                  <?php
                  mysql_connect("localhost", "root", "");
                  mysql_select_db("test");

                  mysql_query("INSERT INTO news VALUES('', '$nom')");

                  // On se déconnecte de MySQL
                  mysql_close();
                  }
                  }
                  ?>


                  Page news.php?['id'] :
                  <?php
                  mysql_connect("localhost", "root", "");
                  mysql_select_db("test");

                  $reponse = mysql_query("SELECT * FROM news ORDER BY ID DESC LIMIT 0,1");

                  mysql_close();

                  while ($donnees = mysql_fetch_array($reponse) )
                  {
                  ?>

                  <?php
                  {
                  echo '<a href="news.php?page=' . $donnees['id'] . '">' . $donnees['nom'] . '</a> ';
                  }

                  ?>


                  Et donc pour la meta j'ai ça :
                  <META NAME="Desciption" CONTENT="<?php echo $nom; ?>">
                  1. Judes ta solution m'intéresse bien mais j'aurais deux petites questions :

                    Cette partie du code je le place dans la partie admin ?
                    session_start();
                    $_SESSION['nom'] = $_GET['n'];
                    $nom = $_SESSION['nom'];

                    Et cette partie sur la page du visiteurs ?
                    session_start();
                    $_SESSION['nom'] = $nom;

                    A quel endroit dois-je placer ces 2 codes ? N'importe ou dans le code ou à un endroit bien précis ?

                    Je sais pas si pour vous ça marche mais de mon coté pas du tout.

                    Merci du temps que vous m'accordez ^^
                    1. si la créée page doit retenir une variable depuis une autre page, tu peux retenir ça avec une variable de session dans l'autre page
                      session_start();
                      $_SESSION['nom'] = $_GET['n'];
                      $nom = $_SESSION['nom'];
                      

                      et tu n'auras qu'à rappeler la variable en début de page comme ça:
                      session_start();
                      $_SESSION['nom'] = $nom;
                      
                      1. Contributeur
                        je dirai meme plus, il rapellera la variable en faisant
                        session_start();
                        $nom = $_SESSION['nom'] ;

                        et il stock en faisant
                        $_SESSION['nom'] =$nom 
                        je croi qu'il y a eu une petite confusion ... ;)
                    2. ben c'est qu'il y a un problème dans la déf de la variable
                      1. Oui la variable est bien remplis.

                        J'ai essayé le code que tu m'as passé Judes-Emiles mais malheureusement ça ne marche pas chez moi ...
                        1. Contributeur
                          c'est à peu près là même chose

                          vérifie que ta variable $nom est bien remplit
                          1. Contributeur
                            en effet.. je préfère meme plutot la solution qui consitait a ouvrir les balises php juste la ou il avait besoin de code dynamique... c'est plus facile a lire
                        2. pour faire ça tu dois faire

                          <?php
                          echo "<META NAME=\"Description\" CONTENT=\"".$nom."\">";
                          ?>
                          
                          1. Bonjour tout le monde,
                            je reviens vers vous pour vous dire que tout marche à la perfection !

                            Un grand merci à vous tous.

                            Pour expliquer ma façon de faire je me suis servis de tuto sur le siteduzero (chat et livre d'or) et des conseils que vous m'avez données.

                            J'aurai une dernière question, après avoir fini la base de donnée, la partie admin etc... je voulais m'attaque au Meta (normalement je les codés en HTML tout simple mais le faire depuis la BDD c'est mieux et plus rapide).

                            Comment puis-je faire pour intégrer du php dans les meta ?

                            J'ai fait des recherches ( car google est mon amis et même notre amis ) mais je n'ai pas trouver de résultat sur ce sujet bien précis.

                            J'ai essayer comme ça (mais ça ne s'affiche pas) :

                            <META NAME="Desciption" CONTENT="<?php echo $nom; ?>">

                            Je vous remerci encore de l'aide que vous m'avez et que vous m'apporterez pour cette question.
                            1. Contributeur
                              :( j'avais envoyé un super truc pour toi, mais le site buggait, et ca a pas été sauvegardé

                              bon, alors je vais faire rapide:
                              table "news" dans mysql
                              ID (int)
                              date (timestamp)
                              resume (texte)
                              article (texte) ici tu mets soit du texte brut, soit du HTML contenant le texte, suivant si tu veux qu'il contienne deja la mise en page (html) ou pas....

                              dans ton index.php, tu vas chercher les résumés avec cette requete qui va prendre les 5 dernieres news ajoutées
                              select id, date, resume from news order by date desc limit 5

                              tu fait un $object=mysql_fetch_object....

                              ensuite, pour chaque objet récupéré:
                              echo '<a href="news.php?newsID=$object->ID">$resume</a><br />';

                              dans ta page news.php tu fais

                              select article from news where ID=$_GET['newsID'];

                              tu fais le $object=mysql_tech_object, puis
                              echo $object->article;

                              voila, j'espère que tu aura compris le principe.. j'ai mis que des bouts de code, histoire de montrer la voie a suivre

                              edit: ha ben finalement le site recommence a fonctionner tout doucement .... mon message d'avant est finalement apparu
                              1. Contributeur
                                tu fais une table "news" dans la base
                                tu mets comme champs:
                                ID (int)
                                news_time (timestamp)
                                resume (texte)
                                corps (texte)

                                avec l'id tu fais la clef primaire
                                le timestamp c'est pour date les news
                                resume: le résumé de la news
                                corps: le contenu de la news... tu peux mettre soit du texte, soit carément du code HTML (si tu veux y integrer la mise en forme). Le plus simple dans un premier temps étant de faire texte seul

                                dans la page ou tu afiche les résumés, tu te connecte a la bdd, et tu fais une requete du genre

                                select id, resume, news_time from news order by news_time desc limit 5; --ca prendra les 5 dernieres news

                                dans ton code php, tu fais un mysql_fetch_object (ou utilise la méthode que t'as l'habitude d'utiliser)
                                et pour chaque ligne retournée de la BDD, tu fais:
                                echo '<a href="news.php?newsID=$object->id">$resume</a><br />;';

                                ensuite, tu fais une page news.php, avec un parametre que tu passes dans l'url (en GET: le numéro ID de la news, par exemple: news.php?newsID=105 -> ca chargera la news n° 105)
                                ca donne
                                "select * from news where ID=".$_GET['newsID'];

                                et ensuite, tu récupères les valeurs, et tu les affiche....

                                voila! j'espère que t'as tout bien compris.
                                1. Pour cela tu dois utiliser fopen et fwrite de PHP à la fois pour tes fichiers à afficher, mais aussi pour les liens vers ces fichiers.
                                  1. Ben en tout cas je voudrais dire une chose merci beaucoup, j'ai réussi tout ce que je voulais faire avec le conseil de chaqu'un de vous. Maintenant il me reste plus qu'a perfectionné tout ça !!!
                                    • 1
                                    • 2