[PHP/MYSQL] Une news par page

WRInaute impliqué
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 ?
 
WRInaute impliqué
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']) );

@+
 
WRInaute impliqué
@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();
 
WRInaute impliqué
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:

@+
 
WRInaute impliqué
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
 
WRInaute impliqué
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é...
 
WRInaute impliqué
@FloBaoti, comment protéger le champ ? Je suis assez novice dans ce domaine donc ça m'est encore inconnu;
 
WRInaute impliqué
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 ...
 
WRInaute accro
$newsId = $_GET['newsId'];

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.
 
WRInaute impliqué
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;
 
WRInaute impliqué
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 ?
 
WRInaute accro
darkjukka a dit:
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 ?

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.
 
Discussions similaires
Haut