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

PHP & Base de données Discussion :

Connexion à une base de données [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut Connexion à une base de données
    Bonjour,

    sur chaque page de mon site, j'appelle a l'aide de require_once un fichier qui contient des elements essentiels pour le site, et dans ce fichier j'appelle un autre fichier database.php qui permet d'etablir une connexion a ma base de donnée. voici a quoi ressemble mon fichier database.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
    $db_port = 3306; // Default port for MySQL
    $db_host = "...";
    $db_name = "...";
    $db_user = "...";
    $db_pwd = "...";
     
    try {
    	$dbh = new PDO("mysql:host=$db_host;port=$db_port;dbname=$db_name", $db_user, $db_pwd);
    	$dbh->query("SET NAMES utf8");
    }
     
    catch(Exception $e) {
    	echo "Error, please try again later";
    	...
    	exit();
    }
    est ce que c'est la meilleure facon de le faire ou devrais plutot mettre ce code dans une fonction?
    je pose cette question car j'aimerais etablir une connection a ma bdd pour effectuer une requette dans une fonction que je cree mais j'y arrive pas. avez-vous une solution??

    Merci bien

    juste pour info, j'ai oublié de le preciser.
    pour l'instant quand je veux faire une requete dans une fonction, je suis obligé d'appeler la fonction de cette maniere: function($val1, $val2, $dbh); c'est $dbh qui me permet de me connecter a la bdd, mais est ce correct et propre?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Tout dépend de l'ampleur de ton projet. Ta solution peut suffire si tu te fixes pour règle de ne jamais utiliser $dbh par ailleurs.

    $dbh est une variable qui ne sera pas accessible dans tes fonctions, à moins de la passer en paramètre ou de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function my_function( )
    {
        global $dbh ;
        // ...
    }
    Perso je préfère faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $GLOBALS['MonApplication']['DB'] = new PDO(...) ;
    Un peu de lecture :
    http://fr.php.net/manual/fr/language...bles.scope.php
    http://fr.php.net/manual/fr/reserved...es.globals.php

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Le 1er aspect dont tu n'as pas évoqué, qui est pourtant essentiel c'est le coté sécurité.
    Définir ses paramètres de connexions dans une variables, ou alors dans la super globale $_GLOBAL, pourquoi pas, mais si ce fichier se situe dans le virtualhost, il y aura toujours un risque qu'une personne/pirate parvienne ne serait-ce à lire le contenu du fichier.

    Ce fichier serait donc à placer en dehors du virtualhost, qui en général correspond au répertoire www.
    Après, tout dépend du type d'hébergement qu'on a, mutualisé, dédié, mais admettons un mutualisé, créer un répertoire en dehors qui rassemblerait toutes les configs confidentielles comme l'accès à la Bdd, divers chemins du serveur pour lire écrire des fichier, accès Ftp, son ou ces adresses e-mail, ... etc ..., peut être fort utile.

    Du genre :
    user_root_user/www/ -> Tous les fichier du site principal accessible via HTTP
    user_root_user/mes_configs/ -> Non accessible via HTTP, donc plus sécurisé


    Mise à part cette parenthèse, une autre solution assez courante il me semble c'est de définir des constantes, car elle ont aussi l'avantage d'être accessible n'importe où dans le code, une constante à aussi une portée globale, et peut être le petit plus, c'est qu'une constante (comme son nom l'indique) ne peut être redéfinie, modifiée, sa valeur reste la même.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    define('DB_HOST', 'le_host_mysql');
    define('DB_USERNAME', 'le_nom');
    define('DB_PASS', 'le_mot_de_passe');
    define('DB_NAME', 'nom_de_la_base'); // On peu en avoir plusieurs ici
    NB : Par convention d'écriture, les noms des constantes se font en majuscules.

    Dans son script de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USERNAME, DB_PASS);
    Ceci dit, si on sait par avance que toutes les connexions seront faites obligatoirement en incluant (include) le fichier de connexion database.php, et qu'on aura jamais besoin de leur valeur ailleurs, on peu très bien ne rien définir du tout.
    Il suffit de placer le database.php en dehors du www, mettre "en dur" les configs dans la chaine de connexion, ça revient au même.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Merci pour vos reponses.
    $dbh est une variable qui ne sera pas accessible dans tes fonctions, à moins de la passer en paramètre ou de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function my_function( )
    {
        global $dbh ;
        // ...
    }
    pour l'instant je transmets $dbh en parametre de fonction mais ca fait pas tres propre. j'avais pensé a mettre global $dbh; dans la fonction mais je ne sais plus ou j'ai lu que par mesure de securité il vaut mieux eviter les variables global.
    le confirmez vous?

    @RunCodePhp:
    je suis bien conscient des trou de securité que represente de mettre le fichier de connexion ds le dossier www, mais je l'ai mis dans un dossier qui contient un .htaccess avec cette ligne: Deny from all
    ca devrait bien proteger...

    donc, ca ne sert a rien de mettre le code de connexion dans une fonction? le mettre dans un fichier est suffisant??

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    je suis bien conscient des trou de securité que represente de mettre le fichier de connexion ds le dossier www, mais je l'ai mis dans un dossier qui contient un .htaccess avec cette ligne: Deny from all
    ca devrait bien proteger...
    Ca devrait oui, mais ça reste néanmoins théorique.


    Un autre cas pour exemple : Mettre en place un htaccess avec htpasswd sur apache
    Et il est dit ceci entre autre :
    Ne le mettez pas dans un répertoire qui fait partie du site mais placez-le plutôt en dehors de cette arborescence si vous en avez la possibilité. Dans le système d’exploitation Unix/Linux, tous les fichiers dont le nom commence par un point sont des fichiers cachés. (ls -lah pour les voir)
    Pourtant, ici il est bien précisé que tout fichiers commençant par un . (point) est déjà protégé par le système, ce qui n'est pas le cas d'un fichier database.php.
    Encore mieux, le mot de passe dans le .htpasswd est crypté, ce qui n'est pas le cas pour le mot de passe de ta Bdd dans le database.php.
    Pourtant, donc par mesure de sécurité la gars conseil de ne pas le mettre dans cet espace publique qu'est le www.

    Autre exemple encore qui à mon sens est plus connu, c'est pour les fichiers de sessions.
    Pour les hébergements mutualisés, et si on gère les session dans des fichiers, par défaut donc, ils sont placés dans un répertoire "tmp", qui est généralement communs à tous les sites hébergés sur ce même serveur mutualisés.
    Et bien par mesure de sécurité il est conseillé de les placer dans son espace d'hébergement.
    Mais encore, il est conseillé de les placer en dehors de l'espace publique, toujours par mesure de sécurité.


    Maintenant, il est évident que c'est à toi de voir, mais on dira ce qu'on voudra, mettre un mot de passe dans un espace qui par définition est publique, est contraire à toute logique.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    le mot de passe dans le .htpasswd est crypté, ce qui n'est pas le cas pour le mot de passe de ta Bdd dans le database.php.
    n'y a t il pas un moyen de crypter le mot de passe de la bdd dans le fichier .php?

    en parlant de cryptage de mot de passe. quelle est la meilleure facon de crypter les mot de passes des clients? j'utilisait avant md5 mais il parait que c'est devenu un peu obsolete. sha1 n'est pas tres securisé non plus!!
    faut il alors utiliser la combinaison de mdr(sha1()) ??

    par rapport aux variable global dans une fonction, est ce vraiment mauvais comme je l'ai lu dans certains forum??

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

Discussions similaires

  1. Pool de connexion à une base de données en java
    Par ppaul127 dans le forum JDBC
    Réponses: 3
    Dernier message: 15/12/2005, 17h03
  2. Réponses: 1
    Dernier message: 25/09/2005, 16h18
  3. ERREUR DE CONNEXION à une base de donnée ACCESS protégée
    Par unionriton dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2005, 09h35
  4. Delphi Connexion à une base de donnée distante par TCP/IP
    Par viecel dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/01/2005, 19h19
  5. Réponses: 3
    Dernier message: 29/03/2004, 18h02

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