Héritage d'une class

Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 6 nov. 2014 à 14:42
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 17 nov. 2014 à 20:22
Bonjour,
Je suis en face d'un soucis de compréhension. Je débute dans la POO et c'est mes 2 premières class en POO alors soyer indulgent à mon égard.
J'ai créé un fichier membre.php
un autre fichier Admin.php
un autre fichier qui me permet d'enregistrer les membres
ça me renvoi ce message d'erreur ça concerne le fichier register.php et je suis presque sur que ça proviens de l'héritage.
Merci beaucoup de votre aide.
 Fatal error: Call to undefined method Membre::insert() in C........

Membre.php
<?php
class Membre {
    //Tous les Attributs (données membres), il s'agit des données représentant l'état de l'objet doivent être en privé.
    private $id_membre;
    private $nom;
    private $prenom;
    private $email;
    private $naissance;
    private $fixe;
    private $mobile;
    private $adresse;
    private $lieu_dit;
    private $code_postal;
    private $ville;
    private $username;
    private $password;

    //variable de connexion
    private static $con;

    //Appel à la connexion
    public function __construct() {
        $db = connexion::getInstance();
        $this->con = $db->getDbh();
    }
###################################################################################################################
    //Les méthodes (parfois appelées fonctions membres), il s'agit des opérations applicables aux objets.
    public function setNom($nom) {
        $this->nom = trim($nom);
    }
    public function setPrenom($prenom) {
        $this->prenom = trim($prenom);
    }    
    public function setEmail($email) {
        $this->email = trim($email);
    }    
    public function setNaissance($naissance) {
        $this->naissance = trim($naissance);
    }       
    public function setFixe($fixe) {
        $this->fixe = trim($fixe);
    }    
    public function setMobile($mobile) {
        $this->mobile = trim($mobile);
    }    
    public function setAdresse($adresse) {
        $this->adresse = trim($adresse);
    }    
    public function setLieuDit($lieu_dit) {
        $this->lieu_dit = trim($lieu_dit);
    }       
    public function setCodePostal($code_postal) {
        $this->code_postal = trim($code_postal);
    }    
    public function setVille($ville) {
        $this->ville = trim($ville);
    }     
    public function setUsername($username) {
        $this->username = trim($username);
    }   
    public function setPassword($password) {
        $this->password = trim($password);
    }
###################################################################################################################
    public function getNom() {
        return $this->nom;
    }   
    public function getPrenom() {
        return $this->prenom;
    }
    public function getEmail() {
        return $this->email;
    }
    public function getNaissance() {
        return $this->naissance;
    }
    public function getFixe() {
        return $this->fixe;
    }
    public function getMobile() {
        return $this->mobile;
    }
    public function getAdresse() {
        return $this->adresse;
    }
    public function getLieuDit() {
        return $this->lieu_dit;
    }
    public function getCodePostal() {
        return $this->code_postal;
    }
    public function getVille() {
        return $this->ville;
    }  
    public function getUsername() {
        return $this->username;
    }
    public function getPassword() {
        return $this->password;
    }
###################################################################################################################
}

Admin.php
<?php
class Admin extends Membre {
    private $actif;
    private $debut;
    private $fin;
###################################################################################################################
    public function setActif($actif) {
        $this->actif = trim($actif);
    }
    public function setDebut($debut) {
        $this->debut = trim($debut);
    }
    public function setFin($fin) {
        $this->fin = trim($fin);
    }
###################################################################################################################
    public function getActif() {
        return $this->actif;
    }
    public function getDebut() {
        return $this->debut;
    }
    public function getFin() {
        return $this->fin;
    }
###################################################################################################################   
    public function insert() {
        $req = self::$db->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, username, password) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :username, :password, :actif, :debut, :fin)');
        $req->bindParam(':nom',             $this->nom,             PDO::PARAM_STR);
        $req->bindParam(':prenom',          $this->prenom,          PDO::PARAM_STR);
        $req->bindParam(':email',           $this->email,           PDO::PARAM_STR);
        $req->bindParam(':naissance',       $this->naissance,       PDO::PARAM_STR);
        $req->bindParam(':fixe',            $this->fixe,            PDO::PARAM_STR);
        $req->bindParam(':mobile',          $this->mobile,          PDO::PARAM_STR);
        $req->bindParam(':adresse',         $this->adresse,         PDO::PARAM_STR);
        $req->bindParam(':lieu_dit',        $this->lieu_dit,        PDO::PARAM_STR);
        $req->bindParam(':code_postal',     $this->code_postal,     PDO::PARAM_STR);
        $req->bindParam(':ville',           $this->ville,           PDO::PARAM_STR);
        $req->bindParam(':username',        $this->username,        PDO::PARAM_STR);
        $req->bindParam(':password',        $this->password,        PDO::PARAM_STR);
        $req->bindParam(':actif',           $this->actif,           PDO::PARAM_STR);
        $req->bindParam(':debut',           $this->debut,           PDO::PARAM_STR);
        $req->bindParam(':fin',             $this->fin,             PDO::PARAM_STR);
        $req->execute();
    }
