Fatal error

papyclic Messages postés 451 Statut Membre -  
papyclic Messages postés 451 Statut Membre -
Bonjour,
J'appelle la fonction prepare sur un non object.......
de ma méthode NewPass.
Fatal error: Call to a member function prepare() on a non-object in C:

Mais étant débutant je ne vois pas comment faire pour résoudre cela, pouvez-vous m'aider s'ils vous plait.
Merci beaucoup
	public static function NewPass($id_adherent, $passActuel, $newPassUn, $newPassDe) {
		if(!empty($passActuel) AND !empty($newPassUn) AND !empty($newPassDe)) {
			if($newPassUn === $newPassDe) {
                $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id_adherent = :id_adherent');
				$req->bindParam(':id_adherent', $id_adherent, PDO::PARAM_INT);
				$req->execute();
				$donnees = $req -> fetch(PDO::FETCH_ASSOC);

				if($donnees['password'] === Security::hash($passActuel)) {
					$newPass = Security::hash($newPassUn);
                    $req = self::$db->prepare('UPDATE tb_adherent SET password = :newPass WHERE id_adherent = :id_adherent');
                    $req -> bindParam(':newPass', $newPass);
                    $req->bindParam(':id_adherent', $id_adherent, PDO::PARAM_INT);

					if($req -> execute()) {
						$resultat = 'Votre mot de passe a été changé avec succés.';
					} else {
						$resultat = '<span class="error-info">Une erreur est survenue pendant la mise à jour de votre mot de passe.</span>';
					}
				} else {
					$resultat = '<span class="error-info">Vous n\'avez pas saisi correctement votre mot de passe actuel,<br />veuillez recommencer.</span>';
				}
			} else {
				$resultat = '<span class="error-info">Les champs "Votre nouveau mot de passe" et "Confirmer Nouveau Mot de passe" doivent être identiques,<br />veuillez recommencer.</span>';
			}
		} else {
			$resultat = '<span class="error-info">Pour changer de mot de passe vous devez remplir tout les champs,<br />veuillez recommencer.</span>';
		}
        return $resultat;
	}

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonsoir,

    Tu pourrais mettre la fonction _construct de ta class et nous indiquer si tu fais un EXTEND de PDO ?
    0
  2. papyclic Messages postés 451 Statut Membre 3
     
    Bonjour
    Voici ma class
    class Database extends PDO {
    
        public function __construct() {
    
            try {
                parent::__construct('mysql:host=' . Config::HOTE . ';dbname=' . Config::DBNAME, Config::USERNAME, Config::PASSWORD);
    
                $this->exec("SET CHARACTER SET utf8");
                $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
                $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    
            } catch(Exception $e) {
                echo 'Impossible de se connecter à la base de donnée</br>';
                echo 'Erreur : ' .  $e->getMessage() . '<br />';
                echo 'N° : ' .      $e->getCode();
            }
        }
    }
    

    Merci
    0
  3. papyclic Messages postés 451 Statut Membre 3
     
    Dans ma class User
        private static $db;
    
        public function __construct($id_adherent = null) {
            self::init();
    
            if(is_int($id_adherent)) {
                try {
                $this->load($id_adherent);
                }
                catch(Exception $e) {
                throw $e;
                }
            }
        }
    
        public function init() {
            if(self::$db == null) self::$db = new Database();
        }
    
        private function load($id_adherent) {
            $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id_adherent = :id_adherent');
            $req->bindParam(':id_adherent', $id_adherent, PDO::PARAM_INT);
            $req->execute();
            $donnees = $req->fetch(PDO::FETCH_ASSOC);
    
            if(empty($donnees)) throw new Exception('Utilisateur introuvable');
            $this->setUserDatas($donnees);
        }
    

    je me demande si je ne dois pas appeler la fonction init comme ceci
    public static function NewPass($id_adherent, $passActuel, $newPassUn, {
    $newPassDe) 
    {
    self::init();
    $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username');
    
    0