Bonjour à tous,

j'ai crée un à l'aide de ce tuto [http://www.grafikart.fr/tutoriels/php/gestion-membre-229]() un espace membre et je voudrais maintenant mettre en place une page profil pour les membre en utilisant des variables de session et j'ai beau chercher je n'y arrive pas, je pense que je dois modifier le fichier (auth.php)

<?php require_once 'cnx.php' ?>
<?php 
class Auth{
        static function islog(){
        global $cnx;
        if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['email']) && isset($_SESSION['Auth']['password'])){
            $q=array('email'=>$_SESSION['Auth']['email'],'password'=>$_SESSION['Auth']['password']);
            $sql = 'SELECT email,password,prenom FROM inscription WHERE  email = :email AND password = :password';          
            $req = $cnx->prepare($sql);
            $req->execute($q);
            $count = $req->rowCount($sql);
                if($count == 1){
                    return true;

                }else{
                    return false;
                }
                }

    }

}

?>

je n'arrive pas à définir de $_SESSION['prenom'] etc.. dans la fonction islog .

Je ne sais pas si vous m'avez compris ?
merci d'avance

17 réponses


MehdiWEB
Réponse acceptée

Fermer le sujet s'il vous plait, merci.

Bonjour,

Je suis pose que $count vaut toujours false ?

Pour avoir le $count comme vous le définissez, il vous faire le rowCount sur les résultats et non sur la requête.

$data = $req->execute($q);
$count = $data->rowCount();
zeedi
Auteur

Bonjour, j'ai essayé mais cela me renvoi une erreur


```Fatal error: Call to a member function rowCount() on a non-object ```

Au temps pour moi

$req->execute($q);
$count = $req->rowCount();
zeedi
Auteur

Bonjour,
j'ai modifié mais cela ne change rien, sur ma page profil j'appel ma fonction sur ma page profil comme cela :

<?php
session_start();
require('auth.php');
if(Auth::islog()){
}
else{
header('Location:index.php');
}

?>

Lorsque dans le formulaire de cette page profil je veux afficher l'adresse mail la variable fonctionne :

<?php echo $_SESSION['Auth']['email']; ?>

lorsque j'appel la variable de prenom cela me met une erreur :

Notice: Undefined index: prenom in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\site\user-profile-settings.php on line479

Ce qui est normal car dans mon fichier auth.php je n'arrive pas à définir une variable de session car dès que j'essai cela renvoi le membre à la page de connexion comme ci les identifiants etaient inccorect.

J'ai beau chercher je n'y arrive pas. Auriez vous une idée de la solution ?

merci

J'ai fait le code à ma maniére:

        <?php 
    require_once 'cnx.php'
    class Auth{
    static function islog(){
    global $cnx;
    if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['email']) && isset($_SESSION['Auth']['password'])){
        $sql = $cnx->prepare("SELECT email,password,prenom FROM inscription WHERE email = ? AND password = ?");
        $sql->execute(array($_SESSION['Auth']['email'], $_SESSION['Auth']['password']));
        $count = $req->rowCount($sql);
            if($count > 0){
                return true;
            } else {
                return false;
            }
    }

    }

    }
    ?>

Si sa ne marche toujours pas, c'est qu'il ne trouve pas la variable "$cnx".
Derien

zeedi
Auteur

Salut et merci ,

cela me met une erreur :
Notice: Undefined variable: req
Fatal error: Call to a member function rowCount() on a non-object

Je vais voir du côté de "$cnx"

rowcount doit se faire sur la même variable que execute.

 <?php 
    require_once 'cnx.php'
    class Auth{

        static function islog(){
            global $cnx;

            if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['email']) && isset($_SESSION['Auth']['password'])){
                $sql = $cnx->prepare("SELECT email,password,prenom FROM inscription WHERE email = ? AND password = ?");
                $sql->execute(array($_SESSION['Auth']['email'], $_SESSION['Auth']['password']));
                $count = $sql->rowCount();
                if($count > 0){
                    return true;
                } else {
                    return false;
                }
            }

        }

    }
    ?>

Oui j'ai l'habitude de nommer mes requete "$req" remplace le par "$sql"

zeedi
Auteur

Merci, ça fonctionne mais j'ai toujours ce soucis de $_SESSION['prenom'] etc.. dans la fonction islog du coup je ne paux pas afficher les prenom nom etc dans le formulaire du profil je nage completement.

Tu compte faire quoi au juste?

zeedi
Auteur

Une page profil pour les membres.
Tous fonctionne en ce qui concerne la page de connexion au site, le formulaire d'inscription, la session du membre. Mais je bloque sur cette page profil je peux uniquement appeler les variable email et password et je n'arrive pas a définir les variables de session nom prenom etc

Voilà le code:

         <?php 
    require_once 'cnx.php'
    class Auth{

        static function islog(){
            global $cnx;

            if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['email']) && isset($_SESSION['Auth']['password'])){
                $sql = $cnx->prepare("SELECT * FROM inscription WHERE email = ? AND password = ?");
                $sql->execute(array($_SESSION['Auth']['email'], $_SESSION['Auth']['password']));
                $count = $sql->rowCount();
                if($count > 0){
                   $data = $sql->fetch(PDO::FETCH_OBJ);
                   $_SESSION['data'] = $data;
                   unset($_SESSION['Auth']);
                } else {
                    return false;
                }
            }

        }

    }
    ?>

Pour appeler une collone tu fait ceci:
echo $_SESSION['data']->prenom;

Derien

zeedi
Auteur

Bonsoir, oui pour cette session ça fonctionne si je fais

echo $_SESSION['Auth']['prenom'];

Cela ne marche pas car je n'arrive pas à définire cette $_SESSION

Je t'ai donné le code qu'il faut faire, maintenant si sa sa ne marche pas tu doit mettre session_start() toute en haut de ton fichier.

zeedi
Auteur

Super merci Mehdi, je te tiens au courant

zeedi
Auteur

J'ai trouvé la solution

$sth = $cnx->prepare("SELECT email,prenom, nom, adresse, mobile,avatar,code_postal, ville FROM inscription WHERE email = :email");
$sth->execute(array('email'=>$_SESSION['Auth']['email'])); 
/* styles PDOStatement::fetch */
//print("PDO::FETCH_ASSOC: ");
//print("Retourne la ligne suivante en tant qu'un tableau indexé par le nom des colonnes\n");
$result = $sth->fetch(PDO::FETCH_ASSOC);
//print_r($result); 
//print("\n");

merci pour votre aide