Page 1 sur 1

récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 24 janv. 2020, 14:25
par coraille
Bonjour,
Après des heures de recherche, je n'arrive toujours pas à identifier l'erreur. J'ai fait un mini site sur lequel l'utilisateur doit s'inscrire, je récupère alors les infos que j'envoie dans ma BDD avec la date du jour qui sera donc sa date d'inscription puis lorsqu'il revient, il doit se connecter et là, je voudrai afficher Bonjour xxx son pseudo (ça c'est ok ) ET sa date d'inscription stockée dans la BDD;
Ma question est : comment puis-je rédiger ma requête pour lui dire 'va récupérer le pseudo qui vient de se connecter et compare le à ceux de la BDD et envoie moi la date d'inscription correspondante. J'ai beau essayé la méthode des sessions, des cookies, rien ne fonctionne; J'ai soit des messages d'erreur, soit aucune info ne s"affiche là où je voudrai récupérer la date.

Merci de votre aide
Voilà mon code ;

<?php
//connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
<!Doctype HTML> // j'ai supprimé toute la partie HTML pour la lisibillité
<html lang="fr">
<div class="presentation">

<?php
/*Récupération des données depuis la BDD pour affichage à la connexion :
on créé un objet "reponse" qui contient la récupération des champs dans la BDD pour message d'accueil.*/
$reponse =$bdd->query(' SELECT id,Pseudo, DateInscription FROM joueurs WHERE Pseudo="'.$_POST['Pseudo'].'" ') ;
$donnees=$bdd->prepare('SELECT DateInscription FROM joueurs WHERE Pseudo="'.$_POST['Pseudo'].'" ');
/*On fait une boucle "fetch" pour parcourir les lignes des visiteurs une à une
$donnees est un array qui contient champ par champ les valeurs de la première entrée.On affiche chaque entrée une à une avec la boucle while*/
while ($donnees= $reponse->fetch())

?>
<p>
Bonjour <?php echo '<strong> ' . htmlspecialchars($donnees['Pseudo']) .'' ; ?> <br>
</strong> Heureux de vous revoir ! <br>
Vous êtes inscrit sur notre site depuis le
<?php
echo '</strong> ' . htmlspecialchars($donnees['DateInscription']) . '';
//les données sont protégées par htmlspecialchars

}
$reponse->closeCursor(); // Termine le traitement de la requête
?>

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 24 janv. 2020, 14:32
par Saian
Salut, généralement lors de la connexion avant redirection tu vas renseigner une variable en session contenant l'id de l'utilisateur.
Ensuite c'est pas compliqué tu as juste à faire une requête SELECT .. WHERE id = $_SESSION['id'], récupérer le résultat et utiliser la colonne du pseudo.

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 25 janv. 2020, 23:54
par coraille
Bonsoir, merci pour ta réponse. J'ai utilisé la méthode que tu m'as conseillée (j'ai pris email à la place de l'id mais même avec l'id ça ne marche pas) et je n'arrive toujours pas à obtenir de résultat. Je cherche depuis des heures et en désespoir de cause, je me permets de revenir vers toi, car je ne m'en sors pas. J'ai maintenant une erreur "Fatal error: Uncaught Error: Call to a member function fetchAll() on string in C: Je te copie le code que j'ai écrit , si tu peux m'aider à détecter l'erreur.
Merci d'avance et désolée de ne pas m'en sortir sans te demander à nouveau de l'aide

<?php
session_start();
$_SESSION['id'] = '?'; // on créé des variables sessions
$_SESSION['Pseudo'] = '?';
$_SESSION['Email'] = '?';
$_SESSION['pass'] = '?';
//connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
<!Doctype HTML>
<html lang="fr">

<div class="presentation">
<?php
//préparation de la requête en fonction de l'Email du membre
$reponse =$bdd->prepare = 'SELECT *from joueurs WHERE Email="'.$_SESSION['Email'].'"';

/*on met le résultat dans un tableau $data-On fait une boucle "fetch" pour parcourir les lignes des visiteurs une à une
$data est un array qui contient champ par champ les valeurs de la première entrée.On affiche chaque entrée
une à une avec la boucle while*/
while ($data = $reponse->fetchAll())

//on assigne nos variables tirées du tableau $data
$Pseudo = $data['Pseudo'];
$DateInscription = $data['DateInscription'];
?>
<p>
Bonjour <?php echo $Pseudo; ?> <br>
</strong> Heureux de vous revoir ! <br>
Vous êtes inscrit sur notre site depuis le <?php echo $DateInscription; ?>

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 25 janv. 2020, 23:57
par coraille
J'ai oublié de te préciser que les varaibles SESSION du début sont sur la première page où s'effectue la connexion , je les ai copié en haut de ma page pour que tu les vois. Sur ma 2ème page(c'est à dire celle où se trouve la requête, je n'ai mis que session start)
Merci de ton aide

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 25 janv. 2020, 23:59
par or 1
$reponse =$bdd->prepare = 'SELECT *from joueurs WHERE Email="'.$_SESSION['Email'].'"';
voir https://www.php.net/manual/fr/pdo.prepare.php pour la bonne utilisation de la fonction prepare.

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 26 janv. 2020, 00:11
par coraille
merci, je vais aller voir et essayer de trouver la solution pour corriger.
Bonne soirée

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 26 janv. 2020, 22:50
par coraille
je suis allée voir la doc mais c'est trop compliqué pour moi, je n'arrive pas à comprendre ce qu'il faut faire.
Quelqu'un peut-il m'aider en m'expliquant ce que je dois mettre dans la requête. Je pensais qu'il valait mieux utiliser les cookies mais ça ne fonctionne pas. J'ai toujours un message d'erreur : Fatal error: Uncaught Error: Call to a member function fetch() on string in C:\wamp64\www\SiteJeuxSophie dateRecupBDD\index.php on line 110
( ! ) Error: Call to a member function fetch() on string in C:\wamp64\www
Je ne trouve pas la solution. Si quelqu'un peut m'aider à avancer, ce serait très sympa. Je suis novice en php et j'ai beau lire toutes les doc possibles, je ne vois pas ce que je dois corriger. D'avance merci à ceux qui prendront un peu de leur temps pour m'aider.

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 27 janv. 2020, 07:42
par j_saisrien
À regarder ta requête moi je dirais que tu n'as pas besoin d'une requête préparée.
Juste 'query' devrait suffire

$reponse =$bdd->query =( 'SELECT *from joueurs WHERE Email="'.$_SESSION['Email'].'"');
while ($data = $reponse->fetch()){
}

Avec une requête préparée il faut une étape supplémentaire : exécuter la requête.
$reponse =$bdd->prepare =( 'SELECT *from joueurs WHERE Email= ? ') ;
$reponse->execute(array($_SESSION['Email'] ));
while ($data = $reponse->fetch()){
}

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 27 janv. 2020, 15:45
par coraille
merci beaucoup de ton aide
Je vais tester

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 28 janv. 2020, 14:39
par Saian
Salut, il y a tout de même un problème de syntaxe là. Normalement c'est :
$reponse = $bdd->query( 'SELECT *from joueurs WHERE Email="'.$_SESSION['Email'].'"');
Il n'y a pas de = entre le nom de la méthode et la parenthèse ouvrante. Le égale sert à affecter la valeur de droite à la variable à gauche. D'où l'erreur Call to a member function fetch() on string.

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 29 janv. 2020, 15:57
par coraille
Bonjour Saian
Merci de ta réponse, je vais corriger et je te dirai si ça fonctionne
Bonne journée

Re: récupérer les infos dans la BDD de l'utilisateur connecté

Posté : 31 janv. 2020, 12:15
par coraille
Bonjour,

ça fonctionne, je vous remercie tous du temps que vous avez passé à m'aider; vous êtes très sympa
Je mets le sujet comme résolu. Encore un grand merci