erreurs sur pour lister les topics partie 4 cours creation forum PHP
- Accueil
- Forum
- Programmation
- PHP
- erreurs sur pour lister les topics partie 4 cours creation forum PHP
Ce topic est suivi par : luffy78, ThomasLBA, SkinDePewDiePie_
luffy78 Le 15 juillet 2019 à 23:19 (Édité le 15 juillet 2019 à 23:21)
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 !
SkinDePewDiePie_ Le 17 juillet 2019 à 09:28 (Édité le 1 janvier 1970 à 01:00)
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 Le 18 juillet 2019 à 18:27 (Édité le 1 janvier 1970 à 01:00)
ThomasLBA Le 20 juillet 2019 à 00:37 (Édité le 20 juillet 2019 à 00:38)
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 Le 23 juillet 2019 à 22:20 (Édité le 1 janvier 1970 à 01:00)
luffy78 Le 30 juillet 2019 à 21:23 (Édité le 1 janvier 1970 à 01:00)
SkinDePewDiePie_ Le 1 août 2019 à 15:21 (Édité le 1 janvier 1970 à 01:00)
Bonjour,
As-tu nommé ta variable $topics ou $topic, c'est le détail qui tue 😀
-Matteo
ThomasLBA Le 5 août 2019 à 10:02 (Édité le 5 août 2019 à 10:09)
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_ Le 5 août 2019 à 10:30 (Édité le 5 août 2019 à 10:43)
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 Le 20 septembre 2019 à 16:48 (Édité le 1 janvier 1970 à 01:00)
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_ Le 20 septembre 2019 à 19:16 (Édité le 1 janvier 1970 à 01:00)