Programmation Orienté Objet
RésoluJe 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.
47 réponses
Afficher tous les membres en PHP avec une classe User nécessite une récupération des données et leur affichage sous forme de lignes HTML, tout en restant cohérent avec l’approche orientée objet. Des options existent, notamment récupérer les données avec PDO et fetchAll puis les parcourir, ou obtenir directement des objets User via fetchObject('User'), en veillant à utiliser les getters comme getNom() et getEmail(). En pratique, certaines solutions proposent une méthode statique ListeMembre() dans la classe User pour interroger la base et retourner les objets, évitant l’utilisation d’un nouvel objet pour chaque ligne. D'autres approches insistent sur l'importance d'appeler les getters sur chaque instance et de tester les données côté POST lors des mises à jour pour prévenir des erreurs.
-
Bonjour
Donc voilà pour récapituler, après avoir mis echo $this->id_adherent; après le UpdateMembre aucune erreur retournée.
Toutes les modifs s'effectue bien dans ma BDD sauf que pour l'affichage dans le formulaire les données n'apparaissent pas à l'instantanée il faut toujours que je me déconnecte et me reconnecte pour les valeurs prennent effets pour l'affichage.
Merci de ton aide. -
bonsoir,
mets un ';' à la fin du echo!
non le select théoriquement on en a pas besoin si l'attribut id_adherent est déjà initialisé. ce que va nous dire le echo
-
Bonjour
Je ne sais pas si c'est bien ici qu'il faut faire le echo mais si c'est le cas ça me retourneparse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in C:
public function UpdateMembre() { echo $this->id_adherent $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username'); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->execute(); $this->id_adherent = $req->fetchColumn();
sinon le SELECT est-il vraiment indispensable? c'est juste une question en fait comme je débute en POO.
Merci -
bonsoir,
étrange... mais au vu que ton select que tu fais dans update() fait fonctionner la méthode update(), je parie que le problème est this->adherent qui n'est pas initialisé. fais echo this->adherent au début de update pour voir si il a une valeur.
-
Bonjour
Dis moi juste quelle ligne j'affiche dans ma BDD?
parce que avec
echo $req ça retourne
Catchable fatal error: Object of class PDOStatement could not be converted to string in C......
sinon ok j'avais pas penséwhere id_adherent=id_adherent
-
salut,
Mais voilà dans ma tête c'est pas clair du tout.
Déjà pourquoi dans le WHERE il n'y a pas plutôtWHERE id_adherent= id_adherent');
je ne sais pas c'est toi le programmeur qui a écrit cela^^
si tu faiswhere id_adherent=id_adherent
cela c'est stupide car tu demandes l'id_adherent de la table tb_adherent où l'id_adherent est égal à une valeur. Autrement si la valeur est 5, tu demandes d'afficher le numéro de l'adhérent numéro 5 donc grosso modo 5.
mais maintenant j'ai pu voir où est le problème, $this->id_adherent n'a pas de valeur car visiblement après ton select tu lui en affectes une.
mais ce que j'avais demandé, c'était plutôt ça :
public function update() { $req = self::$db->prepare('UPDATE tb_adherent SET nom = :nom, prenom = :prenom, email = :email, naissance = :naissance, fixe = :fixe, mobile = :mobile, adresse = :adresse, lieu_dit = :lieu_dit, code_postal = :code_postal, ville = :ville, username = :username, password = :password WHERE id_adherent = :id_adherent'); $req->bindParam(':id_adherent', $this->id_adherent, PDO::PARAM_INT); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':email', $this->email, PDO::PARAM_STR); $req->bindParam(':naissance', $this->naissance, PDO::PARAM_STR); $req->bindParam(':fixe', $this->fixe, PDO::PARAM_STR); $req->bindParam(':mobile', $this->mobile, PDO::PARAM_STR); $req->bindParam(':adresse', $this->adresse, PDO::PARAM_STR); $req->bindParam(':lieu_dit', $this->lieu_dit, PDO::PARAM_STR); $req->bindParam(':code_postal', $this->code_postal, PDO::PARAM_STR); $req->bindParam(':ville', $this->ville, PDO::PARAM_STR); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->bindParam(':password', $this->password, PDO::PARAM_STR); echo $req; $req->execute(); }
voir ce qu'affiche le contenu de $req et exécuter la ligne dans ton SGBD pour savoir quelles erreurs vont pas.
Qui ne tente rien n'a rien -
Bonjour
C'est encore moi j'aurai besoin encore de toi s'il te plait.
Il y a aussi quelque chose de pas normal. Lorsque je fait une modif mon formulaire à l'affichage ne garde pas les valeurs, je suis obligé de me déconnecter puis me reconnecter pour que les modifs soient afficher dans le formulaire.
Merci j'espère que tu comprends ce que je veux dire. -
Bonjour
Alors voilà j'ai fait ceux-ci dans la méthode update à priori ça enregistre dans la BDDpublic function update() { $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username'); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->execute(); $this->id_adherent = $req->fetchColumn(); $req = self::$db->prepare('UPDATE tb_adherent SET nom = :nom, prenom = :prenom, email = :email, naissance = :naissance, fixe = :fixe, mobile = :mobile, adresse = :adresse, lieu_dit = :lieu_dit, code_postal = :code_postal, ville = :ville, username = :username, password = :password WHERE id_adherent = :id_adherent'); $req->bindParam(':id_adherent', $this->id_adherent, PDO::PARAM_INT); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':email', $this->email, PDO::PARAM_STR); $req->bindParam(':naissance', $this->naissance, PDO::PARAM_STR); $req->bindParam(':fixe', $this->fixe, PDO::PARAM_STR); $req->bindParam(':mobile', $this->mobile, PDO::PARAM_STR); $req->bindParam(':adresse', $this->adresse, PDO::PARAM_STR); $req->bindParam(':lieu_dit', $this->lieu_dit, PDO::PARAM_STR); $req->bindParam(':code_postal', $this->code_postal, PDO::PARAM_STR); $req->bindParam(':ville', $this->ville, PDO::PARAM_STR); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->bindParam(':password', $this->password, PDO::PARAM_STR); $req->execute(); }
Mais voilà dans ma tête c'est pas clair du tout.
Déjà pourquoi dans le WHERE il n'y a pas plutôtWHERE id_adherent= id_adherent');
si tu peux me donner des explications et en plus au niveau de l'affichage les donner modifier ne retourne pas dans le formulaire mais juste dans la BDD.
Merci beaucoup, j'y suis allé à taton si il y a autre chose de mieux au niveau requète. -
Bonjour
Voilà je pense à quelque chose, il faudrait peut-être ajouter un SELECT dans la méthode UPDATE juste avant le update en fait je vais quand même essayer.
Je te redis qu'est ce qu'il en ressors....
Merci -
Bonjour
oui elle retourne l'erreur que je t'ai dit en faitCatchable fatal error: Object of class PDOStatement could not be converted to string in C
Merci -
salut,
visiblement ta fonction update() semble problématique. As-tu fait unecho $req;
comme je t'ai dit tans ta fonction update() pour voir ce qu'elle contient comme résultat et vérifier si elle ne comporte pas d'erreur SQL
-
Bonjour
Je t'envoie la totalité de mon formulaire.
Il y a quelques chose que je ne comprends pas c'est fou..
Donc ça me retourne l'erreur ci-dessus après avoir rajouté echo $req; comme tu me l'a dit sinon sans ça aucune erreur<?php if(isset($_POST)&&!empty($_POST)) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $username = $_POST['username']; $user = new User(); $user->setNom($nom); $user->setPrenom($prenom); $user->setEmail($email); $user->setUsername($username); $user->update(); } ?> <div id="content"> <form id="formulaire" action="" method="post"> <fieldset> <legend class="legend">Modifier mon profil</legend> <table cellpadding="0" cellspacing="3"> <tr> <th colspan="6">Coordonné :</th> </tr> <tr> <td width="20%">Nom :</td> <td width="30%"><input name="nom" size="30" type="text" value="<?php echo $user->getNom();?>"/></td> <td width="20%">Prénom :</td> <td width="30%"><input name="prenom" size="30" type="text" value="<?php echo $user->getPrenom();?>"/></td> <tr> <td width="20%"><img src="image/mail.png" alt="Email" title="Email" height="22" width="22"/> Adresse mail :</td> <td width="30%"><input name="email" class="content_input" size="30" type="text" value="<?php echo $user->getEmail();?>"/></td> </tr> <tr> <td width="20%"><img src="image/login.png" alt="Login" title="Login" height="22" width="22"/> Login :</td> <td width="30%"><input name="username" id="login_modif_membre" class="content_input" onFocus="this.blur()" size="20" type="text" value="<?php echo $user->getUsername();?>"/></td> </tr> </table> <!--#######################################################################################################################################--> <input type="submit" name="submit" class="submit" value="Enregistrer"/> </fieldset> </form> </div> -
Voici l'erreur retournée
Catchable fatal error: Object of class PDOStatement could not be converted to string in
-
bonsoir
les champs username et email n'existent pas dans ton formulaire HTML.
est-ce que tu as une erreur qui s'affiche après l'envoi du formulaire?
ce que je te conseille de faire,
c'est rajouterecho $req;
juste avant la ligne$req->execute();
dans ta fonction update() pour qu'il affiche la requête SQL et voir ce qu'il se passe. tu fais un copier-coller de ta requête dans ton SGBD et tu regardes ce qu'il te dit.
aussi pour vérifier $_POST il est bon d'utiliser la fonction isset() pour savoir si $_POST existe avant de voir si il est vide ou pas.
if(isset($_POST)&&!empty($_POST))
-
Bonjour,
Je ne comprends pas après avoir passé un bon moment.
Merci de ton aide.
Alors voilà ce que j'ai essayé de faire.
Pour le formulaire côté HTML les champs sont bien remplis avecvalue="<?php echo $user->getNom();?>"
j'initialise les variables
cré un objet
affiche les setters pour pouvoir modifier
j'accéde à la méthode updateif(!empty($_POST)) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $username = $_POST['username']; $user = new User(); $user->setNom($nom); $user->setPrenom($prenom); $user->setEmail($email); $user->setUsername($username); $user->update(); } -
ok donc il n'y a pas de problème côté HTML. est-ce que tu vois bien les champs remplies par défaut des noms et prénoms de l'objet ?
maintenant ton bout de code de ta même page avec $_POST pour le traitement du formulaire. il doit se trouver idéalement en début de page avant la première balise HTML que tu envoies au client.
-
en fait je n'ai pas mis tout le formulaire
<form id="formulaire" action="" method="post"> <fieldset> <legend class="legend">Modifier mon profil</legend> <table cellpadding="0" cellspacing="3"> <tr> <th colspan="6">Coordonné :</th> </tr> <tr> <td width="20%">Nom :</td> <td width="30%"><input name="nom" size="30" type="text" value="<?php $donnees->getNom();?>"/></td> <td width="20%">Prénom :</td> <td width="30%"><input name="prenom" size="30" type="text" value="<?php $donnees->getNom();?>"/></td> </tr> <input type="submit" class="submit" value="Modifier"/> </fieldset> </form> -
tu m'a pas montré ce qu'il fallait.
dans un formulaire HTML tu dois avoir la méthode d'envoi et l'action.
<form method="POST" action="updateUser.php"> <input type="text" ... /> <.../> <input type="submit" value="Mettre à jour"/> </form>
puis pour récuperer la valeur que l'utilisateur à mis dans les textfields dans le script php pour le traitement, faut utiliser la variable $_POST. ou $_GET si la méthode d'envoi est get. Ces variables sont des tableaux associatifs par l'attribut name.
Qui ne tente rien n'a rien -
Bonjour
Mon formulaire juste une partie<tr> <td width="20%">Nom :</td> <td width="30%"><input name="nom" size="30" type="text" value="<?php $donnees->getNom();?>"/></td> <td width="20%">Prénom :</td> <td width="30%"><input name="prenom" size="30" type="text" value="<?php $donnees->getNom();?>"/></td> </tr>
Je te donne toute la class User il y a la méthode "update"<?php private $id_adherent; private $nom; private $prenom; private $email; private $naissance; private $fixe; private $mobile; private $adresse; private $lieu_dit; private $code_postal; private $ville; private $username; private $password; //private $hash_cookie; private static $db; public function __construct($id_adherent = null) { self::init(); //is_int -- Détermine si une variable est de type nombre entier if(is_int($id_adherent)) { try { $this->load($id_adherent); } catch(Exception $e) { throw $e; } } } public function init() { if(self::$db == null) self::$db = new Database(); } private function load($id_adherent) { $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE id_adherent = :id_adherent'); $req->bindParam(':id_adherent', $id_adherent, PDO::PARAM_INT); $req->execute(); $donnees = $req->fetch(PDO::FETCH_ASSOC); if(empty($donnees)) throw new Exception('Utilisateur introuvable'); $this->setUserDatas($donnees); } ########################################################################################################################## public function setNom($nom) { $this->nom = trim($nom); } public function setPrenom($prenom) { $this->prenom = trim($prenom); } public function setEmail($email) { $this->email = trim($email); } public function setNaissance($naissance) { $this->naissance = trim($naissance); } public function setFixe($fixe) { $this->fixe = trim($fixe); } public function setMobile($mobile) { $this->mobile = trim($mobile); } public function setAdresse($adresse) { $this->adresse = trim($adresse); } public function setLieuDit($lieu_dit) { $this->lieu_dit = trim($lieu_dit); } public function setCodePostal($code_postal) { $this->code_postal = trim($code_postal); } public function setVille($ville) { $this->ville = trim($ville); } public function setUsername($username) { $this->username = trim($username); } public function setPassword($password) { $this->password = trim($password); } //public function setHashCookie($hash_cookie) { // $this->hash_cookie = ($hash_cookie); //} ########################################################################################################################## public function getNom() { return $this->nom; } public function getPrenom() { return $this->prenom; } public function getEmail() { return $this->email; } public function getNaissance() { return $this->naissance; } public function getFixe() { return $this->fixe; } public function getMobile() { return $this->mobile; } public function getAdresse() { return $this->adresse; } public function getLieuDit() { return $this->lieu_dit; } public function getCodePostal() { return $this->code_postal; } public function getVille() { return $this->ville; } public function getUsername() { return $this->username; } public function getPassword() { return $this->password; } ########################################################################################################################## private function setUserDatas($donnees) { if(!empty($donnees) && is_array($donnees)) { $this->id_adherent = $donnees['id_adherent']; $this->nom = $donnees['nom']; $this->prenom = $donnees['prenom']; $this->email = $donnees['email']; $this->naissance = $donnees['naissance']; $this->fixe = $donnees['fixe']; $this->mobile = $donnees['mobile']; $this->adresse = $donnees['adresse']; $this->lieu_dit = $donnees['lieu_dit']; $this->code_postal = $donnees['code_postal']; $this->ville = $donnees['ville']; $this->username = $donnees['username']; $this->password = $donnees['password']; } } public static function get($username) { self::init(); $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username'); $req->bindParam(':username', $username, PDO::PARAM_STR); $req->execute(); $id_adherent = $req->fetchColumn(); return ($id_adherent) ? new self((int) $id_adherent) : null; } public static function exists($username) { self::init(); $username = trim($username); $req = self::$db->prepare('SELECT COUNT(*) FROM tb_adherent WHERE username = :username'); $req->bindParam(':username', $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 = :username AND password = :password AND actif = 1'); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->bindParam(':password', $this->password, PDO::PARAM_STR); $req->execute(); $donnees = $req->fetch(PDO::FETCH_ASSOC); $this->setUserDatas($donnees); return (!empty($donnees)); } public function insert() { $req = self::$db->prepare('INSERT INTO tb_adherent (nom, prenom, email, naissance, fixe, mobile, adresse, lieu_dit, code_postal, ville, username, password) VALUES (:nom, :prenom, :email, :naissance, :fixe, :mobile, :adresse, :lieu_dit, :code_postal, :ville, :username, :password)'); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':email', $this->email, PDO::PARAM_STR); $req->bindParam(':naissance', $this->naissance, PDO::PARAM_STR); $req->bindParam(':fixe', $this->fixe, PDO::PARAM_STR); $req->bindParam(':mobile', $this->mobile, PDO::PARAM_STR); $req->bindParam(':adresse', $this->adresse, PDO::PARAM_STR); $req->bindParam(':lieu_dit', $this->lieu_dit, PDO::PARAM_STR); $req->bindParam(':code_postal', $this->code_postal, PDO::PARAM_STR); $req->bindParam(':ville', $this->ville, PDO::PARAM_STR); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->bindParam(':password', $this->password, PDO::PARAM_STR); $req->execute(); $req = self::$db->prepare('SELECT id_adherent FROM tb_adherent WHERE username = :username'); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->execute(); $this->id_adherent = $req->fetchColumn(); } public function update() { $req = self::$db->prepare('UPDATE tb_adherent SET nom = :nom, prenom = :prenom, email = :email, naissance = :naissance, fixe = :fixe, mobile = :mobile, adresse = :adresse, lieu_dit = :lieu_dit, code_postal = :code_postal, ville = :ville, username = :username, password = :password WHERE id_adherent = :id_adherent'); $req->bindParam(':id_adherent', $this->id_adherent, PDO::PARAM_INT); $req->bindParam(':nom', $this->nom, PDO::PARAM_STR); $req->bindParam(':prenom', $this->prenom, PDO::PARAM_STR); $req->bindParam(':email', $this->email, PDO::PARAM_STR); $req->bindParam(':naissance', $this->naissance, PDO::PARAM_STR); $req->bindParam(':fixe', $this->fixe, PDO::PARAM_STR); $req->bindParam(':mobile', $this->mobile, PDO::PARAM_STR); $req->bindParam(':adresse', $this->adresse, PDO::PARAM_STR); $req->bindParam(':lieu_dit', $this->lieu_dit, PDO::PARAM_STR); $req->bindParam(':code_postal', $this->code_postal, PDO::PARAM_STR); $req->bindParam(':ville', $this->ville, PDO::PARAM_STR); $req->bindParam(':username', $this->username, PDO::PARAM_STR); $req->bindParam(':password', $this->password, PDO::PARAM_STR); $req->execute(); } public static function ListeMembre() { self::init(); $req = self::$db->prepare('SELECT * FROM tb_adherent WHERE actif = 1 ORDER BY nom, prenom ASC'); $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>'; } } } -
ah
peux tu me montrer ton bout de code HTML et PHP associé au traitement du formulaire ?
- 1
- 2
- 3