Bonjour, je rencontre un probleme lors d'un appel de fonction :

Fatal error: Call to a member function ConnexionSucces() 
on a non-object in Inclusions/Fonctions/Formules.inc.php 
on line 6 

Voilà, le code de ma fonction :

if(isset($_POST['Bouton1'])){
        $B1 = $_POST['Bouton1']; 
        $_SESSION['Bouton1'] = $B1;
}
if($_SERVER['REQUEST_METHOD'] === 'POST' && 
$Utilisateur->ConnexionSucces()){
        if(isset($_POST['Bouton1'])) {
            header('Location: https://google.fr');
        } 
} else{
        if(isset($B1)){
            header('Location: https://google.it');
        }
}

15 réponses


Lartak
Réponse acceptée

À quel moment instancies-tu ta classe Utilisateur ?
Juste pour information, tu peux réduire ton code dans la fonction :

return (isset($_SESSION['UtilisateurSession']);

Au lieu de :

if(isset($_SESSION['UtilisateurSession']))
{
      return true;
}
Lartak
Réponse acceptée

J'ai un peu de mal à te suivre, mais bon.
Dans tous les cas, si l'instanciation de la classe Utilisateur n'est pas effectuée avant que tu utilises une de ses fonctions, ta variable $Utilisateur sera considérée comme une simple variable et non comme un objet de la classe Utilisateur.

Ton objet Utilisateur est apparement une instance de classe. Cette classe devrait contenir une méthode ConnexionSuccès(), qui manifestement manque.

Quel est le code de ta classe ?
Comment instancies-tu $Utilisateur ?

Bonjour.

Peux-tu nous montrer ta fonction ConnexionSucces ?

<?php
class Utilisateur{
    private $bdd;
    function __construct($connexion_BDD)
    {
        $this->bdd = $connexion_BDD;
    }
    public function ConnexionSucces()
    {
        if(isset($_SESSION['UtilisateurSession']))
        {
            return true;
        }
    }
}

OK pour la classe. Par contre, PHP ne sais pas que $Utilisateur est une instance de ta classe Utilisateur. Vérifie l'instanciation.

Arf, ca sert a rien qu'on soit deux dessus :)
Je laisse ce cas Lartak ;)

Le site est en architecture MVC. C'est Dans mon fichier Modeles.php du dossier Modeles.

<?php
try {
    $connexion_BDD = new PDO(MYSQL_DSN, MYSQL_UTILISATEUR, MYSQL_MOTDEPASSE);
    $connexion_BDD->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $connexion_BDD->exec("SET CHARACTER SET utf8");
} catch (PDOException $e) {
    echo 'Erreur ! : ' . $e->getMessage() . '<br/>' . "\n";
}
include_once './Inclusions/Classes/Class.Utilisateur.php';
$Utilisateur = new UTILISATEUR($connexion_BDD);

Donc, le code que tu nous montre dans le contenu de ton sujet est dans un controller et il est dépendant de ton fichier Modeles.php ?

En faites il est dans un fichier de fonction

Inclusions/Fonctions/Formules.inc.php

La fonction s'appele a().
Dans mon controlleur sans l'appel de fonction je met le code brut, ca marche impeccable.
Mais si j'enlève le code brut et appelle la fonction a() qui contient ce code brut, ca m'affiche l'erreure ci-dessus.

<?php
switch ($_REQUEST['Page']) {
    case Boutons:{
        require_once './Vues/BoutonsDebut.php';
        require_once './Inclusions/Fonctions/Formules.inc.php';
        echo a();
        require_once './Vues/BoutonsFin.php';
        break; 
   }
}

Ce que je te demandais, c'est si ton fichier Modeles.php est inclut au niveau de ton fichier Formules.inc.php.
Car il est clair qu'il ne trouve pas la fonction ConnexionSucces, donc l'instance de la classe Utilisateur n'est pas effectuée lorsque tu l'utilise.
Il considère juste Utilisateur comme une variable et non comme une instanciation de la classe Utilisateur.
Selon ton dernier message, le fichier Modeles.php n'est pas inclut avant d'utiliser la fonction ConnexionSuccess.

Non il n'est pas inclus dans le ficher Formules.inc.php mais dans le controleur

c bon j'ai instancié

$Utilisateur = new UTILISATEUR($connexion_BDD);

dans ma fonction a(), il n'ya plus l'erreur, merci BCP xD

De rien, avec plaisir. :)