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 :

Portée de variable


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut Portée de variable
    Bonsoir,

    Mon problème est le suivant :
    J'ai un fichier de fonctions qui nécessitent une connexion a une BD, donc ayant développé un fichier externe de configuration de connexion, je veux l'utiliser, cependant la variable ne peut 'rentrer' dans les fonctions.
    Pour être plus clair voici les codes :
    fichier de connexion BD : configSQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    define('USER', 'root');
    define('PASS','');
    define('DSN','mysql:host=localhost;dbname=cid');
    try {
      global $dbh;
      $dbh = new PDO(DSN, USER, PASS);
    } catch (PDOException $e) {
      print "Erreur ! : " . $e->getMessage(). "<br/>";
      die();
    }
    ?>
    Je précise que dans d'autres fichiers (sans fonctions), ce fichier marche très bien, je réutilise la variable $dbh.
    Fichier de fonctions :
    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
    <?php
      include_once('configSQL.php');
    function getPassword($utilisateur) {
     
      $uid = addslashes($utilisateur);  
      $requete = "SELECT password FROM utilisateurs WHERE uid='$uid'";
      $sth = $dbh->query($requete);
      $result = $sth->fetchAll(PDO::FETCH_ASSOC);
      if($result==null) { return false;}
      else { foreach($result as $row) { return $row['password'];}
      }
    }
     
    function setPassword($utilisateur, $pass) {
      $uid = addslashes( $utilisateur );
      $pass = addslashes( $pass );
      $requete = "INSERT INTO utilisateurs (uid, password) VALUES ('$uid' ,'$pass')";
      $dbh->exec($requete);
    }
    ?>
    L'erreur génére me dit que la variable $dbh n'est pas déclaré, une solution est de mettre le include à l'intérieur de la fonction, ce qui fonctionne, mais si je fais pareil pour la deuxième fonction, cela ne marche plus car si j'ai déja appelé la première fonction, le $dbh est déja défini et dans l'autre sens..Vous voyez le problème?? N'hésitez a me poser des question pour des précisions.
    Si quelqu'un à une idée ou une solution, merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 327
    Points : 15 670
    Points
    15 670
    Par défaut
    tu peux utiliser un attribut statique pour ça :
    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
    class BDD
    {
        public static function connexion()
        {
            if (!isset(self::$connexion)) {
     
                define('USER', 'root');
                define('PASS','');
                define('DSN','mysql:host=localhost;dbname=cid');
     
                try {
                    self::$connexion = new PDO(DSN, USER, PASS);
                } catch (PDOException $e) {
                    print "Erreur ! : " . $e->getMessage(). "<br/>";
                    die();
                }
            }
     
            return self::$connexion;
        }
     
        private static $connexion;
    }
    et ensuite tu l'utilises comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getPassword($utilisateur) {
     
      $uid = addslashes($utilisateur);  
      $requete = "SELECT password FROM utilisateurs WHERE uid='$uid'";
      $sth = BDD::connexion()->query($requete);
      $result = $sth->fetchAll(PDO::FETCH_ASSOC);
      if($result==null) { return false;}
      else { foreach($result as $row) { return $row['password'];}
      }
    }

  3. #3
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut
    Merci beaucoup mathieu, cela résout exactement mon problème, il faut avouer que j'ai du mal a me faire au php5 objet, mais sa va venir lol, j'ai fait du java en plus.
    En tout cas, merci encore d'avori répondu aussi vite un samedi soir
    Bon dimanche

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

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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