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

PHP & Base de données Discussion :

$this-> db-> lastInsertId() [PDO]


Sujet :

PHP & Base de données

  1. #1
    valkheim
    Invité(e)
    Par défaut $this-> db-> lastInsertId()
    Bonjour, comme le titre l'indique, j'ai un souci quand j'essaye d'utiliser lastInsertId :

    Fatal error: Uncaught Error: Call to undefined method Database::lastInsertId() in \class\DatabaseAuth.php on line 19
    Error: Call to undefined method Database::lastInsertId() in \class\DatabaseAuth.php on line 19
    Je fais le traitement d'une inscription sur un site. Voici la classe qui pose souci : DatabaseAuth.php :

    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
    <?php
    class DatabaseAuth {
     
    	private $db;
     
    	public function __construct($db) {
    		$this->db = $db;
    	}
     
    	public function register($username, $password, $email) {
    			$pass = password_hash($password, PASSWORD_BCRYPT);
    			$token = Str::random(60);
    			$this->db->query("INSERT INTO users SET pseudo = ?, password = ?, email = ?, registration_date = now(), confirmation_token = ?", [
    				$username,
    				$password,
    				$email,
    				$token
    			]);
    			$user_id = $this->db->lastInsertId();
    			mail($email, 'Confirmation de compte', "Cliquez ici :\n\n http://localhost/kayo/confirm.php?id=$user_id&token=$token");
    	}
    }
    Voici là ou je fais le traitement du formulaire : register.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$db = App::getDatabase();
     
    ...
     
    		$auth = new DatabaseAuth($db);
    	        $auth->register($_POST['username'], $_POST['password'], $_POST['email']);
    Et voici ma classe App si ça peut aider :

    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
    <?php
    class App {
     
    	static $db = null;
     
    	static function getDatabase() {
    		if (!self::$db) {
    			self::$db = new Database('this', 'is', 'mine');
    		}
    		return self::$db;
    	}
     
    	static function redirect($location) {
    		header("Location: $location");
    		exit();
    	}
     
    }

    J'ai l'impression que l'erreur est toute simple et pourtant j'arrive pas à mettre le doigt dessus :/ Merci par avance pour votre aide.
    Dernière modification par rawsrc ; 09/06/2016 à 08h54. Motif: Balises [quote][/quote] pour les messages d'erreur

  2. #2
    Membre chevronné
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Par défaut
    Bonjour,

    Le message d'erreur [Call to undefined method Database::lastInsertId()] est explicite: vous tentez d'accéder à une méthode qui n'existe pas dans la classe Database.

    lastInsertId() appartient à la classe PDO. Votre classe Database étend-elle PDO ou implémente-t-elle une méthode lastInsertId() (ce qui n'est apparrement pas le cas) ?

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce que la méthode existe dans ta classe Database ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    valkheim
    Invité(e)
    Par défaut
    Oui, la méthode existe dans ma classe Database.
    Voici ma classe :
    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
    <?php
    class Database {
     
    	private $pdo;
     
    	public function __construct($login, $password, $database_name, $host = 'localhost') {
    		$this->pdo = new PDO("mysql:dbname=$database_name;host=$host", $login, $password);
    		$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    	}
     
     
     /**
     * @param $query
     * @param bool|array $params
     * @return PDOStatement
     */
    	public function query($query, $params = false) {
    		if ($params) {
    			$req = $this->pdo->prepare($query);
    			$req->execute($params);
    		} else {
    			$req = $this->pdo->query($query);
    		}
    		return $req;
    	}
     
    	public function lastIndertId() {
    		return $this->pdo->lastInsertId();
    	}
     
    }
    ?>

    Oh wait ?! erreur de frappe. sur le nom de la méthode ><

  5. #5
    valkheim
    Invité(e)
    Par défaut
    Citation Envoyé par valaendra Voir le message
    Bonjour,

    Le message d'erreur [Call to undefined method Database::lastInsertId()] est explicite: vous tentez d'accéder à une méthode qui n'existe pas dans la classe Database.

    lastInsertId() appartient à la classe PDO. Votre classe Database étend-elle PDO ou implémente-t-elle une méthode lastInsertId() (ce qui n'est apparrement pas le cas) ?
    Comment pourrais-je étendre PDO avec ma classe ? Qu'entendez vous par là ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as écris "lastIndertId"

    Concernant l'extension d'une classe existante :
    http://php.net/manual/fr/keyword.extends.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. This.value au lieu de document.getElementById('field').value
    Par yoyot dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/03/2005, 14h02
  2. [MFC] Pointeur this et fonctions statiques
    Par Yellowmat dans le forum MFC
    Réponses: 5
    Dernier message: 08/02/2005, 10h15
  3. pb de fonction simple (this.form.submit()..)
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/01/2005, 09h29
  4. type de this
    Par julie29 dans le forum C++
    Réponses: 4
    Dernier message: 30/11/2004, 20h39
  5. [Oracle 9i] Erreur: wrong incarnation of this file
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 5
    Dernier message: 26/11/2004, 10h53

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