Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: luffy78, SkinDePewDiePie_, ThomasLBA
Auteur Sujet: erreurs sur pour lister les topics partie 4 cours creation forum PHP

luffy78

Messages: 7

Bonjour,
je suis en train de suivre la partie 4 du cours sur la création d'un forum.
J'ai ces 3 erreurs qui s'affichent sur ma page forum_topic.view.php :
1)Notice: Undefined variable: topics in C:\wamp64\www\parties\views\forum_topic.view.php on line 8
2)Fatal error: Uncaught Error: Call to a member function fetch() on null in C:\wamp64\www\parties\views\forum_topic.view.php on line 8
3)Error: Call to a member function fetch() on null in C:\wamp64\www\parties\views\forum_topic.view.php on line 8

Ma page forum_topic.php :
  <?php
require('php/config.php'); /* Connexion à la bdd */
require('php/functions.php'); /* Mes fonctions */
$bdd = new PDO('mysql:host=127.0.0.1;dbname=forum', 'root', '');
if(isset($_GET['categorie']) AND !empty($_GET['categorie'])) {
   $get_categorie = htmlspecialchars($_GET['categorie']);
   $categories = array();
   $req_categories = $bdd->query('SELECT * FROM f_categories');
   while($c = $req_categories->fetch()) {
      array_push($categories, array($c['id'],url_custom_encode($c['nom'])));
   }
   foreach($categories as $cat) {
      if(in_array($get_categorie, $cat)) {
         $id_categorie = intval($cat[0]);
      }
   }
   if(@$id_categorie) {
      if(isset($_GET['souscategorie']) AND !empty($_GET['souscategorie'])) {
         $get_souscategorie = htmlspecialchars($_GET['souscategorie']);
         $souscategories = array();
         $req_souscategories = $bdd->prepare('SELECT * FROM f_souscategories WHERE id_categorie = ?');
         $req_souscategories->execute(array($id_categorie));
         while($c = $req_souscategories->fetch()) {
            array_push($souscategories, array($c['id'],url_custom_encode($c['nom'])));
         }
         foreach($souscategories as $cat) {
            if(in_array($get_souscategorie, $cat)) {
               $id_souscategorie = intval($cat[0]);
            }
         }
      }
      $req = "SELECT * FROM f_topics
            LEFT JOIN f_topics_categories ON f_topics.id = f_topics_categories.id_topic 
            LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id
            LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id
            LEFT JOIN membres ON f_topics.id_createur = membres.id
            WHERE f_categories.id = ?";
      if(@$id_souscategorie) {
         $req .= " AND f_souscategories.id = ?";
         $exec_array = array($id_categorie,$id_souscategorie);
      } else {
         $exec_array = array($id_categorie);
      }
      $req .= " ORDER BY f_topics.id DESC";
      
      $topics = $bdd->prepare($req);
      $topics->execute($exec_array);
   } else {
      die('Erreur: Catégorie introuvable...');
   }
} else {
   die('Erreur: Aucune catégorie sélectionnée...');
}
require('views/forum_topics.view.php');
?>

Ma page forum_topic.view :
<table class="forum">
   <tr class="header">
      <th class="main">Sujet</th>
      <th class="sub-info w10">Messages</th>
      <th class="sub-info w20">Dernier message</th>
      <th class="sub-info w20">Création</th>
   </tr>
   <?php while($t = $topics->fetch()) { ?>
   <tr>
      <td class="main">
         <h4><a href=""><?= $t['sujet'] ?></a></h4>
      </td>
      <td class="sub-info">4083495</td>
      <td class="sub-info">25.12.2015 à 18h07<br />de PrimFX</td>
      <td class="sub-info"><?= $t['date_heure_creation'] ?><br />par <?= $t['pseudo'] ?></td>
   </tr>
   <?php } ?>
</table>

Merci de votre aide
Bonne soirée !
Publicité

SkinDePewDiePie_

Messages: 78

Bonjour,
D'ou déja t'a une variable bdd dans "php/config.php" et dans ton fichier.
Je pense que ton problème viens de la.

Après j'peux pas t'aider plus, je laisse faire les experts.
Bonne chance pour ton forum 😀
-Matteo

luffy78

Messages: 7

Merci de ton aide mais ça ne vient pas de là. Les experts peuvent me dire ce qui ne va pas ?

ThomasLBA

Messages: 28

 Coucou,
Il n’y a pas un problème dans ta requête ?
<?php $req = "SELECT * FROM f_topics
            LEFT JOIN f_topics_categories ON f_topics.id = f_topics_categories.id_topic 
            LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id
            LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id
            LEFT JOIN membres ON f_topics.id_createur = membres.id
            WHERE f_categories.id = ?"; ?>

J’aurais plutôt fait :
<?php $req = "SELECT * FROM f_topics
            LEFT JOIN f_topics_categories ON f_topics_categories.id_topic = f_topics.id // C’est ici que j’ai modifié
            LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id
            LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id
            LEFT JOIN membres ON f_topics.id_createur = membres.id
            WHERE f_categories.id = ?"; ?>

Ah et rien à voir mais je te conseille de nommer tout en Anglais, je trouve qu’on s’y retrouve mieux au niveau des noms de variables, de tables, etc... (mais ce n’est que mon avis personnel) 😅
Après je n’ai pas très bien regardé donc il est fortement possible que je me trompe ...

En espérant avoir aidé ! Ciao ^^

luffy78

Messages: 7

Merci de ton aide ThomasLBA ! j'ai testé avec ta nouvelle requête mais ça ne fonctionne  toujours pas. Ca doit venir de la variable $t. Merci du tuyau pour nommer les noms en anglais je vais prendre en compte maintenant 😉

 while($t = $topics->fetch()) { ?>

merci

luffy78

Messages: 7

Hey guys ! toujours personne pour m'aider ? merci

SkinDePewDiePie_

Messages: 78


Bonjour,
As-tu nommé ta variable $topics ou $topic, c'est le détail qui tue 😀

-Matteo

ThomasLBA

Messages: 28

Re !

Peut être faudrait-t-il tester la valeur de "$topics" :

      //...
      $req = "SELECT * FROM f_topics
            LEFT JOIN f_topics_categories ON f_topics.id = f_topics_categories.id_topic 
            LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id
            LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id
            LEFT JOIN membres ON f_topics.id_createur = membres.id
            WHERE f_categories.id = ?";
      if(@$id_souscategorie) {
         $req .= " AND f_souscategories.id = ?";
         $exec_array = array($id_categorie,$id_souscategorie);
      } else {
         $exec_array = array($id_categorie);
      }
      $req .= " ORDER BY f_topics.id DESC";
      
      $topics = $bdd->prepare($req);
      $topics->execute($exec_array);
      die('<pre>'.print_r($topics).'</pre>') // ICI
Au moins pour voir à quoi ça ressemble, parce que c'est forcemment de là que vient l'erreur : PHP ne connait pas cette variable !

SkinDePewDiePie_

Messages: 78

Bonjour,
luffy78, J'ai vu le tuto de primfx et ton code est bon, donc essaye d'update PHP, sinon essaye de passer a XAMPP.
Ou essaye sur un hébergement en ligne.

-Matteo


Vous devez vous connecter ou créer un compte pour poster une réponse