Appel de fonctions en PHP

Par salimbenfarhat, il y a 10 ans


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

Vallyan, il y a 10 ans

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 ?

Lartak, il y a 10 ans

Bonjour.

Peux-tu nous montrer ta fonction ConnexionSucces ?

salimbenfarhat, il y a 10 ans
<?php class Utilisateur{ private $bdd; function __construct($connexion_BDD) { $this->bdd = $connexion_BDD; } public function ConnexionSucces() { if(isset($_SESSION['UtilisateurSession'])) { return true; } } }
Lartak, il y a 10 ans

À 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; }
Vallyan, il y a 10 ans

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

Vallyan, il y a 10 ans

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

salimbenfarhat, il y a 10 ans

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);
Lartak, il y a 10 ans

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 ?

salimbenfarhat, il y a 10 ans

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.

salimbenfarhat, il y a 10 ans
<?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; } }
Lartak, il y a 10 ans

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.

salimbenfarhat, il y a 10 ans

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

Lartak, il y a 10 ans

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.

salimbenfarhat, il y a 10 ans

c bon j'ai instancié

$Utilisateur = new UTILISATEUR($connexion_BDD);

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

Lartak, il y a 10 ans

De rien, avec plaisir. :)