################################################################################################################### 
}

register.php
<?php

if(!empty($_POST)) {
    $nom = Security::clean($_POST['nom']);
    $prenom = Security::clean($_POST['prenom']);
    $email = Security::clean($_POST['email']);
    $naissance = Security::clean($_POST['naissance_3']) ? trim($_POST['naissance_3']) . '-' .  trim($_POST['naissance_2']) . '-' .  trim($_POST['naissance_1']) : '';
    $fixe = Security::clean($_POST['fixe']);
    $mobile = Security::clean($_POST['mobile']);
    $adresse = Security::clean($_POST['adresse']);
    $lieu_dit = Security::clean($_POST['lieu_dit']);
    $code_postal = Security::clean($_POST['code_postal']);
    $ville = Security::clean($_POST['ville']);
    $username = Security::clean($_POST['username']);
    $password = Security::clean($_POST['password']);
    $actif = $_POST['actif'];
    $debut = Security::clean($_POST['debut']);
    $fin = Security::clean($_POST['fin']);

    if(empty($nom) || empty($prenom) || empty($username) || empty($password) || empty($actif) || empty($debut)) {
    $errors[] = 'Veuillez entrer le Nom, Prénom, Login, le Mot de passe, Actif, Date de Début';
    } else {
        $password = Security::hash($password);
        $user = new Membre();

        $user->setNom($nom);
        $user->setPrenom($prenom);
		$user->setEmail($email);        
        $user->setNaissance($naissance);
        $user->setFixe($fixe);
        $user->setMobile($mobile);
        $user->setAdresse($adresse);
        $user->setLieuDit($lieu_dit);
        $user->setCodePostal($code_postal);
        $user->setVille($ville);
        $user->setUsername($username);
        $user->setPassword($password);
        $user->setActif($actif);
        $user->setDebut($debut);
        $user->setFin($fin);

        $user->insert();

if(preg_match('#(\d{4})-(\d{1,2})-(\d{1,2})#is', $user->getNaissance(), $match)) $date = array( 1 => $match[3], 2 => $match[2], 3 => $match[1] );

        header('Location: index.php?body=register&type=compte');
        exit();
    }
echo output_errors($errors);
}
?>

