Bonjour, j'ai fait un script qui affiche les annonces que l'utilisateur à posté sur son espace membre, seulement rien ne s'affiche là où les annonces sont censées s'afficher. Je suis allé dans Phpmyadmin pour taper la requete et tout s'affichait normalement je ne vois pas d'où viens l'erreur. j'ai testé le script en local et Call to a member function fetch() on a non-object s'affiche je gère bien les erreurs php pourtant je ne comprend pas. voici le script d'annonce:
<div class="col-md-8">
<h3>Mes annonces</h3>
<?php
$user_id=$_SESSION['auth']->ID;
$req=$pdo->prepare('SELECT * FROM `annonces` WHERE `id_user`=? ORDER BY `id` DESC LIMIT 0, 5')->execute([$user_id]);
while ($donnees=$req->fetch()) {
echo "<div class='annoncemembre'>
<h3>".htmlspecialchars($donnees["titre"])."</h3></div>";
}
if(empty($donnees)){
echo "<p>Vous n'avez aucune annonces pour le moment</p>";
}
?>
</div>
Merci d'avance de votre aide
sujet résolu ! en fait à cause fe mon db.php et de fetch mode il fallait faire ça $donnees->titre; au lieu de $donnees['titre']; merci à tous pour votre aide
Si tu veut recupérer toute les Entité, c'est un fetchAll() et non un fetch() qu'il faut faire si mes souvenir sont bon
j'ai testé fetchAll() mais la page m'affiche la même erreur (avec fetchAll() à la place de fetch) j'ai aussi essayé de mettre la requête dans un try catch mais rien ne marche
Pk tu fait un execute du user ID?
edit: si mes souvenir sont bon ( encore une fois ^^ ) il faut faire un bindparam pour associé id a user id et execute après.
$pdo->prepare('SELECT * FROM `annonces` WHERE `id_user`= :id ORDER BY `id` DESC LIMIT 0, 5');
$pdo->->bindParam(':id', $user_id);
$pdo->execute();
essaie ça
j'ai fait comme ça et la page me retourne ça: Call to undefined method PDO::bindParam()
<?php
session_start();
error_reporting(E_ALL);
require'../includes/functions.php';
require_once('../includes/db.php');
logged_only();
if (!empty($_POST)) {
if (!empty($_POST['password']) && $_POST['password']==$_POST['password_confirm']) {
$user_id=$_SESSION['auth']->ID;
$password=sha1($_POST['password']);
$req=$pdo->prepare('UPDATE `utilisateurs` SET `mot de passe`=? WHERE `ID`=?')->execute([$password,$user_id]);
$_SESSION['flash']['success']='Votre mot de passe a bien été mis à jour.';
}
else {
$_SESSION['flash']['danger']='Les deux mots de passes ne correspondent pas';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../css/bootstrap.css" media="screen" title="no title" charset="utf-8">
<link rel="stylesheet" href="../css/style.css" media="screen" title="no title" charset="utf-8">
<title>Votre compte</title>
</head>
<body>
<?php require'../includes/header.php'; ?>
<div class="content">
<h1>Votre compte</h1>
<h2>Bonjour <?= htmlspecialchars($_SESSION['auth']->prenom); ?>, voici vos informations</h2>
</div>
<p></p>
<div class="container">
<div class="row">
<div class="col-md-4">
<h3>Changer mon mot de passe</h3>
<form class="" action="account.php" method="post">
<div class="form-group">
<input class="form-control"type="password" name="password" value="" placeholder="changer de mot de passe" required>
</div>
<div class="form-group">
<input class="form-control"type="password" name="password_confirm" value="" placeholder="confirmation du mot de passe" required>
</div>
<button type="submit" class="btn btn-primary"name="button">Changer mon mot de passe</button>
</form>
</div>
<div class="col-md-8">
<h3>Mes annonces</h3>
<?php
$user_id=$_SESSION['auth']->ID;
$req=$pdo->prepare('SELECT * FROM `annonces` WHERE `id_user`=:id_user ORDER BY `id` DESC LIMIT 0, 5');
$pdo->bindParam(':id_user', $user_id);
$pdo->execute();
while ($donnees=$req->fetchAll()) {
echo '<div id="annoncemembre">
<h2>'.htmlspecialchars($donnees['titre']).' Prix: '.htmlspecialchars($donnees['prix']).'€</h2>
<h3>'.htmlspecialchars($donnees['ville']).'() </h3>
</div>';
}
if(empty($donnees)){
echo "<p>Vous n'avez aucune annonces pour le moment</p>";
}
?>
</div>
</div>
</div>
</body>
</html>
var_dump() c'est une fonction qui debugger le contenu de ta variable
et print_r() permet de debugger les tableaux
voilà je l'ai fait ça m'a renvoyé ça:array (size=0)
empty
mais ce qui est très étrange c'est que maintenant je n'ai plus d'erreur qui s'affiche mais la phrase vous n'avez aucune annonces pour le moment alors que en bdd pour cet user_id j'en ai 2.
ca veut dire que ta reponse ne contient pas de données.
j'ai fait une petit erreur je pense dans le PHP
$req=$pdo->prepare('SELECT * FROM `annonces` WHERE `id_user`=:id_user ORDER BY `id` DESC LIMIT 0, 5');
$req->bindParam(':id_user', $user_id);
$req->execute();
essaie ca
oui je l'avais rectifiée par la suite mais ce qui est bizarre c'est que dans ma base de donnée j'ai des entrées correspondants aux conditions de la requete. Je viens maintenant de vérifier le contenu de la variable $user_id il est bien identique à l'id_user de mes annonces.
non je ne pense pas puisque j'ai essayé d'afficher cette variable et elle est bien conforme à ce que je voulais
j'ai fais ça:
<?php
try{
$pdo=new PDO('mysql:dbname=louerprergaa;host=localhost;', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$pdo->query('SET NAMES "utf8"');
}
catch(PDOException $e) {
echo 'Échec lors de la connexion : ' . $e->getMessage();
}
Et tu n'as pas une erreur plus précis que Call to a member function fetch() on a non-object ?
Bonjour.
Il n'y a pas quelque chose qui vous choque avec ça : $_SESSION['auth']->ID ?
Oui moi aussi au debut je me demande d'ou ca vient ce
->ID
maintenant l'erreur ne s'affiche plus , c'est la phrase Vous n'avez pas d'annonce pour le moment qui s'affiche alors que dans la base de donnée j'ai bien 2 annonces qui correspondent à cet user_id.
pour le $_SESSION['auth']->ID j'ai fait comme dans le tutoriel de grafikart sur l'espace membre et sur tout mes autres scri^pts cela fonctionne.