Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Programmez en orienté objet en PHP

    15 février 2019 à 18:11:49

    Bonjour, je ne comprend pas pourquoi ma flèche et mes deux points ne sont pas en rouge donc ils ne marchent pas. si quelqu'un peu m’éclaircir sur le sujet ?

    -
    Edité par EthanGuingand 15 février 2019 à 18:34:23

    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2019 à 19:47:32

      A mon avis ton erreur se situe dans cette ligne:

      $bdd=new PDO('mysql:HOST;dbname=DB_NAME; charset-utf8', 'USER', 'PASS');

      • Partager sur Facebook
      • Partager sur Twitter
        15 février 2019 à 21:35:59

        Tu penses qu'il faut que je rajoute charset-utf8 et que je mette des apostrophes entre les DB_NAME ...

        Mais ce qui est étrange c'est que je suis un youtubeur du nom de Graven mais moi dès que je met le - puis le > ça ne le met pas en rouge directement.

        https://youtu.be/OZ2yDVcDjpc

        Si tu veux bien checker c'est à la fin de la video.

        Merci😉

        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2019 à 22:28:36

          utf-8 n'a rien avoir, mais les appostrophes sont justes. scroller l'image vers le bas.

          -
          Edité par KAPLIDNESTON 16 février 2019 à 0:00:04

          • Partager sur Facebook
          • Partager sur Twitter
            16 février 2019 à 8:11:30

            Ok c'est bon merci, je crois que j'ai fais une faute à exception mais pour la couleur des deux points et du -> je pense que c'est juste mon Sublime Text.

            Merci de ton aide

            • Partager sur Facebook
            • Partager sur Twitter
              16 février 2019 à 12:23:45

              voici la syntaxe: bonne continuation merci a toi aussi.

              <

              catch(Exception $e)

              {

                      die('Erreur : '.$e->getMessage());

              />

              }

              • Partager sur Facebook
              • Partager sur Twitter
                16 février 2019 à 14:43:00

                Salut à tous,

                Voilà, j’ai un souci depuis plusieurs jours lors de la mise en ligne d’un site créer en php POO en local, qui fonctionne justement très bien en local.

                Mon problème c’est qu’il m’est impossible de faire fonctionner le site en ligne, il me donne l’erreur “ERR_TOO_MANY_REDIRECTS” que je n’est pas en local.

                Je n’ai pas de header() dans ce projet, seulement deux whitHeader() mais qui ne créer pas de boucle.

                Je n’est pas de .htaccess de réécriture des url, j’utilise la middleware interface et des routers, j'ai suivi le tutoriel de grafikart de la mise en pratique de la POO.

                Je précise qu’en local mon projet me donne la même erreur si j’utilise seulement le serveur MAMP mais pas si je lance le serveur web interne, j’ai développé ce projet en utilisant le serveur web interne sur mon terminal à l’aide de la commande « php -S localhost:8888 » qui quand cette commande est lancer le projet fonctionne super bien.

                Je ne comprend pas pourquoi cela fonctionne parfaitement en local mais pas en ligne, Je ne trouve pas l’erreur si quelqu’un a déjà rencontrer cette erreur.

                Merci pour votre aide.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2019 à 0:04:14

                  Salut,svp Quelqu'un peut m'expliquer à quoi ça sert la balise label

                  -
                  Edité par Momo 06 17 février 2019 à 0:05:14

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 février 2019 à 14:52:26

                    Label c'est une étiquette par exemple nom: mohamedhaidara16

                    <label>nom:</label><input type="texte" name=nom" placeholder etc.......>

                    label nom: suivi d'un champ nom.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 février 2019 à 0:01:52

                      Ok merci pour votre aide
                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 février 2019 à 18:47:38

                        Bonjour, Bonsoir,

                        Pour tous ceux et celles qui ont du mal à faire fonctionner l'application avec ses codes finaux de la partie "[Pratique] Réalisation d'un site web" du cours "Programmez en Orienté Objet" OU en téléchargeant le fichier ZIP de l'activité sur le système de cache, voici le lien de mon post sur l'accès sur Admin POO :

                        https://openclassrooms.com/forum/sujet/acces-admin-poo

                        Où j'écrit sur comment enregistrer le fichier hosts après avoir modifié le fichier hosts (il y a aussi un lien URL pour plus de détails sur la modification du fichier hosts), sur les 2 lignes à modifier du code de la création de Virtual host ET sur comment accéder au Admin de l'Application .

                        Pour le fichier hosts, le nom du module d'Apache a activé et le code de la création du Virtual host, ce sont des problèmes de MISES A JOUR (voir le chapitre "Description de l'application") du cours "Programmez en Orienté Objet"

                        VOIR le lien URL de Wampserver : http://forum.wampserver.com/read.php?1,40617,57910

                        Remarque : Ce lien Wampserver est aussi dans mon post https://openclassrooms.com/forum/sujet/acces-admin-poo

                        Voila, Voila, pour ceux et celles qui ont du mal à faire fonctionner l'Application dans la partie "[Pratique] Réalisation d'un site web" du cours "Programmez en Orienté Objet"

                        Merci de votre compréhension et j'espère que le lien de mon post du forum PHP marchera et que cela vous a été d'une grande aide à faire fonctionner l'application avec ses codes finaux du cours "Programmez en Orienté Objet"

                        -
                        Edité par Pierre750 4 mars 2020 à 16:59:55

                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 février 2019 à 16:19:27

                          * Résolu *

                          Bonjour,

                          J'en suis au 4è cours du 1er chapitre (le TP personnage). Après avior corrigé toutes les fautes de frappe et les lignes inversées, je n'ai plus d'erreur affichée, mais la méthode add() n'insère rien dans la bdd, j'aia jouté un "echo" dans la méthode get() mais rien ne s'affiche.

                          Je ne sais plus où chercher, au cas où je copie le code de ces 2 méthodes, des fois que j'aie raté une erreur.

                          Pour add() :

                          public function add(Personnage $perso) {
                          		// préparation de la requete d'insertion
                          		// assignation des valeurs pour le nom, la force... du perso
                          		// exécution de la requete
                          		$request = $this->_db->prepare('INSERT INTO personnages(nom,forcePerso,degats,niveau,experience) VALUES(:nom, :forcePerso, :degats, :niveau, :experience)');
                          		$request->bindValue(':nom', $perso->nom());
                          		$request->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
                          		$request->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
                          		$request->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
                          		$request->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
                          		
                          		$request->execute();
                          	}

                          Pour get() :




                          public function get($id) {
                          		// exécute une requete de type SELECT avec une clause WHERE et retourne un personnage
                          		//$id = (int) $îd;
                          		$request = $this->_db->query('SELECT * FROM personnages WHERE id = '.$id);
                          		$donnees = $request->fetch(PDO::FETCH_ASSOC);
                          		return new Personnage($donnees);
                          		foreach($key as $balue) {
                          			echo $out[] = new Personnage($donnees);
                          		}
                          		
                          	}

                          Merci pour vos pistes de recherche.

                          Edit : J'ai trouvé un code qui permet d'afficher plus d'erreurs, il affiche :

                          Array ( [0] => 23000 [1] => 1048 [2] => Column 'nom' cannot be null )

                          Du coup je suis perplexe, 'nom' n'est pas vide, j'ai bien le même code que dans le cours :

                          $perso = new Personnage([
                          'nom' => 'Victor', 
                          'forcePerso' => '5', 
                          'degats' => '0', 
                          'niveau' => '1', 
                          'experience' => '0'
                          ]);
                          
                          $db = new PDO('mysql:host=localhost; dbname=myDatabase','login','');
                          $manager = new PersonnagesManager($db);
                          
                          $manager->add($perso);

                          Désolé pour ce pavé.






                          -
                          Edité par morgpion 6 mars 2019 à 11:13:54

                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 février 2019 à 17:30:22

                            @morgpion: Vérifie le code de l'attribut nom et des méthodes nom() et setNom() dans la classe Personnage. Il faut qu'ils soient orthographiés exactement de la même manière :

                            class Personnage
                            {
                              private $_nom;
                              ...
                              public function nom()
                              {
                                return $this->_nom;
                              }
                              ...
                              public function setNom($nom)
                              {
                                if (is_string($nom))
                                {
                                  $this->_nom = $nom;
                                }
                              }
                              ...
                            }

                            Par exemple, est-ce que tu n'aurais pas oublié l'underscore sur l'un des trois ?

                            -
                            Edité par Zachee54 27 février 2019 à 17:43:43

                            • Partager sur Facebook
                            • Partager sur Twitter
                              27 février 2019 à 17:58:51

                              Merci pour ta réponse Zachee56.

                              Tout est bien écrit. Jj'ai commenté toutes les références à "nom", et c'est la 2è valeur qui déclenche l'erreur, par contre j'ai activé d'autres types d'erreurs, c'est plus précis :


                              Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'forcePerso' cannot be null in /home/morgan/internet/coursPOO/TPPersonnages/personnagesManager.php:21 Stack trace: #0 /home/morgan/internet/coursPOO/TPPersonnages/personnagesManager.php(21): PDOStatement->execute() #1 /home/morgan/internet/coursPOO/TPPersonnages/index.php(199): PersonnagesManager->add(Object(Personnage)) #2 {main} thrown in personnagesManager.php on line 21

                              Comme s'il y avait une erreur dans le code lui-même, pas une erreur de frappe d'une variable à un endroit. Sinon l'erreur indiquerait "undefined variable...".

                              Je vais voir si je trouve la solution dans le cours de Mathieu Nebra, il parle pas mal de PDO lui aussi.

                              J'ai testé la méthode getList() avec print_r pour afficher les éléments de la bdd, l'erreur est :

                              Personnage Object ( [_id:Personnage:private] => [_forcePerso:Personnage:private] => [_degats:Personnage:private] => [_niveau:Personnage:private] => [_experience:Personnage:private] => ) Personnage Object ( [_id:Personnage:private] => [_forcePerso:Personnage:private] => [_degats:Personnage:private] => [_niveau:Personnage:private] => [_experience:Personnage:private] => ) Personnage Object ( [_id:Personnage:private] => [_forcePerso:Personnage:private] => [_degats:Personnage:private] => [_niveau:Personnage:private] => [_experience:Personnage:private] => )

                              Est-ce que l'accès aux variables private n'est pas autorisé ? J'ai bien mis les 3 persos suggérés dans la bdd, la connexion est bonne (pas d'erreur au moment de son accès).

                              Par contre le getList() avec while... et echo $donnees['nom'} (etc) fonctionne. Donc l'accès aux données private est autorisé, dans le code au-dessus c'est un problème avec mon code bricolé :s

                              -
                              Edité par morgpion 27 février 2019 à 18:53:15

                              • Partager sur Facebook
                              • Partager sur Twitter
                                27 février 2019 à 19:26:46

                                Bonjour A mon avis tu as le probleme dans ta base de donnée vu que l'erreur signalée est le champ forcePerso qui est nul donc tu devras le saisir sinon tu verifies dans ta requete d'insertion le champ de forcePerso avec celui de ta base de donnée, generalement c'est le piege de tous les developpeurs.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 février 2019 à 20:22:52

                                  Je pense plutôt que le problème vient de PHP : ta base de données refuse d'insérer les données parce que tu lui envoies des données null.

                                  Est-ce que tu as mis en place une hydratation dans la fonction __construct de Personnage ?

                                  Si ça ne t'aide pas, alors poste ta classe Personnage en entier, parce que pour l'instant on n'a que des bribes de ton code.

                                  Courage !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    27 février 2019 à 21:27:59

                                    Merci Zachee54 et KAPLIDNESTON.

                                    @KAPLIDNESTON comme j'ai expliqué plus haut, l'erreur était déclenchée par 'nom', mais j'ai commenté toutes les reférences à 'nom' pour tester si c'est ce champ qui pose un problème, et l'erreur a été déclenchée par le champ suivant : "forcePerso". donc c'est plutôt du côté php qu'il y a une erreur. Avec la méthode getList() le'erreur affichée dit que la restriction "private" ne peut pas être violée, donc j'ai peut-être oublié un argument quelque part.

                                    @Zachee54 Je sais que j'ai mis seulement des morceaux de mon code, il faut que je me fasse un compte sur un site de partage de codes, sinon ça prendra 2 pages... Pour l'instant je garde ça dans un coin et j'essaye de voir si je trouve en faisant le mini-TP suivant. Des fois on ne voit pas une erreur de frappe et plus loin on peut récupérer un autre code écrit sans erreur.

                                    Ca m'est déjà arrivé de chercher à résoudre un bug pendant plusieurs semaines, je préfère avancer dans le cours plutôt que rester bloqué aussi longtemps. Je reviendrai poster un lien pour mon code entier si je ne trouve pas avec ce mini-TP, ou donner la solution si je la trouve ;)

                                    Bonne nuit, je lâche pour aujourd'hui !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 mars 2019 à 12:32:33

                                      Tu n'a pas le même code tes valeurs numériques sont de types string, met des int et essaie ça: pas '5' mais 5, etc.

                                      $perso = new Personnage([
                                      
                                        'nom' => 'Victor',
                                      
                                        'forcePerso' => 5,
                                      
                                        'degats' => 0,
                                      
                                        'niveau' => 1,
                                      
                                        'experience' => 0
                                      
                                      ]);


                                      En espérant que ça décoince!

                                      Bonne continuation!



                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Francis du Canada - Soyons audacieux!
                                        4 mars 2019 à 13:26:54

                                        Merci pour la réponse Chat Botté, effectivement j'avais pas vérifié/changé ça, mais ça ne change rien :

                                        Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'nom' cannot be null in TPPersonnages/personnagesManager.php:21

                                        Code de cette ligne :  $q->execute(); pas beaucoup d'indications, peut-être un problème de suivi des données de l'instance $perso.
                                        Si je commente toutes les références à "nom", c'est le 2è champ (forcePerso) qui déclenche l'erreur, donc c'est pas une question de format (même si ça n'arrangeait pas, bien sûr).

                                        J'ai essayé la méthode getList(); avec un var_dump($perso); mais l'erreur est :

                                        Notice: Undefined variable: perso in TPPersonnages/personnagesManager.php on line 55
                                        NULL

                                        J'ai copié-collé le code du TP suivant (combat), qui fonctionne sur mon ordi, je vais travailler sur celui-là pour comprendre ce qu'il fait. Je reviendrai au TP personnages plus tard, quand j'aurai compris le code ;)

                                        Merci quand même.

                                        -
                                        Edité par morgpion 4 mars 2019 à 18:17:29

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 mars 2019 à 1:04:18

                                          Bonsoir Ton $id n'a pas été definé ou declaré voir ligne 3

                                           essaies de bien declarer et désactiver le commentaire,

                                           je crois on declare   avec  $id=GET['id']; verifier la syntaxe.

                                          le int n'a rien avoir tu le declare dans ta bdd en int .     //$id = (int) $îd;

                                          -
                                          Edité par KAPLIDNESTON 5 mars 2019 à 1:11:14

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            5 mars 2019 à 1:22:55

                                            J'ai essayé de reconstruire un environnement en me servant des fichiers de ce 4e cours et d'un ancien fichier de travail qui est plus loin dans le cours et oh surprise, même erreur: nom ne peut pas être 'null'; J'ai mis des var_dump juste après
                                            $perso = new Personnage([
                                            
                                                'nom' => 'Victor',
                                            
                                                'forcePerso' => 5,
                                            
                                                'degats' => 0,
                                            
                                                'niveau' => 1,
                                            
                                                'experience' => 0
                                            
                                            ]);
                                            
                                            
                                            var_dump($perso->nom());
                                            var_dump($perso->forcePerso());
                                            var_dump($perso->degats());
                                            var_dump($perso->niveau());

                                            dans index.php et null, null, null, null.

                                            Le truc ne s'hydratait pas, jusqu'à ce que je réalise qu'il faut un constructeur qui initie l'hydratation sinon quoi d'autre va le faire. Bref, ajoute ce constructeur devant la function hydrate() dans Personnage.php et ça devrait aider. Du coup mes var_dump se sont rempli et en décommentant mes $manager j'ai vu ma bdd se remplir des valeurs. On peut voir cela direct dans phpMyAdmin.

                                            Bref, il fallait un constructeur hydratant!

                                             public function __construct(array $donnees)
                                                {
                                                    $this->hydrate($donnees);
                                                }



                                            En espérant que la même cause a eu le même effet!

                                            -
                                            Edité par Chat Botté 5 mars 2019 à 1:44:11

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Francis du Canada - Soyons audacieux!
                                              19 mars 2019 à 14:54:05

                                              Bonjour, j'en suis au chapitre sur le Backend (partie TP).

                                              J'ai quelque chose qui me titille énormément: il nous dit que l'identifiant et le mot de passe seront stockés dans le fichier de configuration .xml. Cela veut dire deux choses:

                                              *il ne peut y avoir qu'un compte admin

                                              *le mot de passe est stocké... en clair!

                                              Je compte pour ma version essayer de modifier le ConnexionController pour qu'il aille chercher l'identifiant et le mot de passe hashé dans la base de données (et ainsi on pourra avoir plusieurs utilisateurs, si j'ai le courage je ferai un espace création de compte admin). La question que je me pose, c'est le nom du manager et de son entité: UsersManager et User? AccountsManager et Account?

                                              Merci d'avance d'avoir pris le temps de me lire

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.

                                                19 mars 2019 à 18:32:53

                                                Merci KAPLIDNESTON et Chat Botté. Oui il manquait le __contruct ou le hydrate, effectivement. J'ai fini par trouver ça aussi (tout seul :) ).
                                                Maintenant chaque entrée s'enregistre 2 fois dans la bdd, mais c'est moi qui ai dû ajouter ou modifier un truc, je vais comparer avec la solution du prof.

                                                Je connais assez PHP mais je débute totalement en POO, je trouve ce cours compliqué, beaucoup de syntaxe à comprendre d'un coup, et la moindre ligne de code commentée peut donner une page blanche (une spécialité de PHP), donc pas d'indication d'erreur. En fait je crois qu'une page blanche c'est une erreur de fermeture (parenthèses, guillemets, acolades...).

                                                A bientôt, j'aurai sûrement encore besoin de vos lumières :s

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 mars 2019 à 22:16:47

                                                  Raphoraph a écrit:

                                                  Bonjour, j'en suis au chapitre sur le Backend (partie TP).

                                                  J'ai quelque chose qui me titille énormément: il nous dit que l'identifiant et le mot de passe seront stockés dans le fichier de configuration .xml. Cela veut dire deux choses:

                                                  *il ne peut y avoir qu'un compte admin

                                                  *le mot de passe est stocké... en clair!

                                                  Je compte pour ma version essayer de modifier le ConnexionController pour qu'il aille chercher l'identifiant et le mot de passe hashé dans la base de données (et ainsi on pourra avoir plusieurs utilisateurs, si j'ai le courage je ferai un espace création de compte admin). La question que je me pose, c'est le nom du manager et de son entité: UsersManager et User? AccountsManager et Account?

                                                  Merci d'avance d'avoir pris le temps de me lire


                                                  Dans la vraie vie, il peut y avoir plusieurs administrateurs, les mots de passe sont (bien) hachés, ET les fichiers de l'application sont rendus inaccessibles au client.

                                                  Ici, le but n'est pas de construire un vrai site mais d'apprendre la structure globale d'une application en POO.

                                                  Je pense que ce n'est pas la peine que tu te fatigues à créer un dispositif sophistiqué pour la connexion dans ce TP : il y a déjà bien assez de choses à apprendre ! Quand tu écriras des sites en POO PHP dans la vraie vie, tu utiliseras un framework qui te proposera des méthodes toutes faites pour gérer ça.

                                                  L'important, c'est que tu aies compris le principe (et c'est le cas, vu tes remarques !).

                                                  Si tu veux vraiment savoir quel nom de classe je choisirais, j'opterais pour UsersManager en cohérence avec les conventions du cours.

                                                  Et pour tout le monde : ce cours était hyper difficile à suivre comparé aux autres, mais je ne regrette pas. Aujourd'hui je réécris un ancien site avec un framework qui utilise les mêmes principes que dans le cours, et c'est que du bonheur : quand on a compris, tout coule tout seul !

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 mars 2019 à 16:42:36

                                                    Zachee54 a écrit:

                                                    Raphoraph a écrit:

                                                    Bonjour, j'en suis au chapitre sur le Backend (partie TP).

                                                    J'ai quelque chose qui me titille énormément: il nous dit que l'identifiant et le mot de passe seront stockés dans le fichier de configuration .xml. Cela veut dire deux choses:

                                                    *il ne peut y avoir qu'un compte admin

                                                    *le mot de passe est stocké... en clair!

                                                    Je compte pour ma version essayer de modifier le ConnexionController pour qu'il aille chercher l'identifiant et le mot de passe hashé dans la base de données (et ainsi on pourra avoir plusieurs utilisateurs, si j'ai le courage je ferai un espace création de compte admin). La question que je me pose, c'est le nom du manager et de son entité: UsersManager et User? AccountsManager et Account?

                                                    Merci d'avance d'avoir pris le temps de me lire


                                                    Dans la vraie vie, il peut y avoir plusieurs administrateurs, les mots de passe sont (bien) hachés, ET les fichiers de l'application sont rendus inaccessibles au client.

                                                    Ici, le but n'est pas de construire un vrai site mais d'apprendre la structure globale d'une application en POO.

                                                    Je pense que ce n'est pas la peine que tu te fatigues à créer un dispositif sophistiqué pour la connexion dans ce TP : il y a déjà bien assez de choses à apprendre ! Quand tu écriras des sites en POO PHP dans la vraie vie, tu utiliseras un framework qui te proposera des méthodes toutes faites pour gérer ça.

                                                    L'important, c'est que tu aies compris le principe (et c'est le cas, vu tes remarques !).

                                                    Si tu veux vraiment savoir quel nom de classe je choisirais, j'opterais pour UsersManager en cohérence avec les conventions du cours.

                                                    Et pour tout le monde : ce cours était hyper difficile à suivre comparé aux autres, mais je ne regrette pas. Aujourd'hui je réécris un ancien site avec un framework qui utilise les mêmes principes que dans le cours, et c'est que du bonheur : quand on a compris, tout coule tout seul !

                                                    Bonjour, merci pour cette réponse complète! :D

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.

                                                      29 mars 2019 à 15:37:03

                                                      Bonjour,

                                                      Je suis à la troisième partie du tuto "réalisation d'un site web" au niveau du Frontend, à l'endroit où l'on peut tester le site avec l'affichage des news (j'ai ajouté manuellement 2 news dans la base de données).

                                                      Mon site s'affiche, mais à la place des news j'ai un magnifique "Document non trouvé" (erreur 404).

                                                      J'en déduit que ma route n'a pas été trouvée. J'ai vérifié le bootstrap.php, routes.xml, Route.php, Router.php, ils sont identiques à ceux déposé à l'adresse http://www.victorthuillier.com/oc/poo/tp_app/?f=Partie+III%2FChapitre+3, et je ne trouve toujours pas d'ou vient mon erreur.

                                                      Comment puis-je trouver d'ou vient le problème ? (quel fichier ? quelle classe ? réglage de mon serveur ?)

                                                      Merci d'avance 

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        29 mars 2019 à 18:46:50

                                                        Bonjour, surement ton probleme viendra de la non-connexion a ta base de donnée, pliz donnez nous le code d'erreur si c'est possible.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          12 avril 2019 à 18:57:05

                                                          Bonjour,

                                                          Je suis actuellement le cours "Programmez en orienté objet en PHP" et en particulier la séquence "TP Mini-jeu de combat". 

                                                          C'est dans cette section que je rencontre un problème de compréhension concernant le code suivant dans le script principal celui qui instancie les classes :

                                                           case Personnage::PERSONNAGE_FRAPPE :
                                                                    $message = 'Le personnage a bien été frappé !';
                                                                    
                                                                    $manager->update($perso);
                                                                    $manager->update($persoAFrapper);
                                                                    
                                                                    break;

                                                          Pourquoi faire 2 update à la suite concernant $perso et l'autre $persoAFrapper. En effet l'update pour moi ne concerne que le $persoAFrapper, augmentation des dégats. Mais concernant $perso rien ne change pour lui au niveau des dégats... Alors pourquoi faire un update ?

                                                          En vous remerciant d'avance pour votre aide...

                                                          -
                                                          Edité par chris79 12 avril 2019 à 18:57:41

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            14 avril 2019 à 21:19:03

                                                            Pour l'instant, ça ne sert à rien.

                                                            Mais ça peut servir à quelque chose si tu décides de prendre en compte l'expérience du personnage qui frappe (cf. § Améliorations possibles).

                                                            En POO, c'est fréquent de prévoir des fonctionnalités qui ne font rien, mais dont quelqu'un pourra se servir un jour en ajoutant du contenu à ces fonctionnalités. C'est d'ailleurs une utilisation possible de l'héritage, étudié dans le chapitre suivant.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              15 avril 2019 à 11:46:22

                                                              Bonjour les amis. J'ai un souci dans le chapitre 4 sur `la manipulation des données stockées`.  J'ai monté les fichiers des classes Personnage et PersonnagesManager. Puis dans mon fichier TestPersonnage j'ai écrit le code pour appeler la fonction `add()` pour test, Mais je n'ai aucun résultat dans la base de données. Je souhaiterais comprendre ce qui se passe,

                                                              Quelqu'un peut m'aider? Je ne peux pas avancer sans résoudre ce problème..

                                                              Voici ma classe Personnage.class.php

                                                              ``` <?php

                                                              class Personnage

                                                              {

                                                              private $_id;

                                                              private $_nom;

                                                              private $_forcePerso;

                                                              private $_degats;

                                                              private $_niveau;

                                                              private $_experience;

                                                              // Un tableau de donnees doit etre passe a la fonction -- d'ou le prefixe << array >>

                                                              public function hydrate(array $donnees)

                                                              {

                                                              foreach($donnees as $key => $val)

                                                              {

                                                              $method = 'set'. ucfirst($key); //uppercase first..

                                                              if(method_exists($this, $method)) // verifie si la methode existe..

                                                              {

                                                              $this->$method($val);

                                                              }

                                                              }

                                                              }

                                                              // Constructeur de la classe Personnage..

                                                              public function __construct(array $donnees)

                                                              {

                                                              $this->hydrate($donnees); // On hydrate notre objet ici..

                                                              }

                                                              // Liste des GETTERS..

                                                              public function id(){return $this->_id;}

                                                              public function nom(){return $this->_nom;}

                                                              public function forcePerso(){return $this->_forcePerso;}

                                                              public function degats(){return $this->_degats;}

                                                              public function niveau(){return $this->_niveau;}

                                                              public function experience(){return  $this->_experience;  }

                                                              // Liste des SETTERS..

                                                              public function setId($id)

                                                              {

                                                              // On convertit l'argument en entier..

                                                              $id = (int) $id;

                                                              // On verifie ensuite si ce nombre est positif..

                                                              if($id > 0)

                                                              {

                                                              $this->_id = $id;

                                                              }

                                                              }

                                                              public function setNom($nom)

                                                              {

                                                              // On verifie qu'il s'agit bien d'une chaine de caracteres..

                                                              if(is_string($nom) && strlen($nom) <= 30)

                                                              {

                                                              $this->_nom = $nom;

                                                              }

                                                              }

                                                              public function setForcePerso($forcePerso)

                                                              {

                                                              $forcePerso = (int)$forcePerso;

                                                              if($forcePerso >= 1 && $forcePerso <= 100)

                                                              {

                                                              $this->_forcePerso = $forcePerso;

                                                              }

                                                              }

                                                              public function setDegats($degats)

                                                              {

                                                              $degats = (int)$degats;

                                                              if($degats >= 0 && $degats <= 100)

                                                              {

                                                              $this->_degats = $degats;

                                                              }

                                                              }

                                                              public function setNiveau($niveau)

                                                              {

                                                              $niveau = (int)$niveau;

                                                              if($niveau >= 1 && $niveau <= 100)

                                                              {

                                                              $this->_niveau = $niveau;

                                                              }

                                                              }

                                                              public function setExperience($experience)

                                                              {

                                                              $experience = (int)$experience;

                                                              if($experience >=1 && $experience <= 100)

                                                              {

                                                              $this->_experience = $experience;

                                                              }

                                                              }

                                                              }//fin classe

                                                              ```

                                                              Voici ma classe PersonnagesManager.class.php

                                                              ```<?php

                                                              class PersonnagesManager

                                                              {

                                                              private $_db; // Attribut contenant l'instance de PDO.

                                                              public function __construct($db)

                                                              {

                                                              $this->setDb($db);

                                                              }

                                                              public function add(Personnage $perso)

                                                              {

                                                              // Preparation de la requete d'insertion

                                                              // Assignation des valeurs pour le nom, la force, les degats, l'experience

                                                              // et le niveau du personnage

                                                              // Execution de la requete.

                                                              $req = $this->_db->prepare('INSERT INTO personnage(nom, forcePerso, degats, niveau, experience) 

                                                              VALUES (:nom, :forcePerso, :degats, :niveau, :experience)');

                                                              $req->execute(array(

                                                              'nom' => $perso->nom(),

                                                              'forcePerso' => $perso->forcePerso(),

                                                              'degats'=> $perso->degats(),

                                                              'niveau'=> $perso->niveau(),

                                                              'experience' => $perso->experience()

                                                              ));

                                                              echo 'Ajout effectue avec succes !';

                                                              }

                                                              public function delete(Personnage $perso)

                                                              {

                                                              // Execute une requete de type DELETE.

                                                              $this->_db->exec('DELETE FROM personnage WHERE id = '. $perso->id());

                                                              }

                                                              public function get($id)

                                                              {

                                                              //  Execute une requete de type SELECT avec une clause WHERE, et retourne un objet Personnage.

                                                              $id = (int)$id;

                                                              $req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage

                                                              WHERE id = '. $id);

                                                              // Je stocke le resultat de la requete dans une varIABLE.. un tableau

                                                              $donnees = $req->fetch(PDO::FETCH_ASSOC);

                                                              return new Personnage($donnees);

                                                              }

                                                              public function getList()

                                                              {

                                                              // Reoturne la liste de tous les personnages.

                                                              $persos = array(); // tableau vide

                                                              $req = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage

                                                              ORDER BY nom');

                                                              while($donnees = $req->fetch(PDO::FETCH_ASSOC))

                                                              {

                                                              $persos[] = new Personnage($donnees);

                                                              }

                                                              return $persos;

                                                              }

                                                              public function update(Personnage $perso)

                                                              {

                                                              // Prepare une requete de type UPDATE.

                                                              // Assignation des valeurs a la requete

                                                              // Execution de la requete.

                                                              $req = $this->_db->prepare('UPDATE FROM personnage SET forcePerso = :forcePerso, degats = :degats,

                                                              niveau = :niveau, experience = :experience WHERE id = :id');

                                                              $req->execute(array(

                                                              'forcePerso' => $perso->forcePerso(),

                                                              'degats'     => $perso->degats(),

                                                              'niveau'     => $perso->niveau(),

                                                              'experience' => $perso->experience()

                                                              )

                                                              );

                                                              }

                                                              public function setDb(PDO $db)

                                                              {

                                                              $this->_db = $db;

                                                              }

                                                              }

                                                               ```

                                                              Et voici mon fichier TestPersonnage.php

                                                              ``` <?php

                                                              function chargerClasse($classe)

                                                              {

                                                              require $classe.'.class.php';// inlcure la classe correspondant au parametre passe..

                                                              }

                                                              spl_autoload_register('chargerClasse'); // on enregistre la fonction en autoload pour qu'elle

                                                              // soit appelee des qu'on instanciera une classe non declaree..

                                                              $perso = new Personnage([

                                                                'nom' => 'Victor',

                                                                'forcePerso' => 5,

                                                                'degats' => 0,

                                                                'niveau' => 1,

                                                                'experience' => 0

                                                              ]);

                                                              // connexion a la BDD..

                                                              $db = new PDO('mysql:host=localhost;dbname=personnages', 'root', '');

                                                              $manager = new PersonnagesManager($db);

                                                              $manager->add($perso);

                                                              ?>

                                                              ```

                                                              HELP PLEASE!!

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              paulTchaa8

                                                              MOOC Programmez en orienté objet en PHP

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              • Editeur
                                                              • Markdown