<div id="content">
	<form id="formulaire" action="" method="post">
        <fieldset>
            <legend>Ajouter un membre</legend>

		<table cellpadding="0" cellspacing="3">

			<tr>
				<th colspan="6">Coordonné :</th>
			</tr>
			<tr>
				<td width="20%">Nom :</td>
				<td width="30%"><input name="nom" class="content_input" size="30" type="text" value=""/></td>
				<td width="20%">Prénom :</td>
				<td width="30%"><input name="prenom" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<td width="20%">Adresse :</td>
				<td width="30%"><input name="adresse" class="content_input" size="30" type="text" value=""/></td>
				<td width="20%">Lieu Dit :</td>
				<td width="30%"><input name="lieu_dit" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<td width="20%">Code Postale :</td>
				<td width="30%"><input name="code_postal" class="content_input" size="30" type="text" value=""/></td>
				<td width="20%">Ville :</td>
				<td width="30%"><input name="ville" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<th colspan="3">Contact :</th>
			</tr>
			<tr>
				<td width="20%"><img src="image/fixe.png" alt="Téléphone fixe" title="Téléphone fixe" height="22" width="22"/> Téléphone fixe :</td>
				<td width="30%"><input name="fixe" class="content_input" size="30" type="text" value=""/></td>
				<td width="20%"><img src="image/mobile.jpg" alt="Téléphone mobile" title="Téléphone mobile" height="22" width="22"/> Téléphone mobile :</td>
				<td width="30%"><input name="mobile" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<td width="20%"><img src="image/mail.png" alt="Email" title="Email" height="22" width="22"/> Adresse mail :</td>
				<td width="30%"><input name="email" class="content_input" size="30" type="text" value=""/></td>
				<td width="20%"></td>
				<td width="30%"></td>
			</tr>
			<tr>
				<th colspan="4">Informations supplémentaires :</th>
			</tr>
			<tr>
				<td width="20%">Date de Naissance :</td>
				<td width="30%" id="naissance" name="naissance">
					<input name="naissance_1" class="content_input" type="text" value="" size="2" maxlength="2"/>
					<input name="naissance_2" class="content_input" type="text" value="" size="2" maxlength="2"/>
					<input name="naissance_3" class="content_input" type="text" value="" size="4" maxlength="4"/>
					jj/mm/aaaa
				</td>
				<td width="20%"><img src="image/login.png" alt="Login" title="Login" height="22" width="22"/> Login :</td>
				<td width="30%"><input name="username" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<td width="20%"></td>
				<td width="30%"></td>
				<td width="20%"><img src="image/password.png" alt="Mot de passe" title="Mot de passe" id="image_pwd" height="22" width="22"/> Mot de passe :</td>
				<td width="30%"><input name="password" class="content_input" size="30" type="text" value=""/></td>
			</tr>
			<tr>
				<td width="20%">Actif :</td>
				<td width="30%"><input name="actif" class="content_input" size="30" type="checkbox"/></td>
				<td width="20%"></td>
				<td width="30%"></td>
			</tr>
			<tr>
				<td width="20%">Début :</td>
				<td width="30%"><input name="debut" class="content_input" size="4" type="text" value=""/></td>
				<td width="20%"></td>
				<td width="30%"></td>
			</tr>  
			<tr>
				<td width="20%">Fin :</td>
				<td width="30%"><input name="fin" class="content_input" size="4" type="text" value=""/></td>
				<td width="20%"></td>
				<td width="30%"></td>
			</tr> 
		</table>

<!--#######################################################################################################################################-->

			<input type="submit" class="submit" value="Enregistrer"/>
        </fieldset>
	</form>
</div>

18 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 6/11/2014 à 16:31
Salut,

Le message d'erreur est explicite : tu appelles la méthode insert() de la classe Membre alors que celle-ci n'existe pas (en effet, la méthode insert() appartient à la classe Admin).

Puisque ta classe Admin hérite de Membre, déplaces la méthode insert() dans la classe Membre, tu pourras ainsi l'appeler depuis la classe Membre et depuis la classe Admin.

Bonne journée
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
6 nov. 2014 à 18:25
Bonjour,
Merci pour ton retour, j'ai bien compris comme dirait l'autre, ça c'est fait.
Ca me retourne un autre message d'erreur.
 Fatal error: Access to undeclared static property: Membre::$db in C.......

Cela concerne la class Membre de la méthode insert.
Je ne comprend pas, je te remercie encore une fois de ton aide.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
7 nov. 2014 à 01:40
Bonjour,
Ce que je ne comprend pas c'est que l'erreur me dit en gros que $db n'existe nul part dans la classe, donc c'est surement mon appel à la connexion qui tourne pas rond, mais je ne vois vraiment pas comment résoudre cela.
Merci de votre aide.
    //variable de connexion
    private static $con;

    //Appel à la connexion
    public function __construct() {
        $db = connexion::getInstance();
        $this->con = $db->getDbh();
    }
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
7 nov. 2014 à 09:32
Ta propriété $con est déclarée statique : https://www.php.net/manual/fr/language.oop5.static.php
On ne peut donc pas y accéder à travers une instance ($this->con) mais seulement à travers la classe elle même (Membre::$con ou self::$con).

    private static $con;

    //Appel à la connexion
    public function __construct() {
        $db = connexion::getInstance();
        self::$con = $db->getDbh();
    }


Attention également dans la méthode insert() tu appel self::$db alors que celle-ci n'existe pas, à corriger en appelant self::$con

Bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
7 nov. 2014 à 16:04
Bonjour
Merci de ton retour pour me venir en aide, maintenant un nouveau message d'erreur me disant que j'appel la fonction prepare sur un non object......
 Fatal error: Call to a member function prepare() on a non-object in C

j'ai essayé de résoudre cela mais je ne vois vraiment pas.
Merci une nouvelle fois de ton aide.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 nov. 2014 à 10:24
Bonjour
Toujours dans l'impasse, s'il te plait un petit coup de main j'ai toujours cette erreur qui me dit.
j'appel la fonction prepare sur un non object......
Fatal error: Call to a member function prepare() on a non-object in C

