Programmation Orienté Objet
Résolu/Fermé
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
-
25 oct. 2014 à 18:59
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 7 nov. 2014 à 06:26
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 7 nov. 2014 à 06:26
Bonjour,
Je débute en POO et je souhaiterai pouvoir afficher tous les membres, pouvez vous m'aider un peu en me donnant quelques explications un peu détaillé s'ils vous plait.
J'ai ma class User, avec quelques méthodes, le systéme de connexion est fait j'affiche les infos du membre connecté comme ceux-ci.
Et pour afficher tous les membres vous pouvez me donner quelques explications, car je nage malgrès beaucoup de lecture de tutos sur le sujet, mais en ayant des exemple concret j'y verrai plus clair.
En vous remerciant beaucoup.
Je débute en POO et je souhaiterai pouvoir afficher tous les membres, pouvez vous m'aider un peu en me donnant quelques explications un peu détaillé s'ils vous plait.
J'ai ma class User, avec quelques méthodes, le systéme de connexion est fait j'affiche les infos du membre connecté comme ceux-ci.
<td><?php echo $user->getNom(); ?></td>
Et pour afficher tous les membres vous pouvez me donner quelques explications, car je nage malgrès beaucoup de lecture de tutos sur le sujet, mais en ayant des exemple concret j'y verrai plus clair.
En vous remerciant beaucoup.
A voir également:
- Programmation Orienté Objet
- Vente entre particulier objet - Guide
- Application de programmation - Guide
- Objet interdit en cabine ryanair - Guide
- Identifier un objet à partir d'une photo - Guide
- Mesurer un objet - Guide
47 réponses
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
Modifié par totodunet le 26/10/2014 à 14:35
Modifié par totodunet le 26/10/2014 à 14:35
j'aurais plutôt récupérer toutes les données d'un coup puis ensuite parcourir la table
méfies toi, $donnees n'etait pas un objet de la class User mais un tableau associatif et donc tu ne pouvait pas y appeler des méthodes.
si tu veux que PDO te renvoie un objet de la classe User tu peux faire ça :
$donnees=$req->fetchObject('User');
après ça reste une solution parmi d'autres
Qui ne tente rien n'a rien
$donnees=$req->fetchAll(PDO::FETCH_ASSOC);
for(i=0;i<count($donnees);i++){
echo '<tr>';
echo '<td><'.$donnees[i]['nom'].'></td>';
echo '<td><'.$donnees[i]['prenom'].'></td>';
echo '<td><'.$donnees[i]['email'].'></td>';
echo '</tr>';
}
méfies toi, $donnees n'etait pas un objet de la class User mais un tableau associatif et donc tu ne pouvait pas y appeler des méthodes.
si tu veux que PDO te renvoie un objet de la classe User tu peux faire ça :
$donnees=$req->fetchObject('User');
après ça reste une solution parmi d'autres
Qui ne tente rien n'a rien
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
25 oct. 2014 à 23:28
25 oct. 2014 à 23:28
salut
je ne connais pas la structure de ta classe mais ce que tu veux là ça sent la boucle for. tu veux parcourir un à un les utilisateurs et les afficher. le tout étant de savoir où et dans quoi sont stockés tes utilisateurs
je ne connais pas la structure de ta classe mais ce que tu veux là ça sent la boucle for. tu veux parcourir un à un les utilisateurs et les afficher. le tout étant de savoir où et dans quoi sont stockés tes utilisateurs
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
26 oct. 2014 à 00:00
26 oct. 2014 à 00:00
Bonjour
En fait j'ai ma class User
ensuite j'ai mon fichiet listeMembre ou je souhaite afficher tous les membres
j'ai fait j'ai essayé de faire ça peux tu me dire comment je pourrais faire.
Merci beaucoup
.
En fait j'ai ma class User
class User { private $id; private $nom; private $prenom; private $email; private $username; private $password; private $hash; private static $db; public function __construct($id = null) { self::init(); //is_int -- Détermine si une variable est de type nombre entier if(is_int($id)) { try { $this->load($id); } catch(Exception $e) { throw $e; } } } public function init() { if(self::$db == null) self::$db = new Database(); } private function load($id) { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id = :id'); $req->bindParam(':id', $id, PDO::PARAM_INT); $req->execute(); $d = $req->fetch(PDO::FETCH_ASSOC); if(empty($d)) throw new Exception('Utilisateur introuvable'); $this->setUserDatas($d); } public function setNom($nom) { $this->nom = trim($nom); } public function getNom() { return $this->nom; } public function setPrenom($prenom) { $this->prenom = trim($prenom); } public function getPrenom() { return $this->prenom; } public function setEmail($e) { $this->email = trim($e); } public function getEmail() { return $this->email; } public function setUsername($u) { $this->username = trim($u); } public function getUsername() { return $this->username; } public function setPassword($p) { $this->password = trim($p); } public function getPassword() { return $this->password; } public function setHash($h) { $this->hash = $h; } private function setUserDatas($d) { if(!empty($d) && is_array($d)) { $this->id = $d['id']; $this->nom = $d['nom']; $this->prenom = $d['prenom']; $this->email = $d['email']; $this->username = $d['username']; $this->password = $d['password']; } } public function checkHash($hash) { return $this->hash == $hash; } public static function get($username) { self::init(); $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :u'); $req->bindParam(':u', $username, PDO::PARAM_STR); $req->execute(); $id = $req->fetchColumn(); return ($id) ? new self((int) $id) : null; } public static function exists($username) { self::init(); $username = trim($username); $req = self::$db->prepare('SELECT COUNT(*) FROM tb_adherent WHERE username = :user'); $req->bindParam(':user', $username, PDO::PARAM_STR); $req->execute(); $count = $req->fetchColumn(); return ($count == 0) ? false : true; } public function login() { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE username = :u AND password = :p'); $req->bindParam(':u', $this->username, PDO::PARAM_STR); $req->bindParam(':p', $this->password, PDO::PARAM_STR); $req->execute(); $d = $req->fetch(PDO::FETCH_ASSOC); $this->setUserDatas($d); return (!empty($d)); } public function save() { $req = self::$db->prepare('INSERT INTO tb_adherent (nom, prenom, email, username, password) VALUES (:nom, :prenom, :e, :u, :p)'); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':e', $this->email, PDO::PARAM_STR); $req->bindParam(':u', $this->username, PDO::PARAM_STR); $req->bindParam(':p', $this->password, PDO::PARAM_STR); $req->execute(); $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :u'); $req->bindParam(':u', $this->username, PDO::PARAM_STR); $req->execute(); $this->id = $req->fetchColumn(); } public function update() { $req = self::$db->prepare('UPDATE tb_adherent SET nom = :nom, prenom = :prenom, username = :u, email = :e, password = :p WHERE id = :id'); $req->bindParam(':id', $this->id, PDO::PARAM_INT); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':e', $this->email, PDO::PARAM_STR); $req->bindParam(':u', $this->username, PDO::PARAM_STR); $req->bindParam(':p', $this->password, PDO::PARAM_STR); $req->execute(); } }
ensuite j'ai mon fichiet listeMembre ou je souhaite afficher tous les membres
j'ai fait j'ai essayé de faire ça peux tu me dire comment je pourrais faire.
Merci beaucoup
.
<div id="ListeMembre"> <table id="user_list" cellpadding="0" cellspacing="1"> <tr> <th width="30%">Nom</th> <th width="30%">Prénom</th> <th width="40%">Email</th> </tr> <?php while($donnees = $req -> fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $donnees->nom; ?></td> <td><?php echo $donnees->prenom; ?></td> <td><?php echo $donnees->email; ?></td> </tr> <?php } ?> </table> </div>
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
26 oct. 2014 à 17:51
26 oct. 2014 à 17:51
Bonjour
Déjà merci pour ton aide.
Malheureusement ça ne fonctionne pas.
Alors voilà j'ai créé une méthod dans la class User. A partir de mon fichier Membre j'aurai souhaité appelé cette méthod pour afficher les membres.
Ma fonction est-elle correct, ensuite pour l'appel à cette fonction je voyais un truc du genre...
Merci vraiment de ton aide
Déjà merci pour ton aide.
Malheureusement ça ne fonctionne pas.
Alors voilà j'ai créé une méthod dans la class User. A partir de mon fichier Membre j'aurai souhaité appelé cette méthod pour afficher les membres.
Ma fonction est-elle correct, ensuite pour l'appel à cette fonction je voyais un truc du genre...
$d = new User(); $d->ListeMembre($id);
public function ListeMembre($id) { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id = :id'); $req->bindParam(':id', $id, PDO::PARAM_INT); $req->execute(); while($d = $req -> fetch(PDO::FETCH_ASSOC)) { $this->nom = $d['nom']; $this->prenom = $d['prenom']; $this->email = $d['email']; $this->fixe = $d['fixe']; $this->mobile = $d['mobile']; } }
Merci vraiment de ton aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
Modifié par totodunet le 26/10/2014 à 19:22
Modifié par totodunet le 26/10/2014 à 19:22
oui ça ne marche pas car j'ai omis de mettre les $ derrière ma variable i
ton truc pourrait marcher mais l'inconvénient et de devoir justement utiliser un objet pour afficher d'autres objets de sa même instance. La preuve, tu as créer un objet User uniquement pour pouvoir afficher la liste. ou bien tu fais une fonction dite "statique" dans la classe User, comme ça tu n'a pas à utiliser d'objet et tu l'appelle directement par :
User::ListeMember($id);
mais ce que tu venais de faire tout au début était très bien aussi. tu as juste à remplacer dans ton while
par
et aussi que tu accèdes aux attributs par tes getters que tu as créé dans ta classe (sinon ils servent à rien^^) car tu ne peux pas accéder directement à l'attribut nom par exemple en faisant :
car nom est private
il faut faire
Qui ne tente rien n'a rien
for($i=0;$i<count($donnees);$i++){
echo "<tr>";
echo "<td><".$donnees[$i]['nom']."></td>";
echo "<td><".$donnees[$i]['prenom']."></td>";
...
ton truc pourrait marcher mais l'inconvénient et de devoir justement utiliser un objet pour afficher d'autres objets de sa même instance. La preuve, tu as créer un objet User uniquement pour pouvoir afficher la liste. ou bien tu fais une fonction dite "statique" dans la classe User, comme ça tu n'a pas à utiliser d'objet et tu l'appelle directement par :
User::ListeMember($id);
mais ce que tu venais de faire tout au début était très bien aussi. tu as juste à remplacer dans ton while
while($donnees = $req -> fetch(PDO::FETCH_ASSOC))
par
while($donnees = $req -> fetchObject('User'))
et aussi que tu accèdes aux attributs par tes getters que tu as créé dans ta classe (sinon ils servent à rien^^) car tu ne peux pas accéder directement à l'attribut nom par exemple en faisant :
$donnees->nom
car nom est private
il faut faire
$donnees->getNom()
Qui ne tente rien n'a rien
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
26 oct. 2014 à 23:19
26 oct. 2014 à 23:19
Bonjour
voici ce que j'ai fait et me retourne des erreurs
ma méthod dans la page class
mon appel à cette fonction est dans mon fichier ListeMembre.php
Merci pour tes explications et bien entendu ton aide, parce que je commence à comprendre certaines choses mais pour le mettre en pratique c'est une autre histoire.
voici ce que j'ai fait et me retourne des erreurs
ma méthod dans la page class
public static function ListeMembre($id) { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id = :id'); $req->bindParam(':id', $id, PDO::PARAM_INT); $req->execute(); while($d = $req -> fetchObject('User')) { $this->id = $d['id']; $this->nom = $d['nom']; $this->prenom = $d['prenom']; $this->email = $d['email']; $this->fixe = $d['fixe']; $this->mobile = $d['mobile']; } }
mon appel à cette fonction est dans mon fichier ListeMembre.php
<?php User::ListeMember($id); ?> <tr> <td><?php echo $d->getNom(); ?></td> <td><?php echo $d->getPrenom(); ?></td> <td><?php echo $d->getEmail(); ?></td> </tr>
Merci pour tes explications et bien entendu ton aide, parce que je commence à comprendre certaines choses mais pour le mettre en pratique c'est une autre histoire.
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
26 oct. 2014 à 23:59
26 oct. 2014 à 23:59
ce que je te propose si tu tiens à ta fonction ListeMember :
puis tu appelles ta fonction dans ta page :
au fait c'est quoi l'attribut id, parce que si c'est un numéro unique pour chaque instance, il est normal qu'il y aura qu'une ligne au résultat
public static function ListeMembre($id) {
$req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id = :id');
$req->bindParam(':id', $id, PDO::PARAM_INT);
$req->execute();
while($d = $req -> fetchObject('User')) {
echo '<tr>';
echo '<td>'.$d->getNom().'</td>';
echo '<td>'.$d->getPrenom().'</td>';
echo '<td>'.$d->getEmail().'</td>';
echo '</tr>';
}
}
puis tu appelles ta fonction dans ta page :
<?php User::ListeMember($id);?>
au fait c'est quoi l'attribut id, parce que si c'est un numéro unique pour chaque instance, il est normal qu'il y aura qu'une ligne au résultat
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 oct. 2014 à 13:51
27 oct. 2014 à 13:51
Bonjour,
youpi super ça marche un très grand merci.
Je ne sais pas si c'est une des meilleures façon mais ça fonctionne comme ça.
appel de la fonction
Merci
youpi super ça marche un très grand merci.
Je ne sais pas si c'est une des meilleures façon mais ça fonctionne comme ça.
public static function ListeMembre() { $req = self::$db->prepare('SELECT * FROM tb_adherent'); $req->bindParam(':id', $id, PDO::PARAM_INT); $req->execute(); while($d = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$d->getNom().'</td>'; echo '<td>'.$d->getPrenom().'</td>'; echo '<td>'.$d->getEmail().'</td>'; echo '</tr>'; } }
appel de la fonction
<div id="ListeMembre"> <table id="user_list" cellpadding="0" cellspacing="1"> <tr> <th width="30%">Nom</th> <th width="30%">Prénom</th> <th width="40%">Email</th> </tr> <?php $d = new User(); User::ListeMembre(); ?> </table> </div>
Merci
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
27 oct. 2014 à 14:15
27 oct. 2014 à 14:15
salut,
c'est très bien. pour simplifier tu peux enlever la ligne inutile
$req->bindParam car tu te fiches de l'id dans ta requête sql
et pourquoi tu crées un nouvel objet User d ? Le principe de la fonction statique c'est que justement tu n'a pas à créer d'objet pour l'utiliser. On appelle ça une méthode de classe.
c'est très bien. pour simplifier tu peux enlever la ligne inutile
$req->bindParam car tu te fiches de l'id dans ta requête sql
et pourquoi tu crées un nouvel objet User d ? Le principe de la fonction statique c'est que justement tu n'a pas à créer d'objet pour l'utiliser. On appelle ça une méthode de classe.
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 oct. 2014 à 17:57
27 oct. 2014 à 17:57
Bonjour
Peux tu me donner un peu des explications afin d'éviter de créer le nouvel objet ça serai vraiment mieux. J'ai regardé quelques tutos j'ai du mal à saisir les explications données.
Merci
Peux tu me donner un peu des explications afin d'éviter de créer le nouvel objet ça serai vraiment mieux. J'ai regardé quelques tutos j'ai du mal à saisir les explications données.
Merci
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
27 oct. 2014 à 19:40
27 oct. 2014 à 19:40
en gros tu enlèves juste la ligne
tu vois que $d tu ne vas pas l'utiliser après.
quelques explications :
getNom() par exemple est une méthode dans ta classe qui a pour but de renvoyer le nom de l'objet. Seulement pour renvoyer le nom de l'objet, il faut qu'il ait l'objet en question donc :
c'est une méthode qui n'ait pas statique car elle lui faut un objet pour qu'elle puisse fonctionner (normal^^)
Maintenant ta fonction ListeMembre() elle est statique. Elle est déclarée dans ta classe User, c'est un outil qu'offre ta classe. Son rôle est d'effectuer une requête SQL et de renvoyer toutes les informations des objets User stockés dans ta BDD. Seulement elle à la différence de getNom(), elle n'a pas besoin d'objet. c'est pas une méthode intrinsèque à l'objet. Elle reste toutefois définie dans ta classe, c'est une méthode de classe. D'ailleurs elle peut accéder directement aux attributs sans faire appel aux getters. donc ceci reste valable :
je t'avais dit d'utiliser des getters dans le cas du tout début où tu avais fait une boucle while extérieure à ta classe.
est-ce claire ou c'est un peu flou ?
n'hésites pas si tu as des remarques et questions, c'est un plaisir de répondre.
$d=new User();
tu vois que $d tu ne vas pas l'utiliser après.
quelques explications :
getNom() par exemple est une méthode dans ta classe qui a pour but de renvoyer le nom de l'objet. Seulement pour renvoyer le nom de l'objet, il faut qu'il ait l'objet en question donc :
$d->getNom();
c'est une méthode qui n'ait pas statique car elle lui faut un objet pour qu'elle puisse fonctionner (normal^^)
Maintenant ta fonction ListeMembre() elle est statique. Elle est déclarée dans ta classe User, c'est un outil qu'offre ta classe. Son rôle est d'effectuer une requête SQL et de renvoyer toutes les informations des objets User stockés dans ta BDD. Seulement elle à la différence de getNom(), elle n'a pas besoin d'objet. c'est pas une méthode intrinsèque à l'objet. Elle reste toutefois définie dans ta classe, c'est une méthode de classe. D'ailleurs elle peut accéder directement aux attributs sans faire appel aux getters. donc ceci reste valable :
public static function ListeMembre() { $req = self::$[/contents/372-fichier-db db]->prepare('[/contents/1068-sql-commande-select SELECT] * FROM tb_adherent'); $req->execute(); while($d = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$d->nom.'</td>'; echo '<td>'.$d->prenom.'</td>'; echo '<td>'.$d->email.'</td>'; echo '</tr>'; } }
je t'avais dit d'utiliser des getters dans le cas du tout début où tu avais fait une boucle while extérieure à ta classe.
est-ce claire ou c'est un peu flou ?
n'hésites pas si tu as des remarques et questions, c'est un plaisir de répondre.
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 oct. 2014 à 20:07
27 oct. 2014 à 20:07
Bonjour
Tes explications sont nettement très clair quelques petits soucis néanmoins pour la compréhension de cette ligne déjà...
Ensuite j'ai une erreur
Tes explications sont nettement très clair quelques petits soucis néanmoins pour la compréhension de cette ligne déjà...
$req = self::$[/contents/372-fichier-db db]->prepare('[/contents/1068-sql-commande-select SELECT] * FROM tb_adherent');
Ensuite j'ai une erreur
Parse error: syntax error, unexpected '[', expecting T_VARIABLE or '$' in C..
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
27 oct. 2014 à 21:07
27 oct. 2014 à 21:07
c'est syntaxiquement incorrect
je sais pas ce qui s'est passé au copier coller, désolé j'avais pas relu. ça reste en fait
je sais pas ce qui s'est passé au copier coller, désolé j'avais pas relu. ça reste en fait
$req = self::$db->prepare('SELECT * FROM tb_adherent');
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 oct. 2014 à 21:22
27 oct. 2014 à 21:22
j'ai cette erreur
Fatal error: Call to a member function prepare() on a non-object in C
??
Fatal error: Call to a member function prepare() on a non-object in C
??
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
27 oct. 2014 à 21:26
27 oct. 2014 à 21:26
ah étrange. précédemment tu avais dit que ça fonctionnait. elle est déclaré où ta variable $db ?
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
Modifié par labourette le 27/10/2014 à 22:47
Modifié par labourette le 27/10/2014 à 22:47
en fait si j'enlève cette ligne avec cette boucle
ça retourne cette erreur
sinon avec cette ligne oui effectivement ça marche puis en faisant cette boucle
$d = new User();
while($d = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$d->nom.'</td>'; echo '<td>'.$d->prenom.'</td>'; echo '<td>'.$d->email.'</td>'; echo '</tr>';
ça retourne cette erreur
Fatal error: Call to a member function prepare() on a non-object in C
sinon avec cette ligne oui effectivement ça marche puis en faisant cette boucle
while($d = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$d->getNom().'</td>'; echo '<td>'.$d->getPrenom().'</td>'; echo '<td>'.$d->getEmail().'</td>'; echo '</tr>';
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
27 oct. 2014 à 22:25
27 oct. 2014 à 22:25
variable $db est
au début de la class User
au début de la class User
private $id; private $nom; private $prenom; private $email; private $fixe; private $mobile; private $username; private $password; private $hash; private static $db;
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
28 oct. 2014 à 00:06
28 oct. 2014 à 00:06
ok donc rien à voir avec $db visiblement
essaies ceci :
sinon bah dans ce cas laisses la ligne $d=new User() même si là j'avoue ne plus comprendre^^
à moins qu'il faut déclarer $d avant l'entrée dans la boucle while
essaies ceci :
$req=$req->execute(); while($d=$req->fetchObject('User')){ .. }
sinon bah dans ce cas laisses la ligne $d=new User() même si là j'avoue ne plus comprendre^^
à moins qu'il faut déclarer $d avant l'entrée dans la boucle while
labourette
Messages postés
657
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 juillet 2016
6
Modifié par labourette le 28/10/2014 à 09:32
Modifié par labourette le 28/10/2014 à 09:32
Bonjour
Non toujours pas désolé, je te met exactement ma méthode et mon appel si au cas où..
la méthode de mon objet User
mon appel à cette fonction
mon erreur retourné
sinon si je cré un nouvel objet ça fonctionne
Merci beaucoup
Non toujours pas désolé, je te met exactement ma méthode et mon appel si au cas où..
la méthode de mon objet User
public static function ListeMembre() { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE actif = 1'); $req->execute(); while($donnees = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$donnees->nom.'</td>'; echo '<td>'.$donnees->prenom.'</td>'; echo '<td>'.$donnees->email.'</td>'; $tel1 = $donnees->fixe; $tel1 = wordwrap ($tel1, 2, ' ', 1); echo '<td>'.$tel1.'</td>'; $tel2 = $donnees->mobile; $tel2 = wordwrap ($tel2, 2, ' ', 1); echo '<td>'.$tel2.'</td>'; echo '</tr>'; } }
mon appel à cette fonction
<div id="ListeMembre"> <table id="user_list" cellpadding="0" cellspacing="1"> <tr> <th width="20%">Nom</th> <th width="20%">Prénom</th> <th width="20%">Email</th> <th width="20%">Téléphone Fixe</th> <th width="20%">Téléphone Mobile</th> </tr> <?php User::ListeMembre(); ?> </table> </div>
mon erreur retourné
Fatal error: Call to a member function prepare() on a non-object in C:
sinon si je cré un nouvel objet ça fonctionne
<div id="ListeMembre"> <table id="user_list" cellpadding="0" cellspacing="1"> <tr> <th width="20%">Nom</th> <th width="20%">Prénom</th> <th width="20%">Email</th> <th width="20%">Téléphone Fixe</th> <th width="20%">Téléphone Mobile</th> </tr> <?php $donnees = new User(); User::ListeMembre(); ?> </table> </div>
Merci beaucoup
totodunet
Messages postés
1377
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
5 mars 2020
200
Modifié par totodunet le 28/10/2014 à 11:35
Modifié par totodunet le 28/10/2014 à 11:35
ah ça y est j'ai compris. $donnees devait être le tout premier objet User que tu as créees dans ta page. du coup si tu mettais pas cette ligne, l'attribut $db qui est statique n'existait pas. et donc ta fonction listemembre() lui est impossible de faire un prepare() dessus.
pour combler à ça, il faudrait utiliser ta fonction init() dans ListeMembre qui regarde avant si $db existe bien ou si il doit le créer
Qui ne tente rien n'a rien
pour combler à ça, il faudrait utiliser ta fonction init() dans ListeMembre qui regarde avant si $db existe bien ou si il doit le créer
public static function ListeMembre() { init(); $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE actif = 1'); $req=$req->execute(); while($donnees = $req -> fetchObject('User')) { echo '<tr>'; echo '<td>'.$donnees->nom.'</td>'; echo '<td>'.$donnees->prenom.'</td>'; echo '<td>'.$donnees->email.'</td>'; $tel1 = $donnees->fixe; $tel1 = wordwrap ($tel1, 2, ' ', 1); echo '<td>'.$tel1.'</td>'; $tel2 = $donnees->mobile; $tel2 = wordwrap ($tel2, 2, ' ', 1); echo '<td>'.$tel2.'</td>'; echo '</tr>'; } }
Qui ne tente rien n'a rien