Bonjour à tous,

Je suis en train de concevoir un site ou l'utilisateur pourra s'inscrire et se connecter à un espace privé.
J'aimerai que dès que la personne se connecte, son pseudo s'affiche sur la landing page.
Le problème est que ma variable pseudo et email sont NULL, pourtant j'ai pu m'inscrire et les variables sont présentes dans la base de données.
Je voudrai que les variables présentes dans ma base de données apparaissent dans mon fichier php.
J'ai essayer plusieurs tutos qui n'ont rien donné.
Je n'y connais pas grand chose en php donc un peu d'aide ne serait pas de refus.

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

    $bdd = new PDO('mysql:host=localhost;dbname=utilisateurs', 'root', 'root');

    // On récupere les données de l'utilisateur
    $req = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = ?');
    $req->execute(array($pseudo['pseudo']));
    $data = $req->fetch()['pseudo'];
    echo $_SESSION['pseudo'];

    if(empty($pseudo)) {
        echo 'la variable est vide!';
        } else{
        echo 'la variable n\'est pas vide';}

?>
<!doctype html>
<html lang="en">
  <head>
    <title>Espace membre</title>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  </head>
  <body>
        <div class="container">
            <div class="col-md-12">
                <?php 
                        if(isset($_POST['err'])){
                            $err = htmlspecialchars($POST['err']);
                            switch($err){
                                case 'current_password':
                                    echo "<div class='alert alert-danger'>Le mot de passe actuel est incorrect</div>";
                                break;

                                case 'success_password':
                                    echo "<div class='alert alert-success'>Le mot de passe a bien été modifié ! </div>";
                                break; 
                            }
                        }

                    ?>

                <div class="text-center">

                <h2>Bonjour
                <?php  
                echo $_SESSION['pseudo']; //Affichage du nom  
                ?>
                </h2>

                        <hr />
                        <a href="deconnexion.php" class="btn btn-danger btn-lg">Déconnexion</a>
                        <!-- Button trigger modal -->
                        <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#change_password">
                          Changer mon mot de passe
                        </button>
                </div>
            </div>
        </div> 
     </body>
</html>

10 réponses


Hello :)

Alors le soucis c'est que tu fetch les données utilisateurs depuis la database, mmais tu ne mets rien en SESSION

La session n'a rien a voir avec la base de données, il faut que tu enregistres que que tu as récupéré

    /** ... */
    $data = $req->fetch()['pseudo'];
    $_SESSION['pseudo'] = $data; // <-- ICI
    echo $_SESSION['pseudo'];
    /** ... */
mama158
Auteur

J'ai essayé mais ça ne fonctionne toujours pas ça continue de me dire que la variable est vide..

Mmmh... Une façon pro de voir le soucis: var_dump($data);die();

Déjà pour être sur qu'il y a qque chose dans $data et que tu mets pas du vide dans la $_SESSION

Ou alors regardes dans les datas de ton navigateur si ça a bien été stocké (cookie ou session_storage je sais plus)

mama158
Auteur

visiblement c´est vide puisque ça m´affiche NULL encore une fois.
et idem dans le session storage du naviguateur

Okay le problème ne vient pas de la mise en session mais de la requête alors

Et fetch pas sur qu'il retourne un tableau, essayes de faire comme ça, en principe

$data = $req->fetch(PDO::FETCH_OBJ);

$pseudo = $data->pseudo;

$_SESSION["pseudo"] = $pseudo;

echo $_SESSION["pseudo"];

D'ailleurs dans ta requete il yu a $req->execute(array($pseudo['pseudo'])); mais tu la crées où la variable $pseudo ?

mama158
Auteur

J'ai mis la variable pseudo plus haut mais je ne sais pas si la syntaxe est bonne
et ça ne fonctionne toujours pas
Je renvoie le code au cas où j'ai mal écrit qqch

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

$bdd = new PDO('mysql:host=localhost;dbname=utilisateurs', 'root', 'root');

$pseudo = ["pseudo"];

// On récupere les données de l'utilisateur
$req = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = ?');
$data = $req->fetch(PDO::FETCH_OBJ);

$pseudo = $data->pseudo;

$_SESSION["pseudo"] = $pseudo;

echo $_SESSION["pseudo"];

if(empty($pseudo)) {
    echo 'la variable est vide!';
    } else{
    echo 'la variable n\'est pas vide';}

?>
<!doctype html>
<html lang="en">
<head>
<title>Espace membre</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

</head>
<body>
<div class="container">
<div class="col-md-12">
<?php
if(isset($_POST['err'])){
$err = htmlspecialchars($POST['err']);
switch($err){
case 'current_password':
echo "<div class='alert alert-danger'>Le mot de passe actuel est incorrect</div>";
break;

                            case 'success_password':
                                echo "<div class='alert alert-success'>Le mot de passe a bien été modifié ! </div>";
                            break; 
                        }
                    }

                ?>

            <div class="text-center">

            <h2>Profil de <?php echo $_SESSION["pseudo"]; ?></h2>

                    <hr />
                    <a href="deconnexion.php" class="btn btn-danger btn-lg">Déconnexion</a>
                    <!-- Button trigger modal -->
                    <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#change_password">
                      Changer mon mot de passe
                    </button>
            </div>
        </div>
    </div> 

Ok alors maintenant tu prépares une requete avec pseudo = ? et ensuite tu fetch()

Entre les deux il faut que définisses quelle sera la valeur de pseudo

$pseudo = "pseudo";

$req = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = :pseudo');
$req->execute([ "pseudo" => $pseudo ]); // Si tu veux laisser $pseudo = [ "pseudo" ]; alors dans le execute faut faire $pseudo[0]
$data = $req->fetch(PDO::FETCH_OBJ);

echo $data->pseudo;

$_SESSION["pseudo"] = $data;

echo $_SESSION["pseudo"];
mama158
Auteur

La variable n'est plus vide mais ça ne s'affiche toujours pas.

mama158
Auteur

Bonjour,

J'aimerai lier mes deux tableaux qui sont dans la même base de données afin que les informations qui sont dans la table 1 aille aussi dans la table 2. Le problème c'est que même en créant une relation entre les 2 tables quand j'insére une info dans la table 1 rien ne se met dans la table 2.

Si quelqu'un s'y connait un peu en mysql et phpmyadmin

Pour moi ce que tu veux n'est pas tres logique...je t'invite a regarder encore les videos de grafikart sur sql( jointure, MCD et la pratique).