Merci beaucoup
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
10 nov. 2014 à 11:38
La variable depuis laquelle tu appelles la méthode prepare n'est pas un objet :
- soit tu utilises la mauvaise variable
- soit ta connexion a échouée

Montre nous la ligne qui provoque cette erreur et ton code de connexion.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 10/11/2014 à 11:47
Bonjour
C'est la méthode insert
    public function insert() {
        $req = self::$con->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, username, password) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :username, :password, :actif, :debut, :fin)');
        $req->bindParam(':nom',             $this->nom,             PDO::PARAM_STR);
        $req->bindParam(':prenom',          $this->prenom,          PDO::PARAM_STR);
        $req->bindParam(':email',           $this->email,           PDO::PARAM_STR);
        $req->bindParam(':naissance',       $this->naissance,       PDO::PARAM_STR);
        $req->bindParam(':fixe',            $this->fixe,            PDO::PARAM_STR);
        $req->bindParam(':mobile',          $this->mobile,          PDO::PARAM_STR);
        $req->bindParam(':adresse',         $this->adresse,         PDO::PARAM_STR);
        $req->bindParam(':lieu_dit',        $this->lieu_dit,        PDO::PARAM_STR);
        $req->bindParam(':code_postal',     $this->code_postal,     PDO::PARAM_STR);
        $req->bindParam(':ville',           $this->ville,           PDO::PARAM_STR);
        $req->bindParam(':username',        $this->username,        PDO::PARAM_STR);
        $req->bindParam(':password',        $this->password,        PDO::PARAM_STR);
        $req->bindParam(':actif',           $this->actif,           PDO::PARAM_STR);
        $req->bindParam(':debut',           $this->debut,           PDO::PARAM_STR);
        $req->bindParam(':fin',             $this->fin,             PDO::PARAM_STR);
        $req->execute();
    }

Ma viable de connexion et mon appel à la connexion
    //variable de connexion
    private static $con;

    //Appel à la connexion
    public function __construct() {
        $db = connexion::getInstance();
        $this->con = $db->getDbh();
    }

Tous cela dans le même fichier Membre.php
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 10/11/2014 à 11:50
D'où vient
$db = connexion::getInstance();
?

Comme précisé dans mon précédent message, tu ne peux pas affecter une variable statique via l'instance de la classe :
self::$con = $db->getDbh();
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 10/11/2014 à 14:39
Bonjour
Dans ma class connexion

l'instance de la class connexion
private static $instance;

et les méthodes
Les autres attributs de connexion à ma BDD je ne les ai pas mis afin d'éviter d'alourdir l'envoi.
private static $dbh;

    /*** Lance la connexion à la base de donnée en le mettant * dans un objet PDO qui est stocké dans la variable $dbh * @access private */
    private function __construct() {
        try {
            $this->dbh = new PDO (
                $this->type.':host='.$this->host.'; dbname='.$this->dbname, 
                $this->username, 
                $this->password,
                array(PDO::ATTR_PERSISTENT => true)
            );

                $req = "SET NAMES UTF8";
                $result = $this->dbh->prepare($req);
                $result->execute();
        }
        catch(PDOException $e) {
            echo "<div class='error'>Erreur !: ".$e->getMessage()."</div>";
            die();
        }
    }

    /*** Regarde si un objet connexion a déjà été instancier, * si c'est le cas alors il retourne l'objet déjà existant * sinon il en créer un autre. * @return $instance */
    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    /*** Permet de récuprer l'objet PDO permettant de manipuler la base de donnée * @return $dbh */
    public function getDbh() {
        return $this->dbh;
    }

Merci de ton coup de main avec la connexion je suis faché
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 10/11/2014 à 15:03
Par défaut les erreurs PDO ne sont pas affichées (ERRMODE_SILENT), il faut modifier les options dans le constructeur pour les afficher : https://www.php.net/manual/fr/pdo.error-handling.php

Avec mysql, tu peux également passer la requête "SET NAMES utf8" dans le paramètres PDO::MYSQL_ATTR_INIT_COMMAND.

Essaye de corriger le constructeur de ta classe comme ceci :
private function __construct() {
  try {
    $this->dbh = new PDO (
        $this->type.':host='.$this->host.';dbname='.$this->dbname, 
        $this->username, 
        $this->password,
        array(
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
          )
      );
  }
  catch(PDOException $e) {
    echo "<div class='error'>Erreur !: ".$e->getMessage()."</div>";
    die();
  }
}


