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');
}
}
À 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;
}
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 ?
<?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.
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