Probleme d'appel d'une fonction

Par hdfs99, il y a 8 ans


Bonjour tt le monde,

j'ai un probleme quand j'appelle ma fonction

Voici mon code

<?php include'page2.php'; class etudiantmanager{ private $pdo; private $st; public function __construct(){ $this->pdo=new pdo('mysql:host=localhost;dbname=class','root',''); } public function create(etudiant $etudiant){ $this->st=$this->pdo->prepare('insert into etudiant(id,nom,note)values(:id,:nom,:note)'); $this->st->bindvalue(':id',$etudiant->getid(),pdo::param_int); $this->st->bindvalue(':nom',$etudiant->getnom(),pdo::param_str); $this->st->bindvalue(':note',$etudiant->getnote(),pdo::param_int); $exe=$this->st->execute(); } } $etudiant=new etudiant(); $etudiant->setid($_POST['id']) ->setnom($_POST['nom']) ->setnote($_POST['note']); $manager=new etudiantmanager(); $cre=$manager->create($etudiant); ?>

je voudrais ajouter un etudiant avec la fonction create.

Je comprend pas pourquoi quand j'appelle ma fonction il me donne cette erreur :Call to a member function setnom() on a non-object in C:\wamp\www\issam\page3.php on line 20.
j'ai déjà crée ma classe étudiant dans la page qui s'appelle page2.php avec trois attribut avec les getters et les setters pour chaque attribut.
Et merci d'avance pour vos réponse.

6 réponses

Carouge10, il y a 8 ans

Bonsoir,
Il nous faudrait le code class etudiant

Je te déconseilles d'appeller tes pages, page1, page2... mais plus par le nom de classe, ça sera plus facile pour t'y retrouver

hdfs99, il y a 8 ans

merci Carouge10
voila la classe etudiant

<?php class etudiant{ private $id; private $nom; private $note; public function setid($id){ $this->id=$id; } public function getid(){ return $this->id; } public function setnom($nom){ $this->nom=$nom; } public function getnom(){ return $this->nom; } public function setnote($note){ $this->note=$note; } public function getnote(){ return $this->note; } } ?>
Lartak, il y a 8 ans

Bonjour.
Tu cherches à chaîner les méthodes alors que ta classe n'est pas prévue pour ça, actuellement, tu ne peux faire que de cette manière :

$etudiant=new etudiant(); $etudiant->setid($_POST['id']); $etudiant->setnom($_POST['nom']); $etudiant->setnote($_POST['note']); /* Et non : */ $etudiant=new etudiant(); $etudiant->setid($_POST['id']) ->setnom($_POST['nom']) ->setnote($_POST['note']);

Par contre, un petit conseil au passage, pour améliorer la lisibité de tes méthodes et la compréhension pour ceux qui peuvent être mener à lire le code de ta classse, tu devrais utiliser le Camel Case, exemple :

class Etudiant { /* Ici une majuscule en début du nom de classe */ /* tes propriétés */ public function setNom($nom) { /* donc, setNom au lieu de setnom */ $this->nom = $nom; } public function getNom() { /* getNom au lieu de getnom */ return $this->nom; } }

Ce n'est bien sur qu'un conseil que je te donne, après tu en tient compte ou non.

hdfs99, il y a 8 ans

merci lartak.
mais j'ai un autre problème au niveau de lire tt les enregistrement

voila ma fonction :

public function readall(){ $this->st-=$this->pdo->query('select * from etudiant'); $ets =array(); while($et=$this->st->fetch()){ $ets[]=$et; } return $ets; }

et voila l'appel de la fonction il me donnee la meme erreur:

Notice: Object of class PDOStatement could not be converted to int in C:\wamp\www\issam\page3.php on line 18

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\issam\page3.php on line 20.

voila l'appel de la fonction:

<?php include'page3.php'; $manager=new etudiantmanager(); $ca=$manager->readall(); foreach($ca as $c){ $c->getid(); $c->getnom(); $c->getnote(); } ?>
Carouge10, il y a 8 ans

Regarde bien la 2ème ligne de ton code, tu as fait une petite erreur.

hdfs99, il y a 8 ans

merci carouge10 j'ai pas fais attention mais quand j'appelle ma fonction il me donnee getid non object comme la dernière fois