Tu devrais alors voir les erreurs sql.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 nov. 2014 à 16:57
Bonjour
Même en modifiant ma class comme tu me l'a suggéré toujours la même erreur.
 Fatal error: Call to a member function prepare() on a non-object in C
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 10/11/2014 à 17:10
Tu as bien modifier $this->con par self::$con dans le constructeur de la classe Membre ?

Sinon essaye d'utiliser uniquement ta classe connexion pour vérifier que celle-ci fonctionne :
<?php
require 'connexion.php'; // chemin vers la classe connexion

$db = connexion::getInstance();

$sql = 'SELECT nom FROM tb_adherent LIMIT 10';
foreach ($db->query($sql) as $row) {
    echo $row[0] . '<br />';
}
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
10 nov. 2014 à 20:30
Alors voilà où j'en suis. Avec la requète que tu m'as fait essayé ça me retourne cette erreur
 Fatal error: Call to undefined method connexion::query() in C:

sinon avec
self::$con
dans le constructeur de la classe Membre
Aucune erreur retournée mais aucun insert dans la BDD
Je suis vraiment perdu perdu..
Merci
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
12 nov. 2014 à 11:35
Effectivement mon dernier code de test contient une erreur car ta classe connexion ne renvoie pas l'instance PDO depuis le constructeur mais via la méthode getDbh(). Donc une fois corrigé tu peux tester ceci pour vérifier que ta classe connexion fonctionne :
<?php
require 'connexion.php'; // chemin vers la classe connexion

$connexion = connexion::getInstance();
$db = $connexion->getDbh();

$sql = 'SELECT nom FROM tb_adherent LIMIT 10';
foreach ($db->query($sql) as $row) {
    echo $row[0] . '<br />';
}


Ajoute ce code à la fin de ta méthode insert pour vérifier si l'insert est bien effectué :
public function insert() {
        $req = self::$con->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, username, password) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :username, :password, :actif, :debut, :fin)');
        $req->bindParam(':nom',             $this->nom,             PDO::PARAM_STR);
        $req->bindParam(':prenom',          $this->prenom,          PDO::PARAM_STR);
        $req->bindParam(':email',           $this->email,           PDO::PARAM_STR);
        $req->bindParam(':naissance',       $this->naissance,       PDO::PARAM_STR);
        $req->bindParam(':fixe',            $this->fixe,            PDO::PARAM_STR);
        $req->bindParam(':mobile',          $this->mobile,          PDO::PARAM_STR);
        $req->bindParam(':adresse',         $this->adresse,         PDO::PARAM_STR);
        $req->bindParam(':lieu_dit',        $this->lieu_dit,        PDO::PARAM_STR);
        $req->bindParam(':code_postal',     $this->code_postal,     PDO::PARAM_STR);
        $req->bindParam(':ville',           $this->ville,           PDO::PARAM_STR);
        $req->bindParam(':username',        $this->username,        PDO::PARAM_STR);
        $req->bindParam(':password',        $this->password,        PDO::PARAM_STR);
        $req->bindParam(':actif',           $this->actif,           PDO::PARAM_STR);
        $req->bindParam(':debut',           $this->debut,           PDO::PARAM_STR);
        $req->bindParam(':fin',             $this->fin,             PDO::PARAM_STR);
        $req->execute();

        echo 'Nombre de ligne insérées : ' . $req->rowCount();
        echo 'Erreurs sql : ' . $req->errorInfo();
    }
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
12 nov. 2014 à 20:24
Bonjour
Merci de m'aider.
Voici maintenant l'erreur retournée
 Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
13 nov. 2014 à 09:12
Donne le message d'erreur complet stp (fichier et n° de la ligne).
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
13 nov. 2014 à 12:29
Bonjour
Voici le message complet, l'erreur ce situe sur la ligne de la requète $sql
J'ai mon fichier class complet
Merci
class Membre {
    private $id_membre;
    private $nom;
    private $prenom;
    private $email;
    private $naissance;
    private $fixe;
    private $mobile;
    private $adresse;
    private $lieu_dit;
    private $code_postal;
    private $ville;
    private $username;
    private $password;

    //variable de connexion
    private static $con;

    //Appel à la connexion
    public function __construct() {
        $connexion = connexion::getInstance();
        $db = $connexion->getDbh();
    }
    
