[PHP/MYSQL] Une news par page

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par darkjukka, 20 Mars 2008.

  1. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Voila,

    J'affiche actuellement les news de mon site les unes après les autres, simplement par le code que voici

    Code:
        $db_link = @mysql_connect($host,$login,$pass);
        mysql_select_db($base);
        
        $sql = 'SELECT * FROM news ORDER BY newsId DESC LIMIT 10';
        
        function cleanText($intext) {
            return utf8_encode($intext);
        }
        
        $rc = mysql_query($sql);
        
        while($data = mysql_fetch_array($rc)) {
           $data['news'] =  str_replace("\n","<br />", $data['news']);
        
            echo "<h2>";
            echo date ( 'd/m/Y' , $data['time'] );
            echo " - ";
            print '<a name="news'.$data['newsId'].'" id="news'.$data['newsId'].'" class="signets">';
            echo ( cleanText($data['titre']) );
            echo "</a>";
            echo "</h2>";
        
           print ''.cleanText($data['news']).'';
           if (strlen($data['url_forum']) > 0) {
           print '<div class="forum-news">(<a href="'.$data['url_forum'].'" title="'.cleanText($data['titre']).'">On en parle sur le forum</a>)</div>';
           }
           echo "<br /><br /><br />";
          
        }
        mysql_close();
    
    Je voudrais légèrement changer cela et afficher une news par page, via l'ID.
    Je voudrais donc continuer d'avoir toujours la page index.php avec toute les news et lorsque par exemple je clique sur le titre de la news 10, avoir une page de type index.php?news=10 avec juste la news numéro 10 de la base de données (et cela serait valable pour toutes).

    J'ai cherché un peu sur google mais je n'ai rien trouvé :? Quelqu'un peut-il m'aider ?
     
  2. SuperCureuil
    SuperCureuil WRInaute impliqué
    Inscrit:
    9 Mars 2007
    Messages:
    567
    J'aime reçus:
    0
    Hello,

    Sur la page où tu veux afficher une seule news, tu changes :

    Code:
    $sql = 'SELECT * FROM news ORDER BY newsId DESC LIMIT 10';
    Par :

    Code:
    sql = 'SELECT * FROM news WHERE newsId = '$newsId''; 
    Et donc pas besoin de boucler puisque tu n'affiches les colonnes que d'une ligne ...

    Sur la page index, tu ajoutes l'id à ton lien :

    Code:
    print '<a href="news?newsId='.$data['newsId'].' name="news'.$data['newsId'].'" id="news'.$data['newsId'].'" class="signets">';
            echo ( cleanText($data['titre']) ); 
    @+
     
  3. audit.referencement
    audit.referencement WRInaute discret
    Inscrit:
    16 Février 2008
    Messages:
    102
    J'aime reçus:
    0
    Je ne comprend pas bien ton problème ? Il ne suffit pas de faire la même requête avec une clause where ?
     
  4. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    @SuperCureuil,

    J'ai créé la page -http://www.blind-guardian.fr/html/news.php?newsId=10 et j'essaye donc ce que tu m'a dis pour afficher une news mais cela ne me donne rien, la page reste vide alors que l'ID de la news existe bien.

    Code:
    
        $db_link = @mysql_connect($host,$login,$pass);
        mysql_select_db($base);
       
        $sql = 'SELECT * FROM news WHERE newsId = $newsId';
       
        function cleanText($intext) {
            return utf8_encode($intext);
        }
       
        $rc = mysql_query($sql);
       
        while($data = mysql_fetch_array($rc)) {
           $data['news'] =  str_replace("\n","<br />", $data['news']);
       
            echo "<h2>";
            echo date ( 'd/m/Y' , $data['time'] );
            echo " - ";
            print '<a name="news'.$data['newsId'].'" id="news'.$data['newsId'].'" class="signets">';
            echo ( cleanText($data['titre']) );
            echo "</a>";
            echo "</h2>";
       
           print ''.cleanText($data['news']).'';
           if (strlen($data['url_forum']) > 0) {
           print '<div class="forum-news">(<a href="'.$data['url_forum'].'" title="'.cleanText($data['titre']).'">On en parle sur le forum</a>)</div>';
           }
           echo "<br /><br /><br />";
         
        }
        mysql_close();
    
     
  5. SuperCureuil
    SuperCureuil WRInaute impliqué
    Inscrit:
    9 Mars 2007
    Messages:
    567
    J'aime reçus:
    0
    Ne fais pas de boucle pour ton affichage, ça ne sert à rien :wink:

    Remplace :

    Code:
        $db_link = @mysql_connect($host,$login,$pass);
        mysql_select_db($base);
       
        $sql = 'SELECT * FROM news WHERE newsId = '$newsId';
       
        function cleanText($intext) {
            return utf8_encode($intext);
        }
       
        $rc = mysql_query($sql); 
    
    while ($data = mysql_fetch_array($rc)) {
           $data['news'] =  str_replace("\n","<br />", $data['news']);
       
            echo "<h2>";
            echo date ( 'd/m/Y' , $data['time'] );
            echo " - ";
            print '<a name="news'.$data['newsId'].'" id="news'.$data['newsId'].'" class="signets">';
            echo ( cleanText($data['titre']) );
            echo "</a>";
            echo "</h2>";
       
           print ''.cleanText($data['news']).'';
           if (strlen($data['url_forum']) > 0) {
           print '<div class="forum-news">(<a href="'.$data['url_forum'].'" title="'.cleanText($data['titre']).'">On en parle sur le forum</a>)</div>';
           }
           echo "<br /><br /><br />";
         
        }
    Par :
    Code:
         $db_link = @mysql_connect($host,$login,$pass);
        mysql_select_db($base);
       
        $newsId = $_GET['newsId'];
    
        $sql = 'SELECT * FROM news WHERE newsId = '$newsId';
       
        function cleanText($intext) {
            return utf8_encode($intext);
        }
       
        $rc = mysql_query($sql); 
            $data = mysql_fetch_assoc($rc) 
           $data['news'] =  str_replace("\n","<br />", $data['news']);
       
            echo "<h2>";
            echo date ( 'd/m/Y' , $data['time'] );
            echo " - ";
            print '<a name="news'.$data['newsId'].'" id="news'.$data['newsId'].'" class="signets">';
            echo ( cleanText($data['titre']) );
            echo "</a>";
            echo "</h2>";
       
           print ''.cleanText($data['news']).'';
           if (strlen($data['url_forum']) > 0) {
           print '<div class="forum-news">(<a href="'.$data['url_forum'].'" title="'.cleanText($data['titre']).'">On en parle sur le forum</a>)</div>';
           }
           echo "<br /><br /><br />";
         
    Et n'oublie pas d'envoyer l'id de la news dans l'url sinon ça n'ira pas :wink:

    @+
     
  6. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    J'obtiens une page blanche :?
    Oui oui, j'y ai pensé à l'ID, l'url de test serait bonne d'ailleur car une news correspond bien à cet ID
     
  7. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Sauf que là:
    $sql = 'SELECT * FROM news WHERE newsId = '$newsId';

    PHP plante...

    Et protégez les champs bon sang, après faut pas venir pleurer que votre site est hacké...
     
  8. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    @FloBaoti, comment protéger le champ ? Je suis assez novice dans ce domaine donc ça m'est encore inconnu;
     
  9. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Si le type attendu de ta variable est entier:
    Code:
    $newsId = intval($_GET['newsId']);
    Si c'est une chaine de caractère, mysql_real_escape_string() par exemple.
     
  10. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Si par entier tu entend chiffre oui c'est cela, merci ;)

    Bon, je ne trouve toujours pas pourquoi ma page plante dans tout les cas ...
     
  11. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 003
    J'aime reçus:
    128
    Ca aussi c'est mal. Il est de bon tonde tester les variables récupérées, qu'elles soient postées ou en querystring.

    Là il y a deux solution : soit tu estimes que la personne qui arrive sur ta page sans avoir de newsId dans son url le fait malicieusement, auquel cas tu rediriges cette personne (sur la page d'accueil par exemple), soit dans le cas où tu ne trouves rien (ou une valeur incorrecte) tu fait une requête pour récupérer le dernier newsId disponible dans la base de donnée.
     
  12. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Un entier, c'est un entier oui... :lol: Je te conseille vivement de voir ou revoir les bases en mathématiques et programmation avant de te lancer dans du code.

    Et y'a toujours une erreur de syntaxe PHP.

    Donc pour résumer:

    Code:
    $newsId = (isset($_GET['newsId'])) ? intval($_GET['newsId']) : 0;
    
    $sql = 'SELECT * FROM news WHERE newsId = ' . $newsId; 
     
  13. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
    Mes bases de maths sont pas trop mauvaises merci, mais je voulais être sur qu'on parle bien de la même chose ;)

    Bon j'ai trouvé la faute, il me manquait un ";" à la fin de
    Code:
    $data = mysql_fetch_assoc($rc)
    cela marche donc :)

    @UsagiYojimbo, comment le renvoyer vers la dernière newsId dans ce cas ?
     
  14. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    12 003
    J'aime reçus:
    128
    Dans le cas ou tu détectes qu'aucun newsid n'est passé dans l'url, tu fais une requête SQL pour récupérer l'Id de la dernières news.

    Code:
    $sql = 'SELECT * FROM news ORDER BY newsId DESC LIMIT 0,1';
    
    et ainsi tu as le dernier newsid.
     
  15. darkjukka
    darkjukka WRInaute impliqué
    Inscrit:
    28 Avril 2007
    Messages:
    574
    J'aime reçus:
    0
