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

Fermé
Signaler
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
-
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

Messages postés
34265
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
3 869
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']));


Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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.
Messages postés
446
Date d'inscription
mercredi 5 novembre 2014
Statut
Membre
Dernière intervention
18 octobre 2016
3
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.