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...