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 :

classe de connexion pas trouvée


Sujet :

PHP & Base de données

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut classe de connexion pas trouvée
    Bonjour,
    Je pars d'un script faisant N fois la même connexion à la BDD. C'est pas bon car ça pose un gros risque d'erreur de saisie et de plus, on va avoir N connexions au lieu d'une seule.
    J'avais en tête un script de connexion "statique" de ABCIWEB. Une petite recherche m'a donné ce lien : https://www.developpez.net/forums/d2...sse-connexion/. J'ai donc créé une classe :
    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
    <?php
    namespace marion;
    // Pour enregistrer le $_POST en session et éviter de re saisir tous les champs en cas d'erreur de saisie
    session_start();
     
    // Classe de connexion
    class C_PDO
    {
        private static $connexion;
     
        private static function newC_PDO()
        {
            // VARIABLES A REMPLACER
            $hostname = 'localhost';
            $database = "users";
            $username = 'root';
            $password = 'root';
     
     
            // Options de configuration PDO utilisées dans les exemples
     
            $pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_ASSOC; // gestion des erreurs liées au fetch
            $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  // gestion des exceptions
     
     
            self::$connexion  = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);
        }
     
        public static function getC()
        {
            if(self::$connexion == NULL) {self::newC_PDO();}
            return self::$connexion;
        }
    }
    Le script ne comporte pas de namespace. J'en ai donc rajouté un (ligne 2).
    Ensuite, pour l'utiliser dans mon code, je place en début de fichier
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    declare (strict_types=1);
     
    use marion\C_PDO;
    ...
    puis plus bas pour l'utiliser dans une fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function addUserData(string $prenom, string $nom, string $adresse, string $cp, string $ville, string $telephone, string $email, string $password): bool {
        $database = C_PDO::getC();
    ...
    Mais
    Fatal error: Uncaught Error: Class "marion\C_PDO" not found in C:\projets\arnaudmarionmvc\users.php on line 41
    Quelle est la raison, SVP ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    j'ai fini par régler le problème grâce à plusieurs choses :

    1- d'abord (ça, j'avais donné l'info) il fallait que le fichier contenant le code de la classe porte le nom de celle-ci, donc C_PDO.php au lieu de Connexion.php.

    2- j'ai l'habitude la présence d'un autoloader mais là, y en a pas, donc j'ai du inclure la classe : include "C_PDO.php";.

    3- dans C_PDO.php, je mettais le nom de la table (y en a une seule dans cette base), au lieu du nom de la base ; donc $database = 'marionmvc';.

    4- Pour utiliser PDO, la base a besoin de le connaître : use PDO;.

    Et voilà

  3. #3
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 433
    Par défaut
    Bonjour,

    Sans chargement automatique des classes il faut en effet utiliser require/include pour chaque fichier requis.
    Pour l'autoload il faut utiliser la fonction spl_autoload_register() ou plus simplement avec l'autoload de Composer en suivant le standard PSR-4.

    Un exemple simple avec Composer : https://github.com/tecg-dcs/pwcs-composer-autoload
    Tu peux aussi revoir le squelette de projet proposé par grunk : https://www.developpez.net/forums/d2...te-projet-php/

    Dans un espace de noms, à la place du use PDO; tu peux aussi utiliser \ pour revenir à l'espace global (\PDO::ATTR_ERRMODE exemple).

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/10/2009, 20h58
  2. Classe principale pas trouvée par java webstart
    Par JCD21 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/04/2009, 17h33
  3. Problème de classes définies mais pas trouvées par g++
    Par Michaël dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 22/07/2007, 18h45
  4. [Débutant] fichier .class pas trouvé par tomcat!!!
    Par oussam dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/03/2006, 15h31
  5. Réponses: 4
    Dernier message: 15/01/2004, 22h53

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