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 :

Parse error: syntax error, unexpected '[', expecting ',' or ';'


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut Parse error: syntax error, unexpected '[', expecting ',' or ';'
    Bonjour à tous,

    Je cherche a créer ma première class. Je définis donc mes attributs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class myMySQLi
    {
        // Attributs
        private $database;
     
        //
        // Méthodes
        //
        public function __construct($database['host'], $database['login'], $database['password'], $database['name'])    
        {
            $this->database['host'] = $database['host'];
            $this->database['login'] = $database['login']
            $this->database['password'] = $database['password'];
            $this->database['name'] = $database['name'];

    PHP me retourne cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error:  syntax error, unexpected '[', expecting ')' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\class_myMySQLi\class_myMySQLi.php on line 35
    la ligne 35 correspondant à public function __construct. Je suis passé par la FAQ ici et ici avant de vous solliciter mais je n'ai pas trouvé mon bonheur.

    Merci d'avance pour votre aide

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    les attributs de fonction doivent être des simples variables comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        public function __construct($host, $login, $password, $name)

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Merci mathieu.

    j'ai donc modifier un peu mon code :

    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
    class myMySQLi
    {
        // Attributs
        private $database;
     
        $database['host'] = $hostname;
        $database['port'] = $port;
        $database['name'] = $name;
        $database['tableprefix'] = $tableprefix;
        $database['login'] = $login;
        $database['password'] = $password;
     
        public function __construct($hostname, $login, $password, $name)
        {
            $this->hostname = $hostname;
            $this->login = $login;
            $this->password = $password;
            $this->name = $name;
    J'ai une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error:  syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\class_myMySQLi\class_myMySQLi.php on line 21
    Il me semble avoir lu qu'on pouvait utiliser les tableaux dans une class, non ?

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    salut, un point virgule manque
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $this->database['host'] = $database['host'];
            $this->database['login'] = $database['login']
            $this->database['password'] = $database['password'];
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par thes32 Voir le message
    salut, un point virgule manque
    Code php :
    $this->database['host'] = $database['host'];
    $this->database['login'] = $database['login'] $this->database['password'] = $database['password'];
    Bien vu

  6. #6
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Bon j'avance un peu, avec ce code ça fonctionne sauf que les variables sont en dur dans la class.

    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
    class myMySQLi
    {
        // Attributs
        private $database = array(
            'host' => '',
            'port' => '',
            'name' => '',
            'tableprefix' => '',
            'login' => '',
            'password' => ''
        );
        //
        // Constantes
        //
     
        //
        // Méthodes
        //
        public function __construct()
        {
            $this->database['host'];
            $this->database['login'];
            $this->database['password'];
            $this->database['name'];
     
            $mysqli = new mysqli($this->database['host'], $this->database['login'], $this->database['password'], $this->database['name']);
            if (mysqli_connect_errno()) {
                printf("Echec de la connexion: %s\n", mysqli_connect_error());
                exit();
            }
     
        }

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Tu pourrais aussi juste stocker la connexion à la base comme attribut. En effet, une fois que tu es connecté, les infos de connexion sont inutiles, non ?

    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 myMySQLi
    {
        // Attributs
        private $_cnx;
        //
        // Constantes
        //
     
        //
        // Méthodes
        //
        public function __construct($host, $login, $password, $name)
        {
            $mysqli = new mysqli($host, $login, $password, $name);
            if (mysqli_connect_errno()) {
                $msg = sprintf("Echec de la connexion: %s\n", mysqli_connect_error());
                throw new Exception ($msg);
            }
            else
                $this->_cnx = $mysqli;
     
        }
    }
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Bonjour s.n.a.f.u,

    Tu as raison . Par contre je ne comprend pas à quoi sert le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            else
                $this->_cnx = $mysqli;
    Ma classe est toujours en cour de création. Voici les dernières modifications :

    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
    class myMySQLi extends mysqli
    {
        // Attributs
        // public : l'attribut accessible depuis l'extérieur de la classe;
        // private:
        // protected :
        private $database = array(
            'host' => 'localhost',
            'port' => '3306',
            'name' => '',
            'tableprefix' => '',
            'login' => '',
            'password' => ''
        );
     
        private $connexion;
        //
        // Constantes
        //    une constante doit être déclarée et initialisée avec sa valeur en même temps.
     
        //
        // Méthodes
        //    Obligatoirement public car appelée depuis l'extérieur de la classe. Appelé lorsqu'on instacie la class par new MySQLi()
        public function __construct()
        {
            /*=============== DEBUG ===============*\
            print 'Class: '. __CLASS__ .'<br />';
            print 'Methode : '. __METHOD__ .'<br />';
            /*=======================================*/
            $this->connexion = parent::__construct($this->database['host'], $this->database['login'], $this->database['password'], $this->database['name']);
            if (phpversion() > '5.3.0')
            {
                /*
                 * Ceci est le style POO "officiel"
                 * MAIS $connect_error était erroné jusqu'en PHP 5.2.9 et 5.3.0.
                 */
                if ($mysqli->connect_error) {
                    die('Erreur de connexion (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
                }
            }
            else
            {
                /*
                 * Utilisez cette syntaxe de $connect_error si vous devez assurer
                 * la compatibilité avec les versions de PHP avant 5.2.9 et 5.3.0.
                 */
                if (mysqli_connect_error())
                {
                    die(mysqli_connect_error());
                }        
            }
        }
        //
        //
        //
        public function __destruct()
        {
            print '__destuct()';
        }
        //
        //
        //
        public function query()
        {
            print '$connexion->query()<br />';
        }
        //
        // Fonction à implémenter plus tard
        //
        public function hostinfo()
        {
            print '$connexion->hostinfo()<br />';
            printf('Version du serveur : %s', mysqli_get_server_info($this->connexion));
     
            printf('Version de la bibliothèque cliente : %s', mysqli_get_client_info($this->connexion));
        }
    }
    Je reste ouvert à toute critique

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    La variable $mysqli semble être une ressource de connexion, donc c'est bien celle-là qu'il faut stocker à mon avis.
    Et puisque tu es en train de creuser et que tu es curieux, je pense que c'est aussi le bon moment de s'intéresser à PDO : http://fr.php.net/manual/fr/book.pdo.php
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  10. #10
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    merci s.n.a.f.u, je vais suivre le lien

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/02/2011, 17h32
  2. Réponses: 5
    Dernier message: 22/09/2010, 12h04
  3. Réponses: 5
    Dernier message: 05/04/2009, 00h07
  4. Réponses: 3
    Dernier message: 27/12/2008, 11h17
  5. Réponses: 2
    Dernier message: 26/06/2007, 23h49

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