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

Langage PHP Discussion :

Fatal error: Call to a member function bindValue() on a non-object


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 34
    Points
    34
    Par défaut Fatal error: Call to a member function bindValue() on a non-object
    Bonsoir,

    J'ai un petit problème qui j'espère, ne le restera pas =)

    Fatal error: Call to a member function bindValue() on a non-object in /home/terafr/www/modeles/membres.php on line 50
    Alors voila la page connexion que j'appelle :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <?php
     
    // Ne pas oublier d'inclure la librairie Form
    include_once CHEMIN_LIB.'form.php';
     
    // "formulaire_connexion" est l'ID unique du formulaire
    $form_connexion = new Form('formulaire_connexion');
     
    $form_connexion->method('POST');
     
    $form_connexion->add('Text', 'nom_utilisateur')
                   ->label("Votre nom d'utilisateur");
     
    $form_connexion->add('Password', 'mot_de_passe')
                   ->label("Votre mot de passe");
     
    // Ajoutons d'abord une case à cocher au formulaire de connexion
    $form_connexion->add('Checkbox', 'connexion_auto')
                   ->label("Connexion automatique");
     
    $form_connexion->add('Submit', 'submit')
                   ->value("Connectez-moi !");
     
    // Pré-remplissage avec les valeurs précédemment entrées (s'il y en a)
    $form_connexion->bound($_POST);
     
    // Création d'un tableau des erreurs
    $erreurs_connexion = array();
     
    // Validation des champs suivant les règles
    if ($form_connexion->is_valid($_POST)) {
     
    	list($nom_utilisateur, $mot_de_passe) =
    		$form_connexion->get_cleaned_data('nom_utilisateur', 'mot_de_passe');
     
    	// On veut utiliser le modèle des membres (~/modules/membres.php)
    	include_once CHEMIN_MODELE.'membres.php';
     
    	// combinaison_connexion_valide() est définit dans ~/modules/membres.php
    	$id_utilisateur = combinaison_connexion_valide($nom_utilisateur, sha1($mot_de_passe));
     
    	// Si les identifiants sont valides
    	if (false !== $id_utilisateur) {
     
    		$infos_utilisateur = lire_infos_utilisateur($id_utilisateur);
     
    		// On enregistre les informations dans la session
    		$_SESSION['id']     = $infos_utilisateur['id'];
    		$_SESSION['pseudo'] = $nom_utilisateur;
    		$_SESSION['avatar'] = $infos_utilisateur['avatar'];
    		$_SESSION['email']  = $infos_utilisateur['adresse_email'];
     
    		// Mise en place des cookies de connexion automatique
    		if (false != $form_connexion->get_cleaned_data('connexion_auto'))
    		{
    			$navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
    			$hash_cookie = sha1('aaa'.$nom_utilisateur.'bbb'.$mot_de_passe.'ccc'.$navigateur.'ddd');
     
    			setcookie( 'id',            $_SESSION['id'], strtotime("+1 year"), '/');
    			setcookie('connexion_auto', $hash_cookie,    strtotime("+1 year"), '/');
    		}
     
     
    		// Affichage de la confirmation de la connexion
    		include_once CHEMIN_VUE.'connexion_ok.php';
     
    	} else {
     
    		$erreurs_connexion[] = "Couple nom d'utilisateur / mot de passe inexistant.";
     
    		// Suppression des cookies de connexion automatique
    		setcookie('id', '');
    		setcookie('connexion_auto', '');
     
    		// On réaffiche le formulaire de connexion
    		include_once CHEMIN_VUE.'formulaire_connexion.php';
    	}
     
    } else {
     
        // On réaffiche le formulaire de connexion
        include_once CHEMIN_VUE.'formulaire_connexion.php';
    }
     
     
    ?>

    Et voici la page membres.php qui génère apparemment l'erreur.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
     
    function valider_compte_avec_hash($hash_validation) {
     
    	$pdo = PDO2::getInstance();
     
    	$requete = $pdo->prepare("UPDATE membres SET
    		hash_validation = ''
    		WHERE
    		hash_validation = :hash_validation");
     
    	$requete->bindValue(':hash_validation', $hash_validation);
     
    	$requete->execute();
     
    	return ($requete->rowCount() == 1);
    }
     
    function combinaison_connexion_valide($nom_utilisateur, $mot_de_passe) {
     
    	$pdo = PDO2::getInstance();
     
    	$requete = $pdo->prepare("SELECT id FROM membres
    		WHERE
    		nom_utilisateur = :nom_utilisateur AND 
    		mot_de_passe = :mot_de_passe AND
    		hash_validation = ''");
     
    	$requete->bindValue(':nom_utilisateur', $nom_utilisateur);
    	$requete->bindValue(':mot_de_passe', $mot_de_passe);
    	$requete->execute();
     
    	if ($result = $requete->fetch(PDO::FETCH_ASSOC)) {
     
    		$requete->closeCursor();
    		return $result['id'];
    	}
    	return false;
    }
     
    function lire_infos_utilisateur($id_utilisateur) {
     
    	$pdo = PDO2::getInstance();
     
    	$requete = $pdo->prepare("SELECT nom_utilisateur, mot_de_passe, adresse_email, avatar, date_inscription, hash_validation
    		FROM membres
    		WHERE
    		id = :id_utilisateur");
     
    	$requete->bindValue(':id_utilisateur', $id_utilisateur);
    	$requete->execute();
     
    	if ($result = $requete->fetch(PDO::FETCH_ASSOC)) {
     
    		$requete->closeCursor();
    		return $result;
    	}
    	return false;
    }
     
     
    ?>

    Sans oublier la libs PDO2 que j'utilise :

    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
    34
    <?php
     
    class PDO2 extends PDO {
     
    	private static $_instance;
     
    	/* Constructeur : héritage public obligatoire par héritage de PDO */
    	public function __construct( ) {
     
    	}
    	// End of PDO2::__construct() */
     
    	/* Singleton */
    	public static function getInstance() {
     
    		if (!isset(self::$_instance)) {
     
    			try {
     
    				self::$_instance = new PDO(SQL_DSN, SQL_USERNAME, SQL_PASSWORD);
     
    			} catch (PDOException $e) {
     
    				echo $e;
    			}
    		} 
    		return self::$_instance; 
    	}
    	// End of PDO2::getInstance() */
    }
     
    // end of file */
     
    ?>

    Et le fichier init.php inclus dans chaque page du site :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
     
    // Inclusion du fichier de configuration (qui définit des constantes)
    include_once 'global/config.php';
     
    // Utilisation et démarrage des sessions
    session_start();
     
     
    // Désactivation des guillemets magiques
    ini_set('magic_quotes_runtime', 0);
    set_magic_quotes_runtime(0);
     
    if (1 == get_magic_quotes_gpc())
    {
    	function remove_magic_quotes_gpc(&$value) {
     
    		$value = stripslashes($value);
    	}
    	array_walk_recursive($_GET, 'remove_magic_quotes_gpc');
    	array_walk_recursive($_POST, 'remove_magic_quotes_gpc');
    	array_walk_recursive($_COOKIE, 'remove_magic_quotes_gpc');
    }
     
    // Inclusion de Pdo2
    include_once CHEMIN_LIB.'pdo2.php';
     
    // Vérifie si l'utilisateur est connecté   
    function utilisateur_est_connecte() {
     
    	return !empty($_SESSION['id']);
    }
     
    // Vérifications pour la connexion automatique
     
    // On a besoin du modèle des membres
    include_once CHEMIN_MODELE.'membres.php';
     
    // Le mec n'est pas connecté mais les cookies sont là, on y va !
    if (!utilisateur_est_connecte() && !empty($_COOKIE['id']) && !empty($_COOKIE['connexion_auto']))
    {
    	$infos_utilisateur = lire_infos_utilisateur($_COOKIE['id']);
     
    	if (false !== $infos_utilisateur)
    	{
    		$navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : '';
    		$hash = sha1('°warpetswazaaa°{['.$infos_utilisateur['nom_utilisateur'].'°warpetswazaaaa°{['.$infos_utilisateur['mot_de_passe'].'°warpetswazaaaaa°{['.$navigateur.'°warpetswazaaaaaa°{[');
     
    		if ($_COOKIE['connexion_auto'] == $hash)
    		{
    			// On enregistre les informations dans la session
    			$_SESSION['id']     = $_COOKIE['id'];
    			$_SESSION['pseudo'] = $infos_utilisateur['nom_utilisateur'];
    			$_SESSION['avatar'] = $infos_utilisateur['avatar'];
    			$_SESSION['email']  = $infos_utilisateur['adresse_email'];
    		}
    	}
    }
     
     
    ?>

    Je vous remercie d'avance pour votre aide, je galère depuis plusieurs la...

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tes constantes SQL_DSN, SQL_USERNAME, SQL_PASSWORD sont bien définies quelque part ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    Oui oui, dans le fichier config.php, situé dans le même dossier que init.php

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est à toi de debugger un peu plus :
    - que vaut $pdo avant que tu fasses le bindvalue ?
    - si rien, que se passe t'il dans la fonction getIsntance()
    - etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    En fait j'ai pris un script sur internet. Je vais coder le mien moi-même. Au moins, je serais exactement ce qu'il fait

Discussions similaires

  1. [ZF 1.0] Fatal error: Call to a member function getOrder() on a non-object
    Par absot dans le forum Zend_Form
    Réponses: 0
    Dernier message: 19/05/2010, 01h24
  2. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par blopjerem dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 10h53
  3. Réponses: 4
    Dernier message: 07/10/2009, 11h53
  4. Réponses: 4
    Dernier message: 02/10/2009, 10h12
  5. [PDO] Fatal error: Call to a member function setFetchMode() on a non-object in
    Par tores20 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/07/2009, 23h04

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