Chargement...
Similar Threads - [PHP MYSQL] Forum Date
[PHP/MySQL] Choix du moteur MyISAM ou InnoDB ? Développement d'un site Web ou d'une appli mobile 14 Janvier 2017
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
[PHP/MYSQL] Les articles les plus commentés Développement d'un site Web ou d'une appli mobile 22 Octobre 2011
[PHP/MySQL] Excepter une valeur dans un requête SQL en PHP Développement d'un site Web ou d'une appli mobile 18 Septembre 2010
[PHP/MySQL] Compter le nombre de checkbox cochées Développement d'un site Web ou d'une appli mobile 11 Septembre 2010
[PHP/MySQL] Augmenter la valeur de 1 sur une entrée INT Développement d'un site Web ou d'une appli mobile 3 Septembre 2010
[PHP/MYSQL] Besoin d'aide pour la simplification d'une requete Développement d'un site Web ou d'une appli mobile 9 Juillet 2009
[PHP/MYSQL] Action selon le contenu de la variable Développement d'un site Web ou d'une appli mobile 27 Mai 2009
[PHP/MySQL] Problème dans le tri Développement d'un site Web ou d'une appli mobile 26 Août 2008
[PHP/MySQL] Optimisation multiples requêtes Développement d'un site Web ou d'une appli mobile 24 Juin 2008
[php / mysql] Une grosse table ou plusieurs petites tables ? Développement d'un site Web ou d'une appli mobile 8 Avril 2008
[PHP MYSQL] Affecter plusieurs enregistrements Développement d'un site Web ou d'une appli mobile 18 Décembre 2007
[php/MySQL] Tirage au sort avec pondération Développement d'un site Web ou d'une appli mobile 12 Décembre 2007
[résolu][php/MySQL] Problème d'appel à une base Développement d'un site Web ou d'une appli mobile 29 Août 2007
[PHP/MySQL] : se proteger des injections Développement d'un site Web ou d'une appli mobile 26 Avril 2007
[PHP/MySQL] Parser le résultat d'une BDD Développement d'un site Web ou d'une appli mobile 8 Juin 2006
[PHP-MySQL] : argument is not a valid MySQL ressource Développement d'un site Web ou d'une appli mobile 20 Février 2006
[phpMySQL] - Ecarter les colonnes vides Développement d'un site Web ou d'une appli mobile 8 Février 2006
[PHP MYSQL] Synchronisation des requêtes Administration d'un site Web 24 Juin 2005
[PHP/MYSQL] Besoin d'aide dans une requête Administration d'un site Web 17 Juin 2005