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: 105

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: 105


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: 105

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

Klimero12

Messages: 1

Bonjour,
Je ne sais pas si le post est toujours d’actualité mais comme Luffy, j'ai pas mal galéré au même endroit mais j'ai fini par trouver mon erreur.
Il faut vraiment suivre pas à pas le tuto car certaines tables ou champs on changés.
Après recherches j'en ai déduit ce qui suit :
Le message te dit que ta variable topic dans forum_topic.view.php n'est pas définie. Cette variable est normalement définie dans la requête préparée de forum_topic.php ligne  46 (et 47). Elle renvoie vers la variable $req lignes 32 a 37 de forum_topic.php. Elle correspond donc à tes jointures de tables.
Il faut que tu contrôles tes jointures et essayer le code dans phpmyadmin.
J'ai fini par corriger mon erreur en refaisant les jointures dans phpmyadmin est ça a fini par marcher.
Bonne journée

SkinDePewDiePie_

Messages: 105

J'avais complètement oublié ce topic mdr, merci @Klimero12 de me l'avoir rappellé x)


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