    $sql = 'SELECT nom FROM tb_adherent LIMIT 10';
        foreach ($db->query($sql) as $row) {
        echo $row[0] . '<br />';
    }
public function insert() {
        $req = self::$con->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, username, password) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :username, :password, :actif, :debut, :fin)');
        $req->bindParam(':nom',             $this->nom,             PDO::PARAM_STR);
        $req->bindParam(':prenom',          $this->prenom,          PDO::PARAM_STR);
        $req->bindParam(':email',           $this->email,           PDO::PARAM_STR);
        $req->bindParam(':naissance',       $this->naissance,       PDO::PARAM_STR);
        $req->bindParam(':fixe',            $this->fixe,            PDO::PARAM_STR);
        $req->bindParam(':mobile',          $this->mobile,          PDO::PARAM_STR);
        $req->bindParam(':adresse',         $this->adresse,         PDO::PARAM_STR);
        $req->bindParam(':lieu_dit',        $this->lieu_dit,        PDO::PARAM_STR);
        $req->bindParam(':code_postal',     $this->code_postal,     PDO::PARAM_STR);
        $req->bindParam(':ville',           $this->ville,           PDO::PARAM_STR);
        $req->bindParam(':username',        $this->username,        PDO::PARAM_STR);
        $req->bindParam(':password',        $this->password,        PDO::PARAM_STR);
        $req->bindParam(':actif',           $this->actif,           PDO::PARAM_STR);
        $req->bindParam(':debut',           $this->debut,           PDO::PARAM_STR);
        $req->bindParam(':fin',             $this->fin,             PDO::PARAM_STR);
        $req->execute();

        echo 'Nombre de ligne insérées : ' . $req->rowCount();
        echo 'Erreurs sql : ' . $req->errorInfo();
    }


Je te donne aussi le fichier de ma class connexion
Merci
<?php
class connexion {
    /*** Instance de la classe connexion * @access private * @var connexion * @see getInstance */
    private static $instance;

    /*** Type de la base de donnée. * @access private * @var string * @see __construct */
    private $type = "mysql";

    /*** Adresse du serveur hôte. * @access private * @var string * @see __construct */
    private $host = "localhost";

    /*** Nom de la base de donnée. * @access private * @var string * @see __construct */
    private $dbname = "cliquedecruet7";

    /*** Nom d'utilisateur pour la connexion à la base de données * @access private * @var string * @see __construct */
    private $username = "root";

    /*** Mot de passe pour la connexion à la base de donnée * @access private * @var string * @see __construct */
    private $password = '';

    private static $dbh;

    /*** Lance la connexion à la base de donnée en le mettant * dans un objet PDO qui est stocké dans la variable $dbh * @access private */
    private function __construct() {
        try {
            $this->dbh = new PDO (
                $this->type.':host='.$this->host.'; dbname='.$this->dbname, 
                $this->username, 
                $this->password,
                array(PDO::ATTR_PERSISTENT => true)
            );

                $req = "SET NAMES UTF8";
                $result = $this->dbh->prepare($req);
                $result->execute();
        }
        catch(PDOException $e) {
            echo "<div class='error'>Erreur !: ".$e->getMessage()."</div>";
            die();
        }
    }

    /*** Regarde si un objet connexion a déjà été instancier, * si c'est le cas alors il retourne l'objet déjà existant * sinon il en créer un autre. * @return $instance */
    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    /*** Permet de récuprer l'objet PDO permettant de manipuler la base de donnée * @return $dbh */
    public function getDbh() {
        return $this->dbh;
    }
}
?>
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 13/11/2014 à 14:31
Le code avec la requête select et le foreach était juste un code de test à mettre dans un fichier à part (pour tester la classe connexion).
Ce code ne doit pas apparaitre dans ta classe : supprime la requête et la boucle foreach.

Dans le constructeur de la classe Membre, remplace la ligne
$db = $connexion->getDbh();

par
self::$con = $connexion->getDbh();
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 17/11/2014 à 20:26
Bonjour
J'ai voulu essayer de me débrouiller seul depuis 3 jours mais vraiment je n' compprends plus rien.
ce que j'ai fait
    public function __construct() {
        $db = connexion::getInstance();
self::$con = $connexion->getDbh();

Ca me retourne plusiqurs erreurs
 Notice: Undefined variable: connexion in C
 Fatal error: Call to a member function getDbh() on a non-object in

et cette requète me retourne ça
    $sql = 'SELECT nom FROM tb_adherent LIMIT 10';
        foreach ($db->query($sql) as $row) {
        echo $row[0] . '<br />';
    }

 Fatal error: Call to a member function query() on a non-object in C:..............
 Notice: Undefined variable: connexion in C............................

Je suis vraiment desespéré.
Merci de ton secours
0