Je ne sais pas ce que vous pensez du Design Pattern Observer mais pour moi je crois qu'on pourra faire communiquer notre code et le séparer logiquement dans notre code sans voir besoin de mettre en place un système de notification entre les objets non ?
- Edité par ELJAOUHARI Hamza 14 février 2018 à 13:14:39
Informtion is potential power; Action is everything !
Mohamed3Camara, montrez votre code source il n'est pas évident de se prononcer, j'aimerai voir la logique de votre code car parfois l'erreur peut provenir d'autre part. Par exemple est ce que vous configurez le gestionnaire de base de la donnée avec setAttribute ou un PDO(....,[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION], ...), par exemple si non je vous conseille de le faire.
Le but est d’être meilleur que hier, en apprenant chaque jour quelque chose de nouveau.
Merci à toi @Stéphanete Anguilet j'ai résolu ce problème. ça provenait de ma variable $dateDeNaissance comme sa valeur provenait d'un formulaire j'ai oublié de le convertir en dateTime avant d'insérer.
Mais j'ai un autre souci au niveau de la même requête avec le code d'erreur suivant:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE3\xA9' for column 'ville' at row 1' in C:\wamp64\www\Monsite\traitement\PDO\UtilisateurMan
Je n'arrive pas toujours pas à cerner l'utilité du pattern Observer !
Je comprends bien le concept du design pattern Observer mais je ne vois pas son utilité parce que ma question c'est : A quoi bon t-il de passer par un système de notification pour faire des opérations sur un objet observateur qu'on peut bien faire sans avoir utilisé ce design pattern au premier coup ?
Merci pour vos explications ! J'ai besoin des exemples concrets !
Informtion is potential power; Action is everything !
Salut à tous jusqu'à présent je bloque sur ma réquete d'insertion avec cette erreur :
'SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE3\xA9\xE3\xA9\xE3\xA9...' for column 'nom' at row 1'
Après avoir mis presque tous en utf-8 cette erreur revient mais j'ai remarqué qu'elle n'arrive pas si je redémarre wamp toute fois elle revient pour la prochaine insertion. Du coup je suis obligé de toujours redémarrer à chaque fois que je veux inséré dans la base de données.
Voici les démarches que j'ai suivi jusqu'ici.
$db = new PDO('mysql:host=localhost;dbname=projet;charset=utf8','root','**');
<meta charset="utf-8" />
alter database projet default-character set utf-8
conversion manuelle de tous mes fichiers en utf-8 sans bom
**alter table utilisateur ................................
Venez à mon secours car je ne sais plus quoi faire
J'utilisais quelque part dans mon code certaines fonctions de traitement de chaines comme: htmlspecialchars, trim, ucfirst, stripcslashes et ##d'autres qui dénaturaient l'encodage.
Pour les étoiles dont tu parles là je les ai utilisé parce que je ne veux pas partager mon mot de pass.
Salut , merci pour ton aide premièrement et deuxièmement je crois que ce que tu me dis est trop avancé pour le niveau que je suis sensé démontré au BAC cependant c'est beaucoup plus clair , mais le problème étant que je me dois d'utiliser ce qu'on nous apprends et pas faire du hors programme. Donc c'est un problématique....
Je vais essayer d'en parler à mon prof mais merci quand même , je te tiens au jus
Mais si je devais modifier ton code , pour rajouter des offres exemple un anniversaire , que faudrais-t-il que je fasse
Si le client choisis un anniversaire , avec 10 personne , que dois-je rajouter ??
A+
LEPaul a écrit:
Bonjour ça me fait de la peine de voir. Ta {Form html} et les conditions de réponses, je me permets de te proposé une idée suivant :
Quelque lignes tout comprises : Formulaire - Résultat - Notes rédactionels - Traduction En fin compatible pas erreurs possible, tout ce qu'il a affaire c'est SOIGNES LES TABLEAUX
Je décrit la procédure:
Commencer par ta formulaire HTML en 1- Textes descriptions 2- Champs de saisis en {name}{value}{placeholder} {Tu peu mets plus Ex: required pour ... select }
Pour chaque {GROUPE} je prépare les éléments qui vont bien, ici c'est une array() mais ça pourrait combiné avec une Bd et Json ... Ensuite il me reste à finir la mise en forme et exploités mes tableaux
Tu pourrait crée une class de formulaire avec ce système exemple Class -> function (evenement reservation voir d autre);
il te restent à approfondir
function Sel_XEnum($Aide='', $ValeurSaisie='xyz pour selected',$MonTableau='Ton tableau array' )
{
/*Permet de lire un Tbl array puis traduire pour un selecteur de fichier attention partie option uniqument Exemple : <option value='ABC' selected>TEST</option> Note ca marche pour les tableaux de un et deux dimentions*/
foreach($MonTableau AS $Num =>$Valeur)
{
$Af_Ops=ucfirst(strtolower($Valeur));
$XselecUnite=$Num==$ValeurSaisie?"selected":"";
$Ls.=$Af_Ops==''?"":"<option value='$Num'$XselecUnite>".$Af_Ops."</option>";
}
return "$Ls";
}
/*Declaration langue tu mets ca dans un autre fichier et tu peu faire aussi pour $Langue[Us]-$Langue[Es]$Langue[Viper] pas plus d explication*/
$Langue[fr] = array( Xtype=>"Type d'évènement", Sel_Package=>"Package", XdateResa=>"Date de réservation", Xplaceholder1=>"La date doit être sous forme jour/mois/année",
Sel_Type_Lan=>"LAN collective",
Sel_Type_Conf=>"Conférence/Réunion d'entreprise",
Sel_Type_Anvrsr=>"Anniversaire",
Rslt_Sel_Pckg_1=>"Package entre 5 et 10 personnes : 15000XPF </br> Comprends : </br> -5 PC </br>-2 consoles (1 PS4 et 1 Xbox One) </br>-3 jeux au choix </br>Livraison : 2000XPF </br>TOTAL : ………………………………………20000 XPF",
Rslt_Sel_Pckg_2=>"Package entre 10 et 20 personnes : 20000XPF </br> Comprends : </br> -7 PC </br>-4 consoles (2 PS4 et 2 Xbox One) </br>-6 jeux au choix </br>Livraison : 4000XPF </br>TOTAL : ………………………………………26000 XPF",
Rslt_Sel_Pckg_3=>"Package entre 20 et 30 personnes : 25000XPF </br> Comprends : </br> -9 PC </br>-6 consoles (3 PS4 et 3 Xbox One) </br>-9 jeux au choix </br>Livraison : 6000XPF </br>TOTAL : ………………………………………34000 XPF",
Rslt_Sel_Pckg_4=>"Package entre 30 et 40 personnes : 30000XPF </br> Comprends : </br> -11 PC </br>-8 consoles (4 PS4 et 4 Xbox One) </br>-12 jeux au choix </br>Livraison : 8000XPF </br>TOTAL : ………………………………………42000 XPF",
Rslt_Sel_Pckg_5=>"Package entre 40 et 50 personnes : 35000XPF </br> Comprends : </br> -14 PC </br>-10 consoles (4 PS4 ,4 Xbox One et 2 Nintendo Switch) </br>-15 jeux au choix </br>Livraison : 11000XPF </br>TOTAL : ………………………………………52000 XPF",
Ops_Pckg_1=>"5-100 personnes (15000 francs)",
Ops_Pckg_2=>"10-20 personnes (20000 francs)",
Ops_Pckg_3=>"20-30 personnes (25000 francs)",
Ops_Pckg_4=>"30-40 personnes (30000 francs)",
Ops_Pckg_5=>"40-50 personnes (35000 francs)",
);
/*Declaration de sélecteur et plus*/
$Sel_Package= array ( Num1=>"".$Langue[fr][Ops_Pckg_1]."",
Num2=>"".$Langue[fr][Ops_Pckg_2]."", Num3=>"".$Langue[fr][Ops_Pckg_3]."", Num4=>"".$Langue[fr][Ops_Pckg_4]."", Num5=>"".$Langue[fr][Ops_Pckg_5]."" );
$Sel_Type= array ( Lan=>"".$Langue[fr][Sel_Type_Lan]."", Conf=>"".$Langue[fr][Sel_Type_Conf]."",Annif=>"".$Langue[fr][Sel_Type_Anvrsr]."");
/*Prépare Resultat*/
$Resul_Sel_Package= array ( Num1=>"".$Langue[fr][Rslt_Sel_Pckg_1]."", Num2=>"".$Langue[fr][Rslt_Sel_Pckg_2]."", Num3=>"".$Langue[fr][Rslt_Sel_Pckg_3]."", Num4=>"".$Langue[fr][Rslt_Sel_Pckg_4]."", Num5=>"".$Langue[fr][Rslt_Sel_Pckg_5]."" );
/*Prepation des groupes de saisis et retourn des POST[*.*] */
$Grp_Saisis_Type= array (
Xtype=>"<select name=Xtype> ".Sel_XEnum($Aide='',$ValX_Selected=$_POST[Xtype],$Sel_Type )." </select>",
Sel_Package=>"<select name=Sel_Package> ".Sel_XEnum($Aide='',$ValX_Selected=$_POST[Sel_Package],$Sel_Package )." </select>",
XdateResa=>"<input type='text' name='XdateResa' value='$_POST[XdateResa]' size='45' placeholder='".$Langue[fr][Xplaceholder1]."'> <!--J ai retire required minlength='10' maxlength='10' pour test -- >",
Test_Ligne_En_trop=>"Tu voir ici Pas de declarion. ton script fonctionne et pas erreur",
);
/*ON SORT RÉSULTAT PRÉPARE SI _POST[XCondition]!='Test'*/
if($_POST[XCondition]=='Test') {
foreach($Grp_Saisis_Type AS $Trad =>$Champ_Sais)
{$Conversion="$_POST[$Trad]";
/*Cas POST exceptionel*/
if($Trad=='Xtype')
{$ConversionAvn="$_POST[Xtype]"; $JoliResultat.= "<p>".$Langue[fr][$Trad]."<br>$Sel_Type[$ConversionAvn]</p>";}
else
{$JoliResultat.= $Resul_Sel_Package[$Conversion]==''?"<p>".$Langue[fr][$Trad]."<br>$Conversion</p>":"<p>".$Langue[fr][$Trad]."<br>$Resul_Sel_Package[$Conversion]</p>";}
}
}
/*Partie HTML*/
echo"$JoliResultat<table class='normal'><form action='?' name='booking' method='POST'><br><INPUT type='submit' value='Envoyer'><br> <input type='hidden' name='XCondition' value='Test'>";
foreach($Grp_Saisis_Type AS $Trad =>$Champ_Sais) {echo"\t<tr>\n<td>".$Langue[fr][$Trad]."</td>\n<td>$Champ_Sais</td>\n</tr> \n";}
echo"</table> Et ajout ce que tu veux </form>";
Ps: Note J'ai observé 2 détails qui pourrait
1 : Regarde dans le champs t'as utilisé name="date" {input type="text" name="date" required size="45"} Or le mot {date},{type} sont des fonctions native de php et d'autres donc il peu avoir des problème plus tard Donc pour correction j'ai mis un {X} devant le date
2 : Essai de gardés les même constance dans le nomination des variables, pour plus tard
Or le Variable {type} commence avec un ->[t]. et plus loin Variable {Package} commence avec un ->[P]
C'est peu être rien quand tu les appelle un par un, mais quant tu commence à faire de GRAND tableau. C'est la merde croie moi tu perdra des heures et des heurs voir des jours juste par ce que ta déclaration commence par un minuscule puis les résultats de ce dernier tu commence par Majuscule
Bonne continuation
Tiens moi au courant
- Edité par LEPaul il y a environ 13 heures
- Edité par Infectious_WEB 27 février 2018 à 4:42:00
Bon. Je suis le cours/MOOC POO PHP. Tout va bien. Mais quelques choses m'ont visiblement échappées. En effet, je rencontre une erreur 500 543 lors de l'affichage d'un nouveau module. Je l'ai créé en reprennant la démarche pour le Module News créé dans le MOOC. Visiblement cela vient du PDO. Le code d'origine de la fonction getList que j'ai intégré dans le nvModule :
public function getList($debut = -1, $limite = -1)
{
$sql = 'SELECT * FROM nvModule ORDER BY id DESC';
if ($debut != -1 || $limite != -1)
{
$sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
}
$requete = $this->dao->query($sql);
$requete->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, '\Entity\nvModule');
$listeEA = $requete->fetchAll();
$requete->closeCursor();
return $listeEA;
}
L'erreur 500 disparait quand je modifie la fonction de cette façon :
public function getList($debut = -1, $limite = -1)
{
$sql = 'SELECT * FROM nvModule ORDER BY id DESC';
if ($debut != -1 || $limite != -1)
{
$sql .= ' LIMIT '.(int) $limite.' OFFSET '.(int) $debut;
}
$requete = $this->dao->query($sql);
$listeEA = $requete->fetchAll();
$requete->closeCursor();
return $listeEA;
}
Comme vous pouvez le voir, le pb disparaît quand je n'uitilise plus \PDO::xxxx et la class nvModule.
Je ne vois vraiment pas de quoi cela peut venir. Une idée ?
J'ai un problème avec ce cours en particulier avec le TP Mini jeu de combat.
Voici le code qui me pose problème en particulier le UPDATE de $perso.
...
$retour = $perso->frapper($persoAFrapper); // On stocke dans $retour les éventuelles erreurs ou messages que renvoie la méthode frapper.
switch ($retour)
{
case Personnage::CEST_MOI :
$message = 'Mais... pourquoi voulez-vous vous frapper ???';
break;
case Personnage::PERSONNAGE_FRAPPE :
$message = 'Le personnage a bien été frappé !';
$manager->update($perso);
$manager->update($persoAFrapper);
break;
case Personnage::PERSONNAGE_TUE :
$message = 'Vous avez tué ce personnage !';
$manager->update($perso);
$manager->delete($persoAFrapper);
break;
}
...
En effet lorsque $perso attaque persoAFrapper aucun "paramètre" (attribut) de $perso ne change. Alors pourquoi faire un UPDATE sur ce personnage ? Par contre $persoAFrapper lui voit son attribut $_degats modifié suite à l'attaque donc un UPDATE de ce personnage est nécessaire pour enregistrer dans la base la nouvelle valeur de $degats...
Donc en mode local ça donne bien : 127.0.0.1 Ou localhost Maintenant que je le met sur mon serveur {chez 1and1.fr} Ca donne ça : 2a01:cb19:80f1:9200:4425:d65f:b48a:7e85
Bien supposons cet chaine {2a01....} est adresse dynamique distribué par Ipv6 (La box) Comment le convertir en clair 109.220.135.230
(C'est vieux comme internet Mais quand ça ne veux pas )
Merci pour votre aide
Comme personne m'as aidé je suis quand même trouvé et solutionné
N'attendez plus rien de ma part mes amis (Si on peu dire )
- Edité par LEPaul 26 mars 2018 à 12:26:42
Fidèle résumé de mes capacités ! Bon à rien, mauvais à tout. Faire le moins, mais BIEN
Dans la création d'un framework, dans la classe Route il y a une fonction que j'arrive pas à comprendre. Je me demandais si quelqu'un serait assez gentil pour éclairer ma lanterne.
public function match($url){
if(preg_match('`^'. $this->url .'$`', $url, $matches)){
return $matches;
}else{
return false;
}
}
Bonjour, j'espère que c'est ici qu'on pose les questions.
je souhaiterais maitriser la notion d'exécution d'une requête dans un lien. En effet cette notion est utilisée dans le 1er tp de POO PHP, et permet donc d'incrémenter de 5 les dégâts de façon ultra dynamique. Pourriez vous m'aider à vraiment comprendre comment fonctionne ce lien, car je trouve les explications du cour trop condensées, pour un novice comme moi.
Je ne suis pas un pro mais je peux te décortiquer l'instruction
echo '<a href="?frapper=', $unPerso->id(), '">
Donc on crée un lien, avec l'ID du personnage dedans qu'on récupérera dans $_GET.
htmlspecialchars($unPerso->nom())
On insère le nom du personnage. C'est ce que l'utilisateur verras comme texte pour le lien.
(dégâts : ', $unPerso->degats(), ')<br />';
On affiche les dégâts, et ensuite on fait un retour de ligne
La ligne ressemblera donc a : Gandalf (dégâts: 5) Avec un lien cliquable sur Gandalf qui pointera vers : adresseDuFichier?frapper=idDuPerso
Quand tu vas cliquer dessus tu va récupérer la valeur en get(la valeur de $_GET['frapper'] qui correpond à l'id du perso) et lui infliger les dégâts, comme tu as l'id du personnage.
Ce qui m'as perturbé dans ce tp, c'est que l'auteur du cours utilise les dégâts reçu comme indicateur de santé. Plutôt que les PV restants.
J'espère que j'ai pu t'aider, moi aussi je suis en apprentissage.
Je suis novice en PHP. J'ai un problème avec le TP: mini jeu de combat. J'ai bien compris le cours. Et lors de l'exécution du TP, aucune réaction ne se passe. Je reste sur le formulaire avec le champ texte et les deux boutons submits. le seul affichage qu'il y a est le nombre de personnages qui existent dans la base de données et que j'ai inséré à l'aide de phpmyadmin.
Désespérée, j'ai recopié le code du prof. là aussi rien ne fonctionne.
Voilà la classe Personnages :
<?php
class Personnages{
//attributs
private $_id;
private $_nom;
private $_degats;
//declaration des constantes par rapport à la force
const CEST_MOI = '1';
const PERSONNAGE_TUE = "2";
const PERSONNAGE_FRAPPE = "3";
//declaration des attributs statiques
private static $texteADire = "je suis le personnage le plus fort. j\'ai gagné tous les combats. Personne ne peut me battre !.";
//constructeurs -> hydradation à la création de l'objet
public function __construct(array $donnees){
$this->hydrate($donnees);
}
//fonction hydrate
public function hydrate(array $donnees){
foreach ($donnees as $key => $value) {
$setter = 'set'.ucfirst($key);
if(method_exists($this, $setter)){
//Appel du setter
$this->$setter($value);
}
}
}
//getters
public function id(){
return $this->_id;
}
public function nom(){
return $this->_nom;
}
public function degats(){
return $this->_degats;
}
//setters
public function setId($id){
$id = (int)$id;
if($id > 0){
$this->_id = $id;
}
}
public function setNom($nom){
if(is_string($nom) && strlen($nom) <=50){
$this->_nom = $nom;
}
}
public function setDegats($degats){
$degats = (int)$degats;
if($degats >= 0 && $degats <=100){
$this->_degats = $degats;
}else{
trigger_error('les dégats d\'un personnage doitvent être supérieures ou égales à zéro et ne doivent pas dépasser 100 !.',E_USER_WARNING);
return;
}
}
public function frapper($perso){
if($this->id() == $perso->id()){
return self::CEST_MOI;
}
return $perso->recevoirDegats();
}
public function recevoirDegats(){
$this->_degats+=5;
if($this->degats() >= 100){
return self::PERSONNAGE_TUE;
}
return self::PERSONNAGE_FRAPPE;
}
public function nomValide(){
return !empty($this->_nom);
}
}
?>
et voici le code de la classe manager :
<?php
class PersonnagesManager{
//instance de PDO
private $_db;
//constructeurs
public function __construct($db){
$this->setDb($db);
}
//les méthodes CRUD
public function add(Personnages $perso){
//preparation de la requete d'insertion
//assignation des valeurs pour le nom, localisation, forcePerso, degats, niveau, experience
//exécution de la )
$q = $this->_db->prepare('INSERT into personnages(nom, degats)values(:nom, :degats)');
$q->bindValue(':nom',$perso->nom(),PDO::PARAM_STR);
$q->bindValue(':degats',$perso->degats(),PDO::PARAM_INT);
$q->execute();
/*$perso->hydrate([
'id' => $this->_db->lastInsertId(),
'degats' => 0
]);*/
}
public function count(){
//exécute une requête count et retourne le nombre de résultats retourné
/*$q = $this->_db->query('select count(*) from personnages');
$q->fetchColumn();
return $q;*/
return $this->_db->query('select count(*) from Personnages')->fetchColumn();
}
public function delete(Personnages $perso){
//exécute une requête de type delete
$this->_db->exec('delete from personnages where id='.$perso->id());
}
public function exists($info){
//si le paramètre est un entier, c'est qu'on a fourni un identifiant
//on exécute une requête count() avec une clause where et on retourne un boolean
//sinon, c'est qu'on a passé un nom
//on exécute une requête count() avec une clause where et on retourne un boolean
if(is_int($info)){
return (bool) $this->_db->query('SELECT count(*) from personnages where id='.$info)->fetchColumn();
}
$q = $this->_db->prepare('SELECT count(*) from personnages where nom = :nom');
$q->execute([':nom' => $info]);
return(bool) $q->fetchColumn();
}
public function get($info){
//exécute une requête de type select avec une clause where et retourne un objet de type Personnage
if(is_int($info)){
$q = $this->_db->prepare('SELECT id, nom, degats from personnages where id='.$info);
$donnees = $q->fetch(PDO::FETCH_ASSOC);
return new Personnages($donnees);
}else{
$q = $this->_db->prepare('SELECT id, nom, degats from Personnages where nom= :nom');
$q->execute([':nom' => $info]);
return new Personnages($donnees);
}
}
public function getList($nom){
//retourne la liste des personnages dont le nom n'est pas $nom
//le résultat sera un tableau d'instances de personnages
$persos = [];
$q = $this->_db->prepare('SELECT id, nom, degats from personnages where nom <> :nom order by nom');
$q->execute([':nom' => $nom]);
while($donnees = $q->fetch(PDO::FETCH_ASSOC)){
$persos [] = new Personnages($donnees);
}
return $persos;
}
/*public function getList(){
// retourne la liste de tous les personnages
$persos = [];
$q = $this->_db->query('select id, nom, degats from personnages order by nom');
while($donnees = $q->fetch(PDO::FETCH_ASSOC)){
$persos[] = new Personnages($donnees);
}
return $persos;
}*/
public function update(Personnages $perso){
// prépare une requête de type update
//assignation des valeurs à la requête
//exécution de la requête
$q = $this->_db->prepare('update table personnages set degats = :degats where id = :id');
$q->bindValue(':degats',$perso->degats(),PDO::PARAM_INT);
$q->bindValue(':id',$perso->id(),PDO::PARAM_INT);
$q->execute();
}
//pas besoin d'accesseurs -> uniquement un setter
public function setDb(PDO $db){
$this->_db = $db;
}
}
?>
Et voici la fichier formulaire :
<?php
function chargerClasse($classeName){
require $classeName.'.php';
}
spl_autoload_register('chargerClasse');
session_start();
if(isset($_GET['deconnexion'])){
session_destroy();
header('Location: .');
exit();
}
$db = new PDO('mysql:host=localhost;dbname=tests','root','');
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$manager = new PersonnagesManager($db);
if(isset($_SESSION['perso'])){
$perso = $_SESSION['perso'];
}
if(isset($_POST['creer']) && isset($_POST['nom'])){
$perso = new Personnages([
'nom' => $_POST['nom'],
'degats' => 0
]);
var_dump($perso);
if(!$perso->nomValide()){
$message='le nom choisi est invalide !.';
unset($perso);
}
elseif($manager->exists($perso->nom())){
$message='le nom existe déjà dans la base de données !.';
unset($perso);
}
else
{
$manager->add($perso);
}
}
elseif(isset($_POST['utiliser']) && isset($_POST['nom'])){
if($manager->exists($_POST['nom'])){
$perso = $manager->get($_POST['nom']);
}
else
{
$message='le nom du personnage n\'existe pas dans la base !.';
}
}
elseif(isset($_GET['frapper'])){
if(!isset($perso)){
$message='Merci de créer un personnage ou de vous identifier !.';
}
else
{
if(!$manager->exists((int) $_GET['frapper'])){
$message = 'Le personnage que vous voulez frapper n\'existe pas !.';
}
else
{
$persoAFrapper = $manager->get((int) $_GET['frapper']);
$retour = $perso->frapper($persoAFrapper);
switch($retour){
case Personnages::CEST_MOI :
$message =' Mais .... voulez-vous vous frapper ???';
break;
case Personnages::PERSONNAGE_FRAPPE :
$message='Le personnage a bien été frappé !.';
$manager->update($perso);
$manager->update($persoAFrapper);
break;
case Personnages::PERSONNAGE_TUE :
$message='Vous avez tué ce personnage !.';
$manager->update($perso);
$manager->delete($persoAFrapper);
break;
}
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>TP1 : Jeu de Combat</title>
<meta charset="utf-8" />
</head>
<body>
<p>Le nombre de personnages créés : <?= $manager->count() ?></p>
<?php
if(isset($message)){
echo '<p>'.$message.'</p>';
}
if(isset($perso))
{
?>
<p><a href="?deconnexion=1">Déconnexion</a></p>
<fieldset>
<legend>Mes informations</legend>
<p>
Nom : <?= htmlspecialchars($perso->nom()) ?> </br>
Dégats : <?= $perso->degats() ?>
</p>
</fieldset>
<fieldset>
<legend>Qui frapper ?</legend>
<p>
<?php
$persos = $manager->getList($perso->nom());
if(empty($persos)){
echo 'Personne à frapper !.';
}
else
{
foreach($persos as $unPerso){
//echo '<a href="?frapper='.$unPerso->id().'">'.htmlspecialchars($unPerso->nom()).'</a>
//(dégâts : '.$unPerso->degats().') <br/>';
echo '<a href="?frapper=', $unPerso->id(), '">', htmlspecialchars($unPerso->nom()), '</a> (dégâts : ', $unPerso->degats(), ')<br />';
}
}
?>
</p>
</fieldset>
<?php
}
else
{
?>
<from action="" method="post">
<p>
Nom : <input type="text" name="nom" maxlength="50" />
<input type="submit" value="Créer ce personnage" name="creer" />
<input type="submit" value="Utiliser ce personnage" name="utiliser" />
</p>
</from>
<?php
}
?>
</body>
</html>
<?php
if(isset($perso)){
$_SESSION['perso'] = $perso;
}
Voilà la capture d'ecran : il n' y a pas de message d'erreurs. Je clique sur le bouton créer ce personnage sans résultat.
SVP quelqu'un pourrait m'aider à résoudre ce problème.
J'ai enfin résolu le problème. En effet, j'ai marqué <from> au lieu de <form>. C'est pourquoi, quand je clique sur le bouton 'créer ce personnage', rien ne se passe. C'est une erreur d'inattention.
Là, je pourrai enfin continuer la suite du cours.
Problème résolu.
Merci
toute théorie est grise, seule l'arbre de la vie est verte.
Bonjour,
J'ai enfin résolu le problème. En effet, j'ai marqué <from> au lieu de <form>. C'est pourquoi, quand je clique sur le bouton 'créer ce personnage', rien ne se passe. C'est une erreur d'inattention.
Là, je pourrai enfin continuer la suite du cours.
Problème résolu.
Merci
- Edité par dadaapocalypse 29 mars 2018 à 13:50:00
Bonjour je suis actuellement entrain de mettre sur pied un site de ecommerce et j'aimerais savoir comment gerer les images des produits postés par des vendeurs dans ma bd sachant qu'un produit peut avoir plusieurs photos
Christophe Vallot
Matthieu Charnacé