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


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
Auteur

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;
}
}
?>

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
Auteur

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();
}
?>

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

hdfs99
Auteur

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