@Zachee54 : OK je comprends mieux pourquoi j'ai rencontré cette difficulté de compréhension. Merci pour vos explications très claires. Encore merci et bonne journée.
bonsoir je suis un nouveau dans le forum et je ne sais pas vraiment comment sa se passe ici,mais bon j'ai un soucis avec mon code php,je recois cette erreur. aider moi SVP
Notice: Object of class PDOStatement could not be converted to int in C:\wamp64\www\bulletin\essai.php on line 13
Salut @Aldo nan. Comment tu vas? J'ai regardé ton code et je crois que tu fais erreur après tes requêtes. En fait $total1 et $total2 contiennent(sous forme tableau) le résultat de tes requêtes_ Alors pour accéder aux valeurs que tu désires, tu dois les piocher(fetch) avant de faire la somme, du genre
n'oublies pas que ici, $resultat1 et $resultat2 sont des tableaux dont chaque identifiant(ici total) pointe sur une valeur. Tu y accèdes donc simplement en la référençant.
J’espère que tu trouves ton compte dans ceci l'ami.
Pour le TP combat_v2 j'ai plusieurs questions, une de code et 3 autres de "jeu" :
La correction met le calcul des dégats en fonction de l'atout dans la class Guerrier, mais un guerrier peut se battre contre un magicien, ou 2 magiciens, on devrait pouvoir modifier l'atout du magicien quand il reçoit un sort. On peut le mettre dans la classe Personnage dans notre code, mais je trouve son choix bancal.
L'atout n'augmente pas, il est juste modifié ponctuellement. C'est pas une question, je suis juste perdu dans l'utilisation de cet atout. (en fait ça je verrai peut-être dans la suite du TP, pour l'instant c'est le cas).
L'atout du magicien doit être différent de 0 pour qu'il puisse lancer un sort, mais si son atout est à 0 parce qu'il a infligé plus de 90 de dégats au coup d'avant, et comme il n'est pas modifié, il ne pourra plus se battre...
Voilà, c'est pas des problèmes bloquants, juste des questions de règles du jeu
Le cours sur la POO est excelent, pour ceux qui on dut mal a suivre, il faut creuser un peu plus ! faire des recherche sur le net, voir d'autres tutos, faire refaire encore et encore jusqu'a comprendre... Perso : merci a vyk12, super boulot, et en plus c'est gratos !!! MERCI.
- Ce cours est extrêmement difficile, il n'est vraiment pas fait pour tout le monde : je pense que vous devriez revoir la difficulté du cours qui est actuellement à moyenne car j'ai suivi le cours sur Java EE qui était supposé être difficile et ce sans aucune base sur la POO et je n'ai pas eu autant de difficultés. - Diviser le cours en deux par exemple, modifier le temps allouer : 30 heures est largement insuffisant - Aussi plus de pratique, avec des résultats et une approche plus douce serait louable - Pour finir, certains liens pointe vers un site hébergé par OVH(visiblement) qui n'est plus disponible.
Je me suis accroché jusqu'au UML, MVC, après sincèrement...
bonjour, c'est difficile le POO, mais je lâche jamais
merci de m 'aider car je suis bloqué depuis deux jours dans le tp mini-jeux de combat
j'ai essayer de creer un nouveau personnage mais ca marche pas avec moi
merci de m'aider de trouver ou est mon faute, ci-dessous les scripts et merci
<?php
class PersonnagesManager
{
private $_bdd;
public function setBdd($bdd)
{
$this->_bdd=$bdd;
}
public function __construct($bdd)
{
$this->setBdd($bdd);
}
public function add(Personne $pers)
{
// Préparation de la requête d'insertion.
// Assignation des valeurs pour le nom du personnage.
// Exécution de la requête.
$req=$pers->_bdd->prepare('INSERT INTO personnages (nom)value(:nom)');
$req->execute(array(
'nom'=>$pers->nom()
));
$pers->hydrate(array(
'id'=>$this->_bdd->lastInsertId(),
'degats'=>0
));
// Hydratation du personnage passé en paramètre avec assignation de son identifiant et des dégâts initiaux (= 0).
}
public function count()
{
// Exécute une requête COUNT() et retourne le nombre de résultats retourné.
return $this->_bdd->query('SELECT COUNT(*)FROM personnages')->fetchcolumn();
}
}
?>
classe personne
<?php
class Personne
{
private $_id;
private $_nom;
private $_degats;
const CESTMOI=1;
const PERSONNE_TUE=2;
const PERSONNE_FRAPPE=3;
public function frapper(Personne $pers)
{
// Avant tout : vérifier qu'on ne se frappe pas soi-même.
// Si c'est le cas, on stoppe tout en renvoyant une valeur signifiant que le personnage ciblé est le personnage qui attaque.
if ($this->_id==$pers->id()) {
return self::CESTMOI;
}
// On indique au personnage frappé qu'il doit recevoir des dégâts.
return $pers->recevoirDegats();
}
public function recevoirDegats()
{
// On augmente de 5 les dégâts.
$this->_degats+=5;
// Si on a 100 de dégâts ou plus, la méthode renverra une valeur signifiant que le personnage a été tué.
if ($this->_degats>=100) {
return self::PERSONNE_TUE;
}
return self::PERSONNE_FRAPPE;
// Sinon, elle renverra une valeur signifiant que le personnage a bien été frappé.
}
//setter
public function setId($id)
{
$this->_id=$id;
}
public function setNom($nom)
{
$this->_nom=$nom;
}
public function setDegats($degats)
{
$this->_degats=$degats;
}
public function id()
{
return $this->_id;
}
public function nom()
{
return $this->_nom;
}
public function degats()
{
return $this->_degats;
}
public function hydrate(array $donnees)
{
foreach ($donnees as $key => $value) {
$methode='set'.ucfirst($key);
if (method_exists($this, $method)) {
$this->$method($value);
}
}
}
public function __construct(array $donnees)
{
$this->hydrate($donnees);
}
}
?>
page exécution
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jeux</title>
</head>
<body>
<form action=""method="post">
<p>
<input type="text" name="nom">
<input type="submit" name="creer" value="creer nouveau personnage">
<input type="submit" name="utiliser" value="utiliser un personnage">
</p>
</form>
</body>
</html>
<?php
//on enregistre notre autoload
require $classname.'MONCLASSPERSO.php';
require $classname.'MONCLASS_MANAG.php';
$bdd=new PDO('mysql:host=localhost;dbname=test0;charset=utf8','root','');
$manager=new PersonnagesManager($bdd);
var_dump($manager);
if (isset($_POST['creer']) && isset($_POST['nom'])) // Si on a voulu créer un personnage.
{
$donnees=array('nom' => $_POST['nom']);
$perso = new Personne($donnees); // On crée un nouveau personnage.
var_dump($perso);
}
$manager->add($perso);
?>
mon table dans la base est : Table: personnages
<form style="font-family: 'Times New Roman'; font-size: medium;" action="http://localhost/POO/tp%20mini%20jeux/jeux.php" method="post">
@DhaouadiArbi: C'est normal, tu ne dois pas utiliser la méthode prepare sur la variable qui est passée à ta méthode add, mais tu dois utiliser $this, soit :
$this->_bdd->prepare('INSERT INTO personnages (nom)value(:nom)');
// Au lieu de :
$pers->_bdd->prepare('INSERT INTO personnages (nom)value(:nom)');
La variable $pers, c'est la classe Personne et non la classe PersonnagesManager.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Ensuite, l'erreur t'indique que la variable $pages n'est pas définie.
J'ai copié-collé le code du prof, du coup j'ai laissé "abstract" à la classe, mais là tout de suite je ne me souviens pas comment ça s'utilise. Par contre ma classe Pages n'est pas instanciée, c'est pagesManager qui l'est.
Pour l'erreur, je me suis trompé de ligne, d'abord il y a celle-là, la suivante c'est "normal", j'apprends..., j'avance étape par étape
Notice: Undefined variable: bdd in page_mainspropres.php on line 34
"Undefined variable" : j'avais compris qu'elle n'est pas définie. Mon problème c'est "pourquoi ?". En retirant "abstract" j'ai la même erreur pour $bdd.
Edit : J'ai trouvé : j'avais laissé $this->bdd" un peu avant pour la connexion à la base en copiant-collant hors d'une classe :
$this->bdd = new PDO(/* ... */
Je reviendrai pour les erreurs suivantes si je bloque. Merci pour la réponse et les infos en tous cas
Après avoir entamé ce cours il y a plus d'un an, laissé de côté durant quelques mois parce que j'avais d'autres obligations, je le reprends aujourd'hui.
Après avoir entamé ce cours il y a plus d'un an, laissé de côté durant quelques mois parce que j'avais d'autres obligations, je le reprends aujourd'hui.
Et je bloque sincèrement sur l'activité de cache.
Est-ce que quelqu'un pourrait m'expliquer ?
Merci d'avance ;).
Vincent
Qu'est-ce que tu ne comprends pas exactement ?
Le principal prérequis à avoir pour effectuer l'activité, c'est de savoir lire un fichier et écrire dans un fichier.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Je trouve que vous êtes un peu dur avec moi là ... tout le monde n'a pas votre aisance ou vos connaissances ;).
Autant je suis à l'aise avec la programmation d'une manière générale, mais là le système de cache me pose un souci.
J'aimerais en fait être rassuré sur le point suivant : mettre en cache consiste uniquement à enregistrer le code HTML dans un fichier ? Puis bien sûr enregistrer ce fichier dans l'arborescence du site ?
Je me pose peut-être des problèmes qui n'existent pas ...
Il y a d'ailleurs également autre chose qui me gêne : dans l'archive fournie pour faire l'activité, il n'y a aucun fichier index.php ... cela signifie que c'est à moi de le créer ?
Merci d'avance pour votre aide et votre bienveillance ;).
Je trouve que vous êtes un peu dur avec moi là ... tout le monde n'a pas votre aisance ou vos connaissances ;).
Autant je suis à l'aise avec la programmation d'une manière générale, mais là le système de cache me pose un souci.
J'aimerais en fait être rassuré sur le point suivant : mettre en cache consiste uniquement à enregistrer le code HTML dans un fichier ? Puis bien sûr enregistrer ce fichier dans l'arborescence du site ?
Je me pose peut-être des problèmes qui n'existent pas ...
Il y a d'ailleurs également autre chose qui me gêne : dans l'archive fournie pour faire l'activité, il n'y a aucun fichier index.php ... cela signifie que c'est à moi de le créer ?
Merci d'avance pour votre aide et votre bienveillance ;).
V
- Edité par vincent48 il y a environ 8 heures
Je ne vois pas en quoi j'ai été dur avec vous, je vous ait simplement demandé ce que vous n'aviez pas compris exactement pour l'activité et je vous ai indiqué le principal prérequis à avoir pour le faire.
Non, il ne s'agit pas juste d'écrire le code HTML dans un fichier, comme il est indiqué dans l'activité, le code HTML c'est uniquement pour la mise en cache des vues, il y a également la mise en cache des données, soit la mise en cache des enregistrements récupérés via la base de données.
De plus que pour chaque fichiers de cache, il ne faut pas simplement y écrire le code HTML ou les données sérialisées, mais également et ce sur la première ligne du fichier le timestamp de la génération du cache.
Il y a également la notion de classe à utiliser :
La création d’une classe gérant le cache : la gestion du cache doit se faire grâce à une instance d’une classe que vous créerez au sein de la bibliothèque.
Il vous faut donc lire l'intégralité de l'énoncé de l'activité et s'il y a certains points de l'énoncé que vous ne comprenez toujours pas, dans ce cas là nous le préciser, c'est ce que je disais quand j'avais posé la question dans ma précédente réponse.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Désolé, j'ai certainement mal interprété votre réponse.
Lorsque je reprends cette partie de l'énoncé ...
Vous devrez mettre en cache plusieurs parties du site :
La vue correspondant à la page d’accueil du site. Chacune des news. Toutes les listes de commentaires (une liste de commentaires correspond à l’ensemble des commentaires liés à une news).
D'où une certaine incompréhension de ma part sur la nature des données à enregistrer dans le fichier cache, à moins que cela reste à ma libre appréciation ? Vous m'avez bien répondu qu'il y a différents types de données, mais en relisant la consigne cela ne m'apparaît pas de manière aussi claire. Moi j'avais compris qu'il faut générer le fichier cache à partir de la vue qui est générée pour : la page d'accueil, les news, la liste des commentaires. Donc ce que j'avais compris c'est que le cache ne doit contenir que du HTML. Par contre se pose un autre problème : il est écrit en tête des consignes qu'un fichier cache se compose de deux parties : le timestamp et les données sérialisées ... pour quelle raison est-ce qu'il serait nécessaire de sérialiser une page codée en HTML ?
Bref c'est brouillon dans ma tête j'ai du mal à y voir clair.
Quand il est question de sérialisation, c'est pour les données, soit celles récupérées en base de données.
Quand il est indiqué les différentes parties du site, c'est pour les fichiers de caches de vues et donc les fichiers de caches de vues, c'est bien le code HTML qui est générée, contrairement aux fichiers de caches de données, dans les quelles les données récupérées à la base de donnes, doivent être sérialisées avant d'être sauvegardées dans le fichier.
Donc pour résumer, il est indiqué dans l'énoncé, qu'il faudra faire deux types de fichier de cache :
Les fichiers de cache de vues, soit le code HTML générées des vues (accueil du site, affichage d'une news, toutes les listes de commentaires)
Les fichiers de cache de données, soit les données récupérées via la base de données qui doivent être sérialisées
Pour les deux types, le timestamp de la génération du fichier devra être présent sur la première ligne du fichier.
Donc comme énoncé, les fichiers de cache de données, ce n'est pas facultatif mais obligatoire.
- Edité par Lartak 7 juillet 2019 à 11:22:01
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Par contre je ne sais pas l'intérêt de mettre les données en cache si les vues sont déjà mises en cache. Les vues sont générées à partir des données, donc si les vues sont en cache, quel est l'intérêt de mettre les données en cache ?
Hmmm ...
Philippe2463 a écrit:
Bonsoir Vincent48,
Avez suivi tout le cours en entier avant de vous lancer dans l'activité finale ?
De plus, en prenant le temps, de parcourir le forum dédié à ce cours, vous trouverez des pistes pour rendre un travail correct.
Allez courage !
Philippe
Oui j'ai bien suivi le cours en entier. De ce côté là pas de souci, ce qui ne m'empêche pas de bloquer ;).
Par contre je ne sais pas l'intérêt de mettre les données en cache si les vues sont déjà mises en cache. Les vues sont générées à partir des données, donc si les vues sont en cache, quel est l'intérêt de mettre les données en cache ?
Hmmm ...
Le but d'une activité est de s'assurer que la personne a bien compris le cours, il peut donc arriver que ce qui est demandé dans une activité puisse être répétitif ou pas forcément logique d'un point de vue technique.
Pour cette activité, c'est principalement pour vérifier que la personne ait compris les deux types de caches (données et HTML) et qu'il est capable de les produire.
Car par la suite quand la personne voudra créer sa propre application par exemple, il pourra très bien choisir de mettre en cache seulement le code HTML généré pour certaines parties de son site et pour d'autres de ne mettre en cache que les données.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Salut, j'ai une petite question sur le cours et plus précisément sur les interfaces. Je ne comprend pas à quoi cela sert d'implémenter une interface si c'est pour écrire toute ses fonctions dans la classe. Autant ne rien implémenter.
Quelqu'un pourrait m'expliquer l'utilité, je ne la saisie pas en lisant le cours.
paulTchaa8
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Vincent ERHART
Formateur / Développeur web
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Vincent ERHART
Formateur / Développeur web
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Vincent ERHART
Formateur / Développeur web
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Vincent ERHART
Formateur / Développeur web
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Vincent ERHART
Formateur / Développeur web
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.