Bonsoir,
J'ai un petit problème qui j'espère, ne le restera pas =)
Alors voila la page connexion que j'appelle :Fatal error: Call to a member function bindValue() on a non-object in /home/terafr/www/modeles/membres.php on line 50
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...
Partager