IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

probleme de session ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut probleme de session ?
    Bonsoir,

    je n'arrive pas récupérer la session après une redirection.
    j'ai un formulaire identifiant, quand je clique sur se connecter,
    j'ai une autre script qui vérifie si le membre existe et quoi qu'il arrive
    je devrais revenir à mon index et récupérer la session de l'objet membre
    mais il n'est pas là

    voici le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    require_once 'Bdd.php';
    //echo "session";
    //print_r($_SESSION['membre']); 
    if(isset($_SESSION['membre']))
    {
            print_r($_SESSION['membre']);
    }
    else
    {
    //*******************************HEADER ************************************
    $html = new Html('Page Accueil');
    $form_identifiant = new FormAnnuaire('verif.php','connexion','identifiez-vous avec votre email et mot de passe');
    $form_identifiant->getFormIdentifiant();//affiche champ email et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    <?php
    //Bdd.php
    session_start();
     
    class Bdd {
     
        public static function getIntance() {
            try {
                $instance = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
            } catch (PDOException $e) {
                echo 'Erreur : ' . $e->getMessage() . '<br/>';
                echo 'N° : ' . $e->getCode() . '<br/>';
            }
     
            return $instance;
        }
     
    }
     
    //auto load ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    //verif.php
    require'Bdd.php';
    extract($_POST);
    $membre = new Membre();
    $membre->isMembreExist($email,$pass);
    $_SESSION['membre'] = $membre;
     
    print_r($_SESSION['membre']);
     
    echo $membre->getMembreExist();
     header('Location: index.php');
     
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    <?php
     
    require_once 'Bdd.php';
     
    class Membre {//classe qui permet d'enregister les infos de chaque membres
     
        private $bdd;
        private $id_membre; //permet de rechercher les relions en fonction des tables
        private $email;
        private $pass;
        private $civilite;
        private $nom;
        private $prenom;
        private $telephone;
        private $adresse; 
        private $membre_exist = NULL;
     
        public function __construct() {
            $this->bdd = bdd::getIntance();
        }
     
        public function  getMembreExist()
        {
            return $this->membre_exist;
        }
     
        public function isMembreExist($email, $pass) {//vérifi s'il existe
            $this->email = $email;
            $this->mdp = $pass;
            $bdd = $this->bdd;
            $query = 'SELECT * FROM membre WHERE pass=:pass';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':pass', $pass, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch();
            if(!empty($data['id'])
            {
              $this->membre_exist= TRUE;
             }
     
        }
    normalement si je valide mon formulaire poste,
    je devrais avoir la session membre, mais l'index ne récupère pas la session.

    ou est mon erreur ? (je n'ai pas d'erreur avec champ login et passe)
    merci d'avance pour la réponse

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Faut mettre session_start(); dans tous tes scripts (que ce soit pour lire ou pour écrire dans une variable de session, bref avant toute utilisation des variables de session).

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci abciweb mais
    j'appelle ceci pour tout mes fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    //Bdd.php
    session_start();
     
    class Bdd {
     
        public static function getIntance() {
            try {
                $instance = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
            } catch (PDOException $e) {
                echo 'Erreur : ' . $e->getMessage() . '<br/>';
                echo 'N° : ' . $e->getCode() . '<br/>';
            }
    cela ne suffit pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    //Bdd.php
    session_start();//<= session start
     
    tour les fichiers commence par
     
    require('Bdd.php'); //j'inclus Bdd.php, j'ai donc appelle session start?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    la règle de la session est simple : dans une chaîne d'exécution de scripts utilisant une session, il n'est nécessaire de déclarer l'ouverture de session que dans le premier script exécuté.
    Les scripts inclus (directement ou via un autoload) bénéficient automatiquement de la session.

    PS : pour que ta session récupère correctement ton membre, tu dois inclure la définition de ta classe avant de démarrer ta session.
    En l'occurrence, dans ton cas Bdd.php qui démarre la session ne connait pas la classe Membre

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci rawsrc

    donc pour la session c'est ok, mes fichiers peuvent utiliser les sessions,
    donc je ne peux pas cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['objet'] = new Objet();
    j'ai donc fait ce que tu m'a dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    require_once'../lib/Ini.php';
    extract($_POST);
    $membre = new Membre();
    $membre->isMembreExist($email,$pass);
    $_SESSION['membre']=  serialize($membre);
    il n'aime pas que je sérialize la session avec une instance de pdo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( ! ) Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in C:\verif.php on line 7
    comment je peux faire ?? je vais devoir utiliser cela à chaque fois que je souhaite la connexion dans une méthode et ne pas le charger dans la connexion dans un attribut?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function quelqueChose()
    {
        $bdd =bdd::getIntance();
       //.....
    }
    il y a t'il un raccourcis pour que firefox détruise le cache lorsque je termines
    mon test sinon il n'est pas bon , je suis obligé de passé à chaque fois
    en connexion privé sinon mon test est faussé,
    j'aurai pu à la fin du script faire un unset session et destroy session mais
    c'est un peu long à la fin....

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Je t'ai dit une ânerie, pas réveillé, relis mon post, je l'ai corrigé, je vais aller me recoucher je crois )
    Le stockage en session serialize automatiquement les instances de classe.
    Il faut faire attention à ce que ta classe n'ait aucune variable référençant une ressource (c'est $this->$bdd qui pose problème)
    Au moment de déserializer, PHP doit connaitre l'implémentation de la classe Membre, c'est tout.

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour que cela fonctionne voici comment faire avec les fonctions magiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
     
    class Membre
    {//classe qui permet d’enregistrer les infos de chaque membres
     
        private $bdd;
        private $id_membre; //permet de rechercher les relions en fonction des tables
        private $email;
        private $pass;
        private $civilite;
        private $nom;
        private $prenom;
        private $telephone;
        private $adresse; 
        private $membre_exist = NULL;
     
        public function __construct() {
            $this->bdd = bdd::getIntance();
        }
     
        public function  getMembreExist()
        {
            return $this->membre_exist;
        }
     
        public function __sleep()
        {
            $this->bdd = null;
        }
     
        public function __wakeup()
        {
            $this->bdd = bdd::getIntance();
        }
     
        public function isMembreExist($email, $pass) {//vérifi s'il existe
            $this->email = $email;
            $this->mdp = $pass;
            $bdd = $this->bdd;
            $query = 'SELECT * FROM membre WHERE pass=:pass';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':pass', $pass, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch();
            if(!empty($data['id'])
            {
              $this->membre_exist= TRUE;
             }
     
        }
    après il restera l'épineux problème de faire connaître à PHP l'implémentation de cette classe avant de la déserializer (ici, la déserialization intervient avec session_start())

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de test précieuse réponse ,

    edit, j'avais pas vu ton récent message, je vais testé

    si j'ai bien compris ce que tu me dit
    si on fait pour un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['objet'] = new Objet();
    il le fait implicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['objet'] = new serialize(Objet());
    tu me dis donc qu'il ne faut pas de référence dans mon objet
    donc il faut que je fasse à chaque fois ceci si je souhaite avoir pdo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
     
    class Membre {//classe qui permet d'enregister les infos de chaque membres
     
        //private $bdd; //=>je ne dois pas le mettre
        private $id_membre; //permet de rechercher les relions en fonction des tables
        private $email;
     
        private $membre_exist = NULL;
     
        public function __construct() {
          // ne pas le mettre   $this->bdd = bdd::getIntance();
        }
     
        public function  getMembreExist()
        {
            return $this->membre_exist;
        }
     
        public function isMembreExist($email, $pass) {//vérifi s'il existe
            $this->email = $email;
            $this->pass = $pass;
            $bdd = bdd::getIntance();
            $query = 'SELECT * FROM membre WHERE pass=:pass';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':pass', $passs, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch();
            //si le couple correspond , il faut forcer la modification du profil SU
            if ($data['email'] == $email) {
                $this->membre_exist = TRUE;
            }
            $_SESSION['membre'] = $this;// on crée la session membre
        }
     
        public function trouveIdentifiant($email, $password) {
            $this->email = $email;
            $bdd = Bdd::getIntance();
            $query = 'SELECT * FROM membre WHERE email=:email';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':email', $email, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch(PDO::FETCH_OBJ);
     
            if (!isset($data->email)) { //email inexistant = erreur 2
                $this->erreur = 2; //informe à la classe que email est pas bon
            } else {
                if ($data->email == $email AND $data->pass == $password) {
                    echo $email . $password;
                    $this->id_membre_trouver = $data->id; //on tranmet le numéro id
                    $this->erreur = 0; //connexion ok
     
                    $this->verifModifAdmin($this->id_membre_trouver, $email);
                } else {
                    $this->erreur = 1; //pass non valide
                }
            }
        }
     
        public function allAtribut() {//récupérer tout les attributs
            return get_object_vars($this);
        }
     
        public function trouveMembre($id_membre) {
            echo "recheche du membre<br/>";
            $bdd = Bdd::getIntance();
            $query = 'SELECT M.*,A.permis
            FROM membre M
            JOIN auth_membre A
            ON M.id = A.id_membre   
            WHERE M.id = 1
            ';
            $prep = $bdd->prepare($query);
            $prep->bindValue(':id_membre', $id_membre, PDO::PARAM_STR);
            $prep->execute();
            $data = $prep->fetch(PDO::FETCH_OBJ);
     
            print_r($data);
            /*
              $this->id_membre = $data->id;
              $this->email = $data->email;
              $this->civilite = $data->civilite;
              $this->nom = $data->nom;
              $this->prenom = $data->prenom;
              $this->telephone = $data->telephone;
              $this->addresse = $data->adresse;
              $this->suspendu = $data->suspendu;
             * */
        }
     
     
        public function getIdMembre() {
            return $this->id_membre;
        }
     
        public function getEmail() {
            return $this->email;
        }
     
        public function getCivilite() {
            return $this->civilite;
        }
     
        public function getNom() {
            return $this->nom;
        }
     
        public function getPrenom() {
            return $this->prenom;
        }
     
        public function getAdresse() {
            return $this->adresse;
        }
     
        public function getTelephone() {
            return $this->telephone;
        }
     
    }
    ici j'ai utliser 3 fois
    $bdd = Bdd::getIntance();

    on pourrais faire mieux ou c'est pas possible,
    si j'ai 10 méthodes , je me retrouve avec ces 10 lignes ...

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu fais face à un problème d'architecture.
    C'est le serpent qui se mord la queue : Membre.php requiert bdd.php qui lui requiert Membre.php pour pouvoir déserialiser correctement l'instance de cette classe...

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    mon test n'est pas concluant,

    je pense que vais laisser mes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd =Bdd::getInstance();
    ça sera plus simple....

    au début j'avais pas compris que c'est 2 méthode magiques sont pour la sérialisation et désarialisation

    merci encore, cela m'a permis de testé le __wakeup et __sleep.

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour éviter ce genre de problème architectural, les framework utilisent un bootstrap qui permet de poser proprement un environnement d'exécution sans éparpiller tout dans des tas de fichiers.

    Et dans ton cas, quitte à avoir une classe d'accès à la base de données, tu ne devrais pas te préoccuper de Bdd::getInstance(), tu devrais plutôt laisser ceci à la classe Bdd et n'exposer du coup que ce qui t'intéresse : Bdd::select(...) ou encore Bdd::insert(...)...

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    ça serais plus simple pour moi d' utiliser symfony2 mais pour
    mon uv c'est interdit......

    que veux tu dire ?

    ajouter dans ma classe BDD des méthodes supplémentaire ?
    un exemple pour appeller Bdd::select(....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Bdd {
     
        public static function getIntance() {
            try {
                $instance = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
            } catch (PDOException $e) {
                echo 'Erreur : ' . $e->getMessage() . '<br/>';
                echo 'N° : ' . $e->getCode() . '<br/>';
            }
     
    public function select()
        {
     
        }
     
    //..

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    oui quelque chose comme ça. L'idée c'est de factoriser tout le code redondant lié à la requête SQL et présent dans toutes les fonctions où c'est nécessaire.
    Ça facilite grandement la maintenance et la lisibilité.
    D'ailleurs dans ta classe Bdd, tu ne gères pas correctement le Singleton.

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    je dois utiliser plutôt ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
    class Bdd extends PDO {
     
        private static $_instance;
     
        public function __construct() {
                echo "load bdd";
     
        }
     
        public static function getIntance() {
     
            if (!isset(self::$_instance)) {
                try {
                    echo "instance";
                    self::$_instance = new PDO.....);
                } catch (PDOException $e) {
                    echo 'Erreur : ' . $e->getMessage() . '<br/>';
                    echo 'N° : ' . $e->getCode() . '<br/>';
                }
            }
            return self::$_instance;
        }
     
           public function __clone() {
               throw new Exception('Je ne suis un singleton; ne me clonez pas');
           }
    }
     
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pdo = new Bdd();
    $bdd  = get->instance();

  15. #15
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est mieux, par contre je n'étendrais pas PDO, je l'encapsulerais simplement dans la classe Bdd.
    Tu ne vas pas voir besoin de tout ce qu'offre PDO pour faire les requêtes, généralement tu n'utilises que des bribes de cette librairie.
    Après ça se discute.

  16. #16
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    ok merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    class Bdd {
     
        private static $_instance;
     
        public function __construct() {
                echo "load bdd";
     
        }
     
        public static function getIntance() {
     
            if (!isset(self::$_instance)) {
                try {
                    echo "instance";
                    self::$_instance = new PDO.....);
                } catch (PDOException $e) {
                    echo 'Erreur : ' . $e->getMessage() . '<br/>';
                    echo 'N° : ' . $e->getCode() . '<br/>';
                }
            }
            return self::$_instance;
        }
     
           public function __clone() {
               throw new Exception('Je ne suis un singleton; ne me clonez pas');
           }
    }
     
    ?>
    pour chacune de mes pages je devrais alors faire un new Bdd()
    ou comme on appelle toujours la même instance il ne sert à rien de l'appeler
    que cette class est gardé au chaud(grace à l'attribut statique) tant qu'on à pas fait un unset(Bdd) ?
    même après avoir changé de page?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pdo = new Bdd();//1 fois
    $bdd = Bdd::_instance // pour chaque page

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Habituellement on fait plutôt un truc dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class C_PDO 
    {	
    	private static $connexion;
     
    	private function __construct() 
    	{
    		try
    		{
                            //fichier qui contient les variables de connexion ($hostname,$database,$username,$password)
    			require_once('Connections/connect_bdd.php');
     
    			// mode d'erreurs
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    			// Indispensable pour ne pas avoir execute qui formate en string avec un tableau en paramètre  (ce qui est incompatible avec la clause limit)
    			$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
     
    			//charset reconnu dans la connexion à partir de php 5.3.6 auquel cas on peut supprimer l'option MYSQL_ATTR_INIT_COMMAND ci-dessous
    			//$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
     
    			self::$connection  = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);	
    		}
    		catch (PDOException $e)
    		{
    			// message en production
    			//die('Serveur de base de données en dérangement, veuillez réessayer ultérieurement.');
     
    			// message complet en développement
    			echo $e->getMessage();
    		}
    	}
     
    	public static function getC() 
    	{
    		if(self::$connection == NULL) {new C_PDO;}
    		return self::$connection;
    	}	 
    }
    Et donc depuis n'importe où dans ton code il suffit de faire C_PDO::getC(); (la classe s'initialise elle-même la première fois que tu appelle cette fonction)

  18. #18
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    c'est noté

    j'avais oublié que dans mon script j'ai inclus Bdd.php avec require_once.
    donc je peux appelé à tout moment
    Bdd::

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de sessions avec un hébergeur
    Par totoranky dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 02h36
  2. [Sécurité] Probleme de sessions
    Par perco dans le forum Langage
    Réponses: 4
    Dernier message: 05/10/2005, 11h04
  3. [VB.Net] Problème de Session
    Par theartist dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/09/2004, 16h06
  4. Problème de session sous Konqueror
    Par Escuzze dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 06/07/2004, 11h52
  5. [C#] Probleme de session
    Par alexischmit dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/04/2004, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo