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
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.
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.
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 :
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"
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"
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 :
@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 ?
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 :
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
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.
@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
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
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
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);
}
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
Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.
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
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, 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!
Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.
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 ?)
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 ?
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.
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 >>
Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.
Raphoraph (sur OpenClassRoom), ou Rififi, ou Band45.... En fonction de quel site tu te trouves.
paulTchaa8