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 =)
Citation:
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:
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:
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:
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:
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... :)