Fatal error: Using $this when not in object context in C...

Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - Modifié par papyclic le 1/12/2014 à 17:22
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 2 déc. 2014 à 08:49
Bonjour,

Je suis en train de m'initier à la POO, j'ai construit la connexion à ma BDD, ensuite une class qui sert à enregistrer les membres et j'ai cette erreur je crois comprendre pourquoi mais je n'arrive pas à le résoudre, peut-être que $this n'est pas définit dans un objet?
Pouvez-vous me donner quelques explication qui pourrais m'être utile s'ils vous plait.
En vous remerciant.
L'erreur à la ligne 5
 Fatal error: Using $this when not in object context in C

ma class Inscription
class Inscription {
 
 public function enregistrer() {

  $req = $this->db->prepare('SELECT COUNT(pseudo) AS nbre_pseudo FROM tb_adherent WHERE pseudo = ?');
  $req->execute(array($_POST['pseudo']));
  $result = $req->fetch();

  if(empty($_POST['nom']) OR empty($_POST['prenom']) OR empty($_POST['pseudo']) OR empty($_POST['password']) OR empty($_POST['debut'])) {
   header('Location: index.php?error=empty');
   
  } else if($result['nbre_pseudo'] > 0) {
    header('Location: index.php?error=pseudo_exist');
    
  } else {
   $req->closeCursor();
   
   $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']);
   $pseudo  = Security::clean($_POST['pseudo']);
   $password  = Security::clean(Security::hash($_POST['password']));
   $actif   = $_POST['actif'];
   $debut   = Security::clean($_POST['debut']);
   $fin   = Security::clean($_POST['fin']);
   
   $req = $this->db->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, pseudo, password, actif, debut, fin) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :pseudo, :password, :actif, :debut, :fin)');
   $req->execute(array(
    'nom'    => $nom,
    'prenom'   => $prenom,
    'email'   => $email,
    'naissance'  => $naissance,
    'fixe'    => $fixe,
    'mobile'   => $mobile,
    'adresse'   => $adresse,
    'lieu_dit'   => $lieu_dit,
    'code_postal'  => $code_postal,
    'ville'   => $ville,
    'pseudo'   => $pseudo,
    'password'   => $password,
    'actif'   => $actif,
    'debut'   => $debut,
    'fin'    => $fin
    //$resultat -> bindParam(':pseudo', $identifiant);
   ));
   $req->closeCursor();
   
   header('Location: index.php?info=enregistrer');
  }
 }
}

ma class Db et mon constructeur
class Db {
 
 private $db;
 
 public function __construct() {
  $this->db = new Connection();
  $this->db = $this->db->connect();
 }
}

mon formulaire
inscription.php
<?php
if(isset($_POST['send'])) {
 extract($_POST);
 echo Inscription::enregistrer();
 
 if(isset($_GET['error']) AND $_GET['error'] = 'empty') {
  echo 'Veuillez remplir correctement le formulaire';
 }
}
?>
<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="pseudo" 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="hidden" name="send"/>
   <input type="submit" class="submit" value="Enregistrer"/>
        </fieldset>
 </form>
</div>



3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
1 déc. 2014 à 18:35
Bonjour,

Tu utilises $this->db dans ta class ... sauf que this fait référence à La classe où tu te trouves... et que dedans.. il n'existe pas de db...

Je pense que tu as oublié de mettre un EXTEND vers ta class DB.
Et qu'ensuite, au lieu d'utiliser this .. il faudrait utiliser Parent::

class Inscription extends Db{
 
 public function enregistrer() {

  $req = parent::db->prepare('SELECT COUNT(pseudo) AS nbre_pseudo FROM tb_adherent WHERE pseudo = ?');
  $req->execute(array($_POST['pseudo']));


0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
1 déc. 2014 à 20:16
Bonjour
Merci de ta réponse, malheureusement j'ai essayé comme tu me l'a dit mais ça me retourne une nouvelle erreur
 Parse error: syntax error, unexpected T_OBJECT_OPERATOR in C...

class Inscription extends Db{
 public function enregistrer() {
  $req = parent::db->prepare('SELECT COUNT(pseudo) AS nbre_pseudo FROM tb_adherent WHERE pseudo = ?');
  $req->execute(array($_POST['pseudo']));

en plus j'ai suivi pas mal de tutos vidéos et je ne comprends pas cette connexion qui ne veux pas fonctionner.
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
2 déc. 2014 à 08:49
Bonjour
J'ai rajouté le $ à db, " $req = parent::db->prepare
maintenant j'ai un autre message d'erreur
  Fatal error: Cannot access private property Db::$db in C.....

Merci si tu peux m'aider s'il te plait.
0