bonjour a tous
j ai un espace membre
et je souhaiterais pouvoir récupérer le mail de l utilisateur pour l afficher sur une page
lorsque je fais ceci je ne vois que le pseudo

<?php
session_start();
var_dump($_SESSION);

je pense que je dois configurer cela dans ma page de connexion , mais comment ??

<?php 
    session_start();
 //   require_once 'config.php';
  require_once 'config.php';
    if(!empty($_POST['pseudo']) && !empty($_POST['password']))
    {
        $pseudo = htmlspecialchars($_POST['pseudo']);
        $password = htmlspecialchars($_POST['password']);

        $check = $bdd->prepare('SELECT pseudo, password FROM utilisateurs WHERE pseudo = ?');
        $check->execute(array($pseudo));
        $data = $check->fetch();
        $row = $check->rowCount();

        if($row == 1)
        {

                if(password_verify($password, $data['password']))
                {
                  $_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$data['pseudo']) ;
                   $_SESSION['pseudo'] = $data['pseudo'];

                      header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']);
                    die();
                }else{ header('Location: index.php?login_err=password'); die(); }

        }else{ header('Location: index.php?login_err=already'); die(); }
    }

25 réponses


Carouge10
Réponse acceptée

parfait. tu peux donc passer en résolu

Bonjour,
Pas de htmlspecialchars sur les données entrée en BDD c'est UNIQUEMENT à l'affichage
Comme le dit la doc, rowCount ne s'utilise pas sur une requête SELECT, tu peux directement utiliser le "fetch" ou un "fetchColumn"
Si tu as besoin de l'email à plusieurs reprise ailleurs, alors oui tu peux utiliser les sessions sinon tu fais une requête pour demander l'email

bonjour carouge10
merci pour ta reponse et merci pour le conseil
comment je pourrais faire cette requete ?

une requête select qui demande l'email ...... c'est la base à savoir faire

cela j arrive a le faire de cette maniere mais alors j obtiens tous les emails

<?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT email FROM utilisateurs ');

while ($donnees = $reponse->fetch())
{
    echo $donnees['email'] . '<br />';
}

$reponse->closeCursor();

?>

et la condition ? le WHERE ?

oui c est bien a cela que je pensais
a mettre dans le select
peut etre ceci

WHERE email=$_SESSION['email']

tu as su le faire pour la connexion, ce n'est pas si différent pour celle-ci

si tu as l'email en session, pourquoi le demander par une requête ?

merci pour ton aide carouge10
mais ce qui m interesse c est justement l email , en session lorsque je fais le var_dump sur une autre page je n ai que le pseudo

donc je pourrais demander l email de cette facon

WHERE email = ?

oui et que mettrais comme paramètre pour "?"
parmi les éléments dont tu disposes ?

le pseudo dans ce cas la ...

je partirais plus sur l'id

merci carouge10
je vais tenter ceci alors
SELECT email FROM utilisateurs WHERE email =id

je ne savais pas que cela etait possible ...

pourquoi cela ne le serai pas ?
pourquoi avoir 2 fois le pseudo dans la session ?

merci pour la reponse
en fait et pour etre honnete c est un autre membre d un autre forum qui me l avais corrige de cette facon

je viens donc d essayer
mais rien n est retourne

 <?php
 <?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=id1phil;charset=utf8', 'id16', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT email FROM utilisateurs WHERE email =id ');

while ($donnees = $reponse->fetch())
{
    echo $donnees['email'] . '<br />';
}

$reponse->closeCursor();

?>

?>

?>

tu es sur d'avoir l'id dans la session avec ton code actuel ? car tu ne le récupères pas dans ta requête sur le 1er code

voici un code plus optimisé

<?php 
    session_start();
 //   require_once 'config.php';
 require_once 'config.php';
if(!empty($_POST['pseudo']) && !empty($_POST['password'])) {

    $check = $bdd->prepare('SELECT id, pseudo, password FROM utilisateurs WHERE pseudo = ?');
    $check->execute(array($_POST['pseudo']));

    if($data = $check->fetch())
    {
        if(password_verify($_POST['password'], $data['password']))
        {
          $_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$_POST['pseudo']) ;

              header('Location: accueil-peche-perle.php?pseudo='.$_POST['pseudo']);
            die();
        }else{ header('Location: index.php?login_err=password'); die(); }

    }else{ header('Location: index.php?login_err=already'); die(); }
}

EDIT: faut vraiment que tu revois le cours sur les requêtes préparées

ah super un tres grand merci pour ce code c est vraiment gentil

comme explique plus haut j ai essaye un code dans une page ou je souhaite afficher l email mais cela ne fonctionne pas malheuresuement ...
par contre avec la var_dump j ai bien l id a present

 <?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=id760_phil;charset=utf8', 'i', 'S202+');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT email FROM utilisateurs WHERE email =id ');

while ($donnees = $reponse->fetch())
{
    echo $donnees['email'] . '<br />';
}

$reponse->closeCursor();

?>

faut vraiment que tu revois le cours sur les requêtes préparées

tous les exemples de requetes select que je trouve sont avec des boucles malheuresuement

requarde la doc sur php.net
tu as su le faire pour la connexion, ce n'est pas si différent pour celle-ci

merci carouge10
je suis en train de chercher un exemple

tu en as un sous tes yeux....

oui c est vrai et je vais regarder a cela de plus pres
mais j ai modifie le fichier de connexion que tu m as offert
j ai modifier cette ligne

 $_SESSION['user'] = array('id'=>$data['id'], 'pseudo'=>$data['pseudo'], 'email'=>$data['email']) ;

et du coup quand j effectue le var£_dump j ai bien a present mon email

voila c est fait et encore merci