1. #1
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut Cannot redeclare class/autoloading à partir du post #11

    Bonsoir,

    j'ai le message d'erreur du titre. En m'inspirant de cette vieille discussion (https://www.developpez.net/forums/d1...-seule-classe/), preuve que j'ai déjà eu ce problème, j'ai essayé ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if(!in_array("MyPdo",get_declared_classes())) {
    class MyPdo extends PDO {
    //...déclaration de la classe
    }
    mais l'erreur reste. Donc comment la supprimer ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  2. #2
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Je m'aperçois que je n'ai pas donné de détails. Donc pour créer la variable de connexion, je mets sur chaque page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include_once "../includes/connect_mysql.php";
    où connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    if(empty($bdd)){
    	include_once (__DIR__.'/class_MyPdo.php');
    }
    //// connexion
    try{
    				if(empty($bdd)) $bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    et class_MyPdo.php :

    Code php : 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
    <?php
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
     
    // MyPDO
     // ls : la classe MyPdo hérite de la classe PDO (extends)
     if(!in_array("MyPdo",get_declared_classes())) {
    class MyPdo extends PDO {
     
    	protected $DB_NAME;
     
    	protected $HOST = "---";
     
    	protected $USER ="---";
     
    	protected $PASS ="---";
     
     
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct($db_name) {	
    	/* ls : la variable $pdo_options, ça date de ma formation de 2012 */ 
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	$this->DB_NAME = $db_name;
    	parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options);
     
    	}
    }	
     
    }
    ?>
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    avril 2007
    Messages
    7 906
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 7 906
    Points : 16 061
    Points
    16 061

    Par défaut

    Tu peux essayer avec class_exists.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Merci de la proposition Celira ; néanmoins si je rajoute l'utilisation de cette fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if(!class_exists('MyPdo'))) {
    class MyPdo extends PDO {
    //déclaration de la classe
      }
    }
    page blanche
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  5. #5
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 594
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    5

    Par défaut

    Salut laurentSc

    Pourquoi n'es-tu pas passé au mécanisme d'autoloading ?
    Ce problème ne se serait jamais posé.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  6. #6
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Tu m'as déjà fait la même remarque y a 2,5 ans ! https://www.developpez.net/forums/d1...-seule-classe/. J'avais abandonné n'y arrivant pas.

    Je viens de réessayer :

    Code dans la page principale :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    function my_autoloader($class) {
        include 'includes/class_'.$class.'.php';
    }
     
    spl_autoload_register('my_autoloader');
    ?>
    suppression des include où on définit la classe.
    En gros dans la page connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
     
    	//include_once (__DIR__.'/class_MyPdo.php');
     
    //// connexion
    try{
    				$bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    Mais ce fichier reste inclus là où on a besoin de la base de donnée : include (dirname(__DIR__).'/includes/connect_mysql.php');mais page blanche...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  7. #7
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : mars 2007
    Messages : 513
    Points : 761
    Points
    761

    Par défaut

    Hello,

    quel est le contenu de la page calendar.php ? Celle qui produit l'erreur.

    Tu parle de page blanche, mais tu parles d'une erreur, comment tu peux avoir les deux ?

  8. #8
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Désolé mais pas là de la journée et je viens seulement de voir le message...

    A vrai dire, ce message d'erreur, je ne sais plus ce que c'était, probablement un essai vite supprimé. Pour ne pas porter confusion, j'ai modifié le post #6 et je l'ai supprimé.

    Je m'apprête à créer un fichier de test pour faire marcher cet autoload. Je reviens ici quand ce sera fait.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  9. #9
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 594
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    5

    Par défaut

    Tiens ici une discussion sur le mécanisme d'autoloading des classes.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  10. #10
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Merci, pour demain, si j'ai le temps...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  11. #11
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Bon, j'ai finalement le temps de regarder cette discussion. Voici mes questions.

    Tout d'abord :
    Citation Envoyé par rawsrc Voir le message

    Passer à la POO c'est tip-top.
    Sauf que jreaux62 m'a déconseillé de passer du procédural à la POO car il s'attendait à une montagne de discussions (en gros, je ne serais pas prêt)

    Ensuite, on y parle pas mal des namespace et aussi de use, ce que je ne connais pas du tout ; faut-il s'y mettre ?

    Tu proposes le code d'un autoloader, mais j'ai compris qu'il suppose l'existence dans l'arborescence des répertoires src et Application. Ai-je bien compris ? (je n'ai pas ces répertoires).
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  12. #12
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    12 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 12 366
    Points : 24 839
    Points
    24 839

    Par défaut

    Bonjour Laurent,
    je n'ai pas souvenir d'avoir dit quoi que ce soit là-dessus !

    Moi, je ne connais pas la POO. Trop abstrait pour moi...
    Donc, je ne pourrai pas t'aider en POO.


    Par contre, ce que j'ai pu dire, c'est que tu codes comme un certain savant fou qui crée des MONSTRES !!

    Et je pense que ton problème vient surtout de là : tu colles des bouts de code les uns à la suite des autres, sans grand souci de logique et de cohérence...

    Commence par METTRE de L'ORDRE dans ton code !
    RANGE tes affaires !
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  13. #13
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    https://www.developpez.net/forums/d1...nter-2-champs/

    Citation Envoyé par laurentSc Voir le message
    passer du procédural à la POO
    Citation Envoyé par jreaux62 Voir le message
    OUBLIE TOUT DE SUITE !!


    1/ Comme tu le dis TOUJOURS toi-même : TU N'AS PAS DE TEMPS !

    2/ On ne va pas tout reprendre à zéro avec toi : on n'a pas le temps non plus... ni l'énergie...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  14. #14
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    12 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 12 366
    Points : 24 839
    Points
    24 839

    Par défaut

    OK.
    Le fait est que tu dis sans arrêt : "JE N'AI PAS DE TEMPS"

    Or il faut du temps pour apprendre.
    Et je pense que la POO demande une rigueur que tu n'as pas.
    Mais ça n'engage que moi.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  15. #15
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Bon, je reviens à l'autoload et à la page blanche. J'ai fait un test très basique qui reproduit la page blanche (et en fait, la seule POO est la gestion de PDO et y en a pas d'autre).

    Code php : 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
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <title>squelette</title>
    <?php
     
    //require_once '../includes/testautoloader.php';
    ?>
    <meta charset="UTF-8"/>
     
    </head>
    <body>
    <?php
    function my_autoloader($class) {
        include 'includes/class_'.$class.'.php';
    }
    spl_autoload_register('my_autoloader');
    ?>
     
    <section>
    <article>
    squelette
    <?php
    //testautoloader();
    ?>
    </article>
    </section>
    </body>
    </html>

    testautoloader.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    function  testautoloader()
    {
    	include (dirname(__DIR__).'/includes/connect_mysql.php');
    }
    ?>

    connect_mysql.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      <?php 
     
    	//include_once (__DIR__.'/class_MyPdo.php');
     
    //// connexion
    try{
    				$bdd = new MyPdo("calendar");//("calendar");
      }
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>

    class_MyPdo.php :
    Code php : 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
    <?php
    error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
    ini_set('display_errors','1'); 
    echo "<br/>4 class_My_pdo.php<br/>";
     
     
    // MyPDO
     // ls : la classe MyPdo hérite de la classe PDO (extends)
    class MyPdo extends PDO {
     
    	protected $DB_NAME;
     
    	protected $HOST = "---";
     
    	protected $USER ="---";
     
    	protected $PASS ="---";
     
     
     
    // ls : le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct($db_name) {	
    	/* ls : la variable $pdo_options, ça date de ma formation de 2012 */ 
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	$this->DB_NAME = $db_name;
    	parent::__construct('mysql:host=' . $this->HOST . ';dbname=' . $this->DB_NAME,$this->USER,$this->PASS,$pdo_options);
     
    	}
     
    }
    ?>
    si la ligne 7 du code principal est commentée, ça affiche bien squelette mais si je la décommente, page blanche.

    Il est où le bug ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  16. #16
    Modérateur
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    mars 2004
    Messages
    4 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 4 594
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    5

    Par défaut

    Salut,

    bon, toutes réflexions mises à part, je reviens vers la problématique principale.
    L'autoloader est un mécansime qui permet en gros de transformer des noms de classes en noms de fichiers. Une fois que tu as le nom de fichier pleinement qualifié, tu peux l'inclure automatiquement.
    Quand tu cherches à inclure le code source d'un fichier, soit tu fais un banal include ou require soit tu utilises la programmation orientée objet et dans ce cas tu dois te baser sur des espaces de nom et des classes qui une fois transformés deviendront des chemins de fichier du système d'exploitation (du coup, très faciles à inclure).

    Relis bien attentivement toutes mes explications dans la discussion citée plus haut et tu verras la logique sous-jacente.

    Pour tester un autolaoder, tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use espace_de_nom_a\sous_espace_de_nom_b\MaClasse;
     
    $a = new MaClasse();
    Dans ce code l'autoloader doit se débrouiller tout seul pour trouver le chemin du fichier MaClasse, tu ne dois faire de ton côté aucun include ou require.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  17. #17
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Bon, c'est pas encore au point

    Voilà ce que j'ai cru qu'il fallait faire mais c'est visiblement pas bon, vu que page blanche...

    Voici l'autoloader que j'ai écrit à partir de ton code :

    Code php : 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
    <?php
    $autoloader = function($full_class_name) {
        // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
        $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
        // on construit le chemin complet du fichier à inclure :
        // il faut que l'autoloader soit toujours à la racine du site 
        $path = '..\includes\connect\'.$name.'.php';
     
        // on vérfie que le fichier existe et on l'inclut
        // sinon on passe la main à une autre autoloader (return false)
        if (is_file($path)) {
            include $path;
        } else {
            return false;
        }
    }; 
     
    spl_autoload_register($autoloader);
    ?>
    Le fichier appelé au départ n'est pas à la racine d'où il faut commencer par reculer (ligne 7). Le fichier de connexion (qui utilise la classe MyPdo) est dans le même répertoire que la classe (includes/connect)

    Mon fichier de connexion (connect_mysql.php) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
     
    	//include_once (__DIR__.'/class_MyPdo.php');
    use includes/connect/MyPdo.php;
    //// connexion
    try{
    				$bdd = new MyPdo("calendar");
    catch(PDOException $e){
    				echo "argggggggggggggg".$e->getMessage();
    				return(FALSE);
    			}			
    ?>
    J.
    Je n'ai pas de déclaration de namespace et d'ailleurs si je le faisais, aucune idée où les mettre...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  18. #18
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : mars 2007
    Messages : 513
    Points : 761
    Points
    761

    Par défaut

    Hello,

    si tu n'as pas de déclaration de namespace, enlève le use includes/connect/MyPdo.php;

    Ensuite, pour ta facilité la vie avec les emplacements des fichiers, crée toi une constante qui a comme valeur le répertoire racine de ton application, afin d'éviter les ../ et se sera bien plus lisible ainsi.

    Tu parle de page blanche, as tu activé l'affichage des erreurs ? Cela pourrai grandement t'aider à comprendre ton erreur.

  19. #19
    Membre émérite

    Homme Profil pro
    Webmaster débutant
    Inscrit en
    octobre 2006
    Messages
    6 406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 6 406
    Points : 2 709
    Points
    2 709
    Billets dans le blog
    1

    Par défaut

    Désolé mais pas là de la journée..

    Pour tester ça plus simplement, je l'ai mis sous wampserver alors qu'avant c'était sur le serveur.

    Tout d'abord, j'ai défini une constante ROOT, mais pour accéder au fichier config.php : include_once "../includes/config.php";difficile d'échapper au ../

    Ensuite, j'ai enlevé le use, mais :
    Class 'MyPdo' not found in C:\wamp64\www\vhstest160218\includes\connect\connect_mysql.php on line 7
    donc pas au point du tout. Donc comment faire ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  20. #20
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    12 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 12 366
    Points : 24 839
    Points
    24 839

    Par défaut

    ...difficile d'échapper au ../...
    Je t'ai deja montre 10 fois comment...

    Sans vouloir te vexer...
    Ton problème est que tu oublies, au fur et à mesure, et tu reviens aux mêmes problématiques, encore et encore...
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [1.x] Erreur installation, cannot redeclare class sfDoctrineBaseTask
    Par __fabrice dans le forum Symfony
    Réponses: 13
    Dernier message: 31/05/2010, 13h09
  2. Réponses: 2
    Dernier message: 10/01/2010, 17h39
  3. [Dates] Fatal error : Cannot redeclare class
    Par ediawara dans le forum Fonctions
    Réponses: 10
    Dernier message: 27/11/2007, 14h47
  4. cannot redeclare class maClasse
    Par pcdj dans le forum WAMP
    Réponses: 3
    Dernier message: 10/01/2007, 08h03
  5. Cannot redeclare class...
    Par DeezerD dans le forum Fichiers
    Réponses: 4
    Dernier message: 02/11/2005, 18h51

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