Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Programmez en orienté objet en PHP

    23 juin 2017 à 14:39:16

    Bonjour, tu as une erreur dans la fonction delete mais je ne pense pas que le pb vienne de là pour l'écriture dans la bdd.

    essaye :

    public function delete(Personnage$Perso)
    {
    $this->_db->exec('DELETE FROM personnages WHERE id='.$perso->id();
    }

    Après, es-tu sûr que le password pour connexion BBD est 'root'? pour mon cas je ne dois rien remplir donc je mets'' dans le code.



    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2017 à 19:30:35

      bon, je viens de tester ça,

        <?php
        
        $perso= new Personnage([
            'nom'=>'victor',
            'forcePerso'=>5,
            'degats'=>0,
            'niveau'=>1,
            'experience'=>0
        ]);
        
         try
          {
              $db = new PDO('mysql:host=localhost;dbname=jeuCombat;charset=utf8','root','root');
              
              
          }
          catch (Exception $e)
          {
              die('Erreur : '. $e->getMessage());
          }
        
        
        //$db = new PDO('mysql:host=localhost;dbname=jeuCombat','root','root');
        //$manager = new personnagesManager($db);
        
        //$manager->add($perso);
          
           $q = $this->_db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) Values(:nom, :forcePerso, :degats, :niveau ,:experience)');
      $q->bindValue(':forcePerso',$perso->forcePerso(), PDO::PARAM_INT); $q->bindValue(':degats',$perso->degats(), PDO::PARAM_INT); $q->bindValue(':niveau',$perso->niveau(), PDO::PARAM_INT); $q->bindValue(':experience',$perso->experience(), PDO::PARAM_INT); $q->bindValue(':id', $perso->id(), PDO::PARAM_INT); $q->execute(); ?>

      ca ne marche pas. je ne pense pas que cela vienne de la connexion vu que si je fait en direct (sans passer par le manager :

      $q = $db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) VALUES(:nom, :forcePerso, :degats, :niveau ,:experience)');
           
        $q->execute(array(
            'nom'=>'victor',
            'forcePerso'=>5,
            'degats'=>0,
            'niveau'=>1,
            'experience'=>0));

      Merci lovcode, j'ai corrigé. à force de tester, effacer, recopier les copié collé se mélangent. Pour le root, je suis sur mac, et en général pc -> 'root', '' et mac 'root', 'root' (du moins il me semble que c'est ainsi)

      bon, j'ai fait ma page connexion.php avec une variable qui me dit si je suis connecté ou pas, et une petite phrase en fin de page pour voir si le programme s’exécute jusqu'au bout.

      Si je ne met pas de php dans mon index, seulement l'appel de connexion.php et l'appel de variable de connexion, je vois que je suis connecté et je vois ma fin de programme.

      si je fais un appel à un nouveau manager, j'ai plus ma fin de fichier. C'est donc cette connexion qui pose problème.

      je continue de chercher pourquoi.

      Pas trop compris là. J'ai tout commenté dans mon personnagesManager, refait ma page externe pour la connection bdd, fait une function bonjour() dans pagesManager (qui affiche juste bonjour, pour voir si j’accède à la classe) -> mon $manager -> bonjour() fonctionne.

      De là, j'ai tout décommenté et refait la fonction add en mettant les variables une à une. j’arrive au même code qu'avant .... et ça marcheo_O:waw:. l

      -
      Edité par jissey 27 juin 2017 à 16:42:31

      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2017 à 12:18:36

        Bonjour à tous,

        Je suis le cours sur le livre programmez en orienté objet en PHP. J'en suis aux annotations et j'ai un gros soucis de compréhension avec la fonction checkContraints() page 237. Je ne sais pas si d'autre personnes ont eu le même souci que moi car je n'ai rien trouvé sur le forum et j'ai déjà posé ma question plusieurs fois sur le forum PHP mais sans succès.Donc là, c'est ma dernière tentative.

        Le problème est le suivant je n'arrive pas à tester la vérification des attributs de ClassInfos et j'ai toujours une belle fatal error en ligne 22 et Exception en ligne 22 j'ai bien fait comme dans le livre (j'ai fais trois fichier index.php, Personnage.class.php et MyAnnotations.php) voici les codes des fichiers (je n'ai mis que l’essentiel ).

        Personnage.class.php

        /**
        * @Table("personnages") 															 valeur
        * @Type({'brute', 'guerrier', 'magicien'}) 						
        * @Type2({meileur = 'magicien', 'moins bon' = 'brute', 'neutre' = 'guerrier'}) 		
        * @UneAnnotation({unecle = 1337, {unecle2 = true, unecle3 = 'une valeur'}})			
        * @ClassInfos({author = Vyk12, version = 1.0})							
        */
        class Personnage
        {
        	// du code
        }
        

        MyAnnotations.php

        class Table extends Annotation{}			
        class Type extends Annotation{}				
        class Type2 extends Annotation{}			
        class UneAnnotation extends Annotation{}
        
        
        class ClassInfos extends Annotation		
        {
        	public $author;
        	public $version;
        	
        	public function checkConstraints($target)
        	{
        		if(!is_string($this -> author))
        		{
        			throw new Exception('L\'auteur doit être une chaine de caractères <br />') //Fatal error !!!
        		}
        		if(!is_numeric($this -> version))
        		{
        			throw new Exception('Le numéro de version doit être un nombre valide <br />');
        		}
        	}
        }


        Index.php

        require '.././addendum/annotations.php';
        require 'MyAnnotations.php';
        require 'Personnage.class.php';
        
        $reflectedClass = new ReflectionAnnotatedClass('Personnage');
        
        try
        {
        	$classInfos = $reflectedClass -> getAnnotation('ClassInfos');
        	echo $classInfos -> value['author'] . ' ';
        	echo $classInfos-> value['version'];
        }
        catch(Exception $e)
        {
        	echo 'Erreur :' . $e -> getMessage();
        }

        j'ai mis les instructions dans un bloc try/catch, ce qui me semblait logique mais ça ne fonctionne pas. Je pense que checkConstraints() est appelé automatiquement lors de l'assignation des valeurs aux attributs de l'instance ClassInfos (je n'en suis pas sûr) mais je ne comprends pas pourquoi j'ai des erreurs. quelqu'un aurait il une idée car là je sèche ? j'ai essayé d'autres test plus ou moins farfelus et rien ne marche :( je tourne en rond et ça m’énerve un peu surtout que ce n'est pas super bien expliqué et pas très logique.
        merci pour votre aide

        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2017 à 19:54:16

          Bonjour

          Je débute en PHP OO et j'ai une question toute bête sur le cours. J'en suis à la manipulation des données et je teste les différentes méthodes : insertion, mise à jour et suppression.

          J'ai réussi à faire des insertions. Pour la mise à jour et le delete est-ce qu'il y'a un autre moyen de récupérer l'id du perso ou il faut le mettre obligatoirement dans l'hydratation ?

          Voici mon code :

          gestion_bdd.php

          <?php 
          
          function chargerClasse($classe)
          {
          	require $classe . '.php'; // On inclut la classe correspondante au paramètre passé
          }
          
          spl_autoload_register('chargerClasse'); // On enregistre la fonction en autoload pour qu'elle soit appelée dès qu'on instanciera une classe non déclarée.
          
          $perso = new Personnage();
          
          $perso->hydrate(array(
            'id' => 2,
            'nom' => 'Toto',
            'forcePerso' => 5,
            'degats' => 5,
            'niveau' => 1,
            'experience' => 0  
          ));
          
          $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
          $manager = new PersonnagesManager($db);
              
          //$manager->add($perso);
          foreach ($manager->getList() as $persos)
          {
          	// echo $persos->id();
          }
          
          // var_dump($perso);
          
          $manager->update($perso);
          
          ?>



          PersonnagesManager.php

          <?php
          
          class PersonnagesManager
          {
            private $_db; // Instance de PDO
          
            public function __construct($db)
            {
              $this->setDb($db);
            }
          
            public function add(Personnage $perso)
            {
              $q = $this->_db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) VALUES(:nom, :forcePerso, :degats, :niveau, :experience)');
          
              $q->bindValue(':nom', $perso->nom());
              $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
              $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
              $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
              $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
          
              $q->execute();
            }
          
            public function delete(Personnage $perso)
            {
              $this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->id());
            }
          
            public function get($id)
            {
              $id = (int) $id;
          
              $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
              $donnees = $q->fetch(PDO::FETCH_ASSOC);
          
              return new Personnage($donnees);
            }
          
            public function getList()
            {
              $persos = [];
          
              $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages ORDER BY nom');
          
              while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
              {
                $persos[] = new Personnage($donnees);
              }
          
              return $persos;
            }
          
            public function update(Personnage $perso)
            {
              $q = $this->_db->prepare('UPDATE personnages SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = :id');
          
              $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
              $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
              $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
              $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
              $q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
          
              $q->execute();
            }
          
            public function setDb(PDO $db)
            {
              $this->_db = $db;
            }
          }
          ?>

          Personnage.php

          <?php
          class Personnage
          {
            private $_id;
            private $_nom;
            private $_forcePerso;
            private $_degats;
            private $_niveau;
            private $_experience;
          
          
            // Un tableau de données doit être passé à la fonction (d'où le préfixe 'array')
            public function hydrate(array $donnees)
            {
              foreach ($donnees as $key => $value)
              {
                // On récupère le nom du setter correspondant à l'attribut.
                $method = 'set'.ucfirst($key);
          
                // Si le setter correspondant existe.
                if (method_exists($this, $method))
                {
                  // On appelle le setter.
                  $this->$method($value);
                }
              }
            }
          
            public function __construct($donnees = []) {
           
                 $this->hydrate($donnees);
           
             }
          
          
            // 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 nombre entier.
              // Si c'en était déjà un, rien ne changera.
              // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près, mais rien d'important ici).
              $id = (int) $id;
              
              // On vérifie ensuite si ce nombre est bien strictement positif.
              if ($id > 0)
              {
                // Si c'est le cas, c'est tout bon, on assigne la valeur à l'attribut correspondant.
                $this->_id = $id;
              }
            }
          
            public function setNom($nom)
            {
              // On vérifie qu'il s'agit bien d'une chaîne de caractères.
              if (is_string($nom))
              {
                $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 >= 0 && $niveau <= 100)
              {
                $this->_niveau = $niveau;
              }
            }
          
            public function setExperience($experience)
            {
              $experience = (int) $experience;
              
              if ($experience >= 0 && $experience <= 100)
              {
                $this->_experience = $experience;
              }
            }
          }
          ?>

          Merci



          -
          Edité par Mokhona 27 juin 2017 à 19:55:02

          • Partager sur Facebook
          • Partager sur Twitter
            28 juin 2017 à 10:19:59

            KaLaKi29 a écrit:

             Bonjour,

            J'ai un petit problème concernant la première partie : manipulation de données.

            J'ai repris le script du chapitre pour stocker une information dans la base de donnée mais ça ne fonctionne pas.

            Je pense que mon problème vient peut-être du fait que je n'ai pas fais l'hydratation.

            Merci pour votre aide.

            Voici mon script en 2 fichiers :

            1er : personnage.php

            <?php
            class Personnage
            {
            	private $_id;
            	private $_nom;
            	private $_forcePerso;
            	private $_degats;
            	private $_niveau;
            	private $_experience;
            
            
            
            	// GUETTER //
            	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;
            	}
            
            	// SETTER //
            	public function setId($id)
            	{
            		$id = (int) $id;
            		if ($id > 0)
            		{
            			$this->_id = $id;
            		}
            	}
            
            	public function setNom($nom)
            	{
            		if (is_string($nom))
            		{
            			$this->_nom = $nom;
            		}
            	}
            
            	public function setForcePerso($forcePerso)
            	{
            		$forcePerso = (int) $forcePerso;
            		if ($forcePerso >= 1 AND $forcePerso <= 100)
            		{
            			$this->_forcePerso = $forcePerso;
            		}
            	}
            
            	public function setDegats($degats)
            	{
            		$degats = (int) $degats;
            		if ($degats >= 0 AND $degats <= 100)
            		{
            			$this->_degats = $degats;
            		}
            	}
            
            	public function setNiveau($niveau)
            	{
            		$niveau = (int) $niveau;
            		if ($niveau >= 1 AND $niveau <= 100)
            		{
            			$this->_niveau = $niveau;
            		}
            	}
            
            	public function setExperience($experience)
            	{
            		$experience = (int) $experience;
            		if ($experience >= 1 AND $experience <= 100)
            		{
            			$this->_experience = $experience;
            		}
            	}
            
            
            }
            
            
            ?>



            2ème :personnageManager.php

            <?php
            	require 'personnage.php';
            ?>
            
            <?php
            class personnageManager
            {
            	private $_db;
            
            	public function __construct($db)
            	{
            		$this->setDb($db);
            	}
            	// SETTER _db //
            	public function setDb($db)
            	{
            		$this->_db = $db;
            	}
            
            	public function add(Personnage $perso)
            	{
            		$q = $this->_db->prepare('INSERT INTO (nom, forcePerso, degats, niveau, experience) VALUES (:nom, :forcePerso, :degats, :niveau, :experience)');
            		$q->bindValue(':nom', $perso->nom());
            		$q->bindValue(':forcePerso', $perso->forcePerso());
            		$q->bindValue(':degats', $perso->degats());
            		$q->bindValue(':niveau', $perso->niveau());
            		$q->bindValue(':experience', $perso->experience());
            		$q->execute();
            	}
            
            	public function delete(Personnage $perso)
            	{
            		$this->_db->exec('DELETE FROM personnage WHERE id = '. $perso->id());
            	}
            
            	public function update(Personnage $perso)
            	{
            		$q = $this->_db->prepare('UPDATE personnage SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = :id');
            		$q->bindValue(':forcePero', $perso->forcePerso());
            		$q->bindValue(':degats', $perso->degats());
            		$q->bindValue(':niveau', $perso->niveau());
            		$q->bindValue(':experience', $perso->experience());
            		$q->bindValue(':id', $perso->id());
            		$q->execute();
            	}
            
            	public function get($id)
            	{
            		$id = (int) $id;
            		$q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage WHERE id = ' . $id);
            		$donnees = $q->fetch(PDO::FETCH_ASSOC);
            		return new Personnage($donnees);
            	}
            
            	public function getList()
            	{
            		$perso = [];
            
            		$q = $this->_db->query('SELECT id, nom , forcePerso, degats, niveau, experience FROM personnage ORDER BY nom');
            
            		while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
            		{
            			$perso[] = new Personnage($donnees);
            		}
            		return $perso;
            	}
            }
            
            
            	$perso = new Personnage([
            		'nom' => 'Maxime',
            		'forcePerso' => 5,
            		'degats' => 0,
            		'niveau' => 1,
            		'experience' => 0
            	]);
            
            	
            
            	$db = new PDO('mysql:host=localhost;dbname=personnage;charset=utf8', 'root', '');
            	$manager = new PersonnageManager($db);
            
            	$manager->add($perso);
            
            
            ?>



            -
            Edité par KaLaKi29 30 mai 2017 à 11:46:47


            ALors dans ta classe personnage il manque une : 

            public function __construct(array $data){
                    foreach($data as $key => $value){
                        
                        $method = 'set'.ucfirst($key);
                        
                        if(method_exists($this,$method))
                        {
                           $this->$method($value); 
                        }
                    }
                }

            et dans ton fichier PersonnageManager.php , tu ne dois avoir que TA CLASSE .
            Si tu veux unir les 2 classes , tu créé un fichier avec :

            function chargerClasse($classe){
                require $classe . '.php';
            }
            
            spl_autoload_register('chargerClasse');
            $perso->new Personnage(['nom'=>'Maxime',
            'forcePerso'=>'49',
            'niveau'=>'99',
            'degats'=>'30',
            'experience'=>'3']);
            $manager->new PersonnageManager($db);



             de sorte a ce que quand tu vas créer tes objets, aussitôt les classes seront incluses automatiquement dans ton fichier. si tu as 40 classes, tu vas pas faire des require 'maclasse34.php' ; et de plus ça sera plus clair dans la compréhension de ton code.

            DONC LA JE TIENS A SIGNALER pour tous ceux qui vont chercher comme des perdus pourquoi ça marche pas dans 

            Manipulation de données stockées  du cours PROGRAMMEZ EN ORIENTÉ OBJET EN PHP : dans la classe de personnage , a la place de:

            public fonction hydrate(array $donnees) , 
            il y a en théorie normalement une public fonction __construct(array $donnees) . pour que cela fonctionne 
             car dans le cas présent la méthode hydrate est appelée donc si la méthode hydrate est appelée vous devez hydratez cette méthode par : 

            $perso->new Personnage();
            
            $perso->hydrate([
            
                'nom'=>'Magucien',
            
                'forcePerso'=>1,
            
                'degats'=>100,
            
                'niveau'=>2,
            
                'experience'=>100
            
            ]);



             soit vous utilisez __construct et vous hydratez directement votre classe personnage sans définir la méthode public fonction hydrate(array $donnees): sinon vous aurez une belle erreur SQLSTATE[23000]: Integrity constraint violation: 1048

            $perso = new Personnage([
                'nom'=>'Magucien',
                'forcePerso'=>1,
                'degats'=>100,
                'niveau'=>2,
                'experience'=>100
            ]);






            -
            Edité par CometBoy 29 juin 2017 à 18:07:09

            • Partager sur Facebook
            • Partager sur Twitter
              28 juin 2017 à 21:25:23

              hello,

              j'en suis au TP, et je ne comprends pas trop cette ligne :

               foreach ($persos as $unPerso)
                  echo '<a href="?frapper=', $unPerso->id(), '">', htmlspecialchars($unPerso->nom()), '</a> (dégâts : ', $unPerso->degats(), ')<br />';

              que veut dire le ?frapper=

              et quel est l’intérêt de mettre les perso en lien?

              • Partager sur Facebook
              • Partager sur Twitter
                28 juin 2017 à 21:43:39

                Bonjour,
                De mémoire, car j'ai mis ce cours de côté:
                Le ?frapper= est né de l'url générée par un clic sur 'frapper' dans votre page...
                Le script php va l'interpréter en récupérant l'action ('frapper') et le personnage (son id) à frapper.
                Sans l'id du personnage à frapper on ne saurait 'qui' frapper...
                C'est aussi là que repose "l’intérêt de mettre les perso en lien".

                • Partager sur Facebook
                • Partager sur Twitter
                  29 juin 2017 à 5:32:29

                  moi j'ai un problème concernant la manipulation des données stockées chap 4 (je crois bien parce que moi je lis en ligne et je pense que c'est le chapitre 4) il construit bien les setteurs et getteurs il ne montre pas la connexion a la base de donnée mais j'ai déjà suivi le cour de Mateo je les faits sans problème mais  la ou je me suis arrache les cheveux c'est au niveau d'ici https://openclassrooms.com/courses/programmez-en-oriente-objet-en-php/manipulation-de-donnees-stockees#/id/r-1669516 (j’espère que ça va tombe pile sur cette partie) il fait une requête la il n’y a pas de problème on entre dans la boucle il créer un nouvel objet  qui a pour paramètre un tableau je cherche ou il a créer le constructeur dans  cette partie je ne voie pas je conclu qu'il faut que je cherche moi même a créer ça (pas cool du tout) j'ai passe mon temps a cherche comment créer un nouveau personnage de façons dynamique je n'ai pas put je n'ai eut le choix que d’écrire ça manuellement pour que ça me donne un résultat attendue mais ça craint 

                  (ne me demande pas pourquoi j'ai pas de autolodear quand  PHP vous sort des erreur terrible au point ou vous doute de tout je reviens souvent a la méthode archaïque pour être sur que ce n'est pas un autre pb que celui auquel je fais fasse :p)

                  voici ce que j'ai fait et aide moi a écrire ça dynamiquement merci

                  class bdd {
                      //put your code here
                       private $_id;
                       private $_nom;
                       private $_forcePerso;
                       private $_degats;
                       private $_niveau;
                       private $_experience;
                       
                                function __construct($id, $nom, $forcePerso, $degats, $niveau, $experience) {
                               
                                  $this->setId($id);
                                  $this->setNom($nom);
                                  $this->setForcePerso($forcePerso);
                                  $this->setDegats($degats);
                                  $this->setNiveau($niveau);
                                  $this->setExperience($experience);
                                  }
                  
                       function getId() {
                           return $this->_id;
                       }
                  
                       function getNom() {
                           return $this->_nom;
                       }
                  
                       function getForcePerso() {
                           return $this->_forcePerso;
                       }
                  
                       function getDegats() {
                           return $this->_degats;
                       }
                  
                       function getNiveau() {
                           return $this->_niveau;
                       }
                  
                       function getExperience() {
                           return $this->_experience;
                       }
                  
                       function setId($id) {
                              $id = (int)$id;
                           if($id > 0){
                              $this->_id = $id;   
                           }
                       }
                  
                       function setNom($nom) {
                           if(is_string($nom)){
                              $this->_nom = $nom;   
                           }
                       }
                  
                       function setForcePerso($forcePerso) {
                              $forcePerso = (int) $forcePerso;
                           if($forcePerso >= 1 && $forcePerso <= 100){
                               $this->_forcePerso = $forcePerso;
                           }
                       }
                  
                       function setDegats($degats) {
                              $degats = (int) $degats;
                           if($degats >= 0 && $degats <= 100){
                              $this->_degats = $degats;   
                           }
                       }
                  
                       function setNiveau($niveau) {
                             $niveau = (int) $niveau;
                           if($niveau >=1 && $niveau <= 100){
                              $this->_niveau = $niveau;
                           }
                           
                       }
                  
                       function setExperience($experience) {
                              $experience = (int) $experience;
                           if($experience >= 1 && $experience <= 100){
                              $this->_experience = $experience;
                           }
                       }
                  
                  
                  }
                      try {
                          $bdd= new PDO('mysql:host=localhost;dbname=poo', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                      } catch (Exception $e) {
                          die('Erreur : ' .$e->getMessage());
                           }
                      $requete = $bdd->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnage');
                      while ($donnees = $requete->fetch(PDO::FETCH_ASSOC)){
                          
                              $perso = new bdd($donnees['id'], $donnees['nom'], $donnees['forcePerso'], $donnees['degats'], 
                              $donnees['niveau'], $donnees['experience'], $donnees['experience']);
                          
                          echo $perso->getNom(), ' a ' , $perso->getForcePerso(), '  de force ' , $perso->getDegats(),
                               ' de degats, ' ,$perso->getExperience(), ' d\'experience et est au niveau ' , $perso->getNiveau() .'</br> ';
                      }

                  pour besoin le code a été réduit a certains endroit

                  • Partager sur Facebook
                  • Partager sur Twitter
                  la patience et la perseverence son les meilleurs armes de la programmation
                    29 juin 2017 à 10:14:43

                    merci nanart, je ne connaissait pas cette façon de créer les url a partir d'un liens (d'alleiur je connaissait pas nom plus le <> dans "WHERE nom<>:nom" dans la requette.

                    maradja92, si j'ai bien compris où tu en es, la méthode dynamique viendra après. pour le moment, on se contente de créer des persos en prenant ce qui est dans la base de données, et ce cera plus simple avec l'hydratation.

                    Quand tu crée ton nouveau perso, tu n'a pas besoin de lui redéfinir les attributs car ils sont déjà dans $données :

                     $perso = new  bdd($donnees['id'], $donnees['nom'], $donnees['forcePerso'], $donnees['degats'], $donnees['niveau'], $donnees['experience'], $donnees['experience']);

                    est la même chose que

                    $perso = new bdd($donnees)


                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 juin 2017 à 15:36:27

                      Bonjour,

                      J'ai un petit problème et je n'arrive pas à trouver la solution je suis des cours sur le POO sur Openclassrooms ainsi qu'un autre site pour pouvoir coder en même temps et apprendre!

                      Cependant dans un exercices sur le POO pour l'héritage, l'exercice est simple mai j'ai un message lorsque je demande de verifier mon code qui affiche " Oups, merci de réessayer. Il semble que votre code n'affiche pas 'J'ai des côtés !'.'! 

                      Pourriez-vous m'orientez que le point qu'il me manque SVP!

                      Voici l'exercices demander =

                      Vérifiez le code dans l'éditeur de la droite. Nous avons créé deux classes,Shape(une forme géométrique) etSquare(un carré), avecSquarequi hérite deShape.

                      Nous n'avons pas de précisé que Square possède une propriété $hasSides (possède des côtés), mais, en fait, il hérite de cette propriété de la classe Shape.

                      Remplissez l'instruction if sur la ligne 18 en utilisant la méthode property_exists() pour vérifier si l'objet $square possède la propriété"hasSides".

                      <!DOCTYPE html>
                      <html>
                        <head>
                          <title>La forme des choses</title>
                        </head>
                        <body>
                          <p>
                            <?php
                              class Shape {
                                public $hasSides = true;
                              }
                              
                              class Square extends Shape {
                              
                              }
                              
                              $square = new Square();
                              // Ajoutez votre code ici !
                              if (property_exists($square, "hasSides" )); {
                                echo "J'ai des côtés !";
                              }
                            ?>
                          </p>
                        </body>
                      </html>
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 juin 2017 à 16:13:18

                        Mokhona a écrit:

                        Bonjour

                        Je débute en PHP OO et j'ai une question toute bête sur le cours. J'en suis à la manipulation des données et je teste les différentes méthodes : insertion, mise à jour et suppression.

                        J'ai réussi à faire des insertions. Pour la mise à jour et le delete est-ce qu'il y'a un autre moyen de récupérer l'id du perso ou il faut le mettre obligatoirement dans l'hydratation ?

                        Voici mon code :

                        gestion_bdd.php

                        <?php 
                        
                        function chargerClasse($classe)
                        {
                        	require $classe . '.php'; // On inclut la classe correspondante au paramètre passé
                        }
                        
                        spl_autoload_register('chargerClasse'); // On enregistre la fonction en autoload pour qu'elle soit appelée dès qu'on instanciera une classe non déclarée.
                        
                        $perso = new Personnage();
                        
                        $perso->hydrate(array(
                          'id' => 2,
                          'nom' => 'Toto',
                          'forcePerso' => 5,
                          'degats' => 5,
                          'niveau' => 1,
                          'experience' => 0  
                        ));
                        
                        $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                        $manager = new PersonnagesManager($db);
                            
                        //$manager->add($perso);
                        foreach ($manager->getList() as $persos)
                        {
                        	// echo $persos->id();
                        }
                        
                        // var_dump($perso);
                        
                        $manager->update($perso);
                        
                        ?>



                        PersonnagesManager.php

                        <?php
                        
                        class PersonnagesManager
                        {
                          private $_db; // Instance de PDO
                        
                          public function __construct($db)
                          {
                            $this->setDb($db);
                          }
                        
                          public function add(Personnage $perso)
                          {
                            $q = $this->_db->prepare('INSERT INTO personnages(nom, forcePerso, degats, niveau, experience) VALUES(:nom, :forcePerso, :degats, :niveau, :experience)');
                        
                            $q->bindValue(':nom', $perso->nom());
                            $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
                            $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
                            $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
                            $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
                        
                            $q->execute();
                          }
                        
                          public function delete(Personnage $perso)
                          {
                            $this->_db->exec('DELETE FROM personnages WHERE id = '.$perso->id());
                          }
                        
                          public function get($id)
                          {
                            $id = (int) $id;
                        
                            $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
                            $donnees = $q->fetch(PDO::FETCH_ASSOC);
                        
                            return new Personnage($donnees);
                          }
                        
                          public function getList()
                          {
                            $persos = [];
                        
                            $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages ORDER BY nom');
                        
                            while ($donnees = $q->fetch(PDO::FETCH_ASSOC))
                            {
                              $persos[] = new Personnage($donnees);
                            }
                        
                            return $persos;
                          }
                        
                          public function update(Personnage $perso)
                          {
                            $q = $this->_db->prepare('UPDATE personnages SET forcePerso = :forcePerso, degats = :degats, niveau = :niveau, experience = :experience WHERE id = :id');
                        
                            $q->bindValue(':forcePerso', $perso->forcePerso(), PDO::PARAM_INT);
                            $q->bindValue(':degats', $perso->degats(), PDO::PARAM_INT);
                            $q->bindValue(':niveau', $perso->niveau(), PDO::PARAM_INT);
                            $q->bindValue(':experience', $perso->experience(), PDO::PARAM_INT);
                            $q->bindValue(':id', $perso->id(), PDO::PARAM_INT);
                        
                            $q->execute();
                          }
                        
                          public function setDb(PDO $db)
                          {
                            $this->_db = $db;
                          }
                        }
                        ?>

                        Personnage.php

                        <?php
                        class Personnage
                        {
                          private $_id;
                          private $_nom;
                          private $_forcePerso;
                          private $_degats;
                          private $_niveau;
                          private $_experience;
                        
                        
                          // Un tableau de données doit être passé à la fonction (d'où le préfixe 'array')
                          public function hydrate(array $donnees)
                          {
                            foreach ($donnees as $key => $value)
                            {
                              // On récupère le nom du setter correspondant à l'attribut.
                              $method = 'set'.ucfirst($key);
                        
                              // Si le setter correspondant existe.
                              if (method_exists($this, $method))
                              {
                                // On appelle le setter.
                                $this->$method($value);
                              }
                            }
                          }
                        
                          public function __construct($donnees = []) {
                         
                               $this->hydrate($donnees);
                         
                           }
                        
                        
                          // 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 nombre entier.
                            // Si c'en était déjà un, rien ne changera.
                            // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près, mais rien d'important ici).
                            $id = (int) $id;
                            
                            // On vérifie ensuite si ce nombre est bien strictement positif.
                            if ($id > 0)
                            {
                              // Si c'est le cas, c'est tout bon, on assigne la valeur à l'attribut correspondant.
                              $this->_id = $id;
                            }
                          }
                        
                          public function setNom($nom)
                          {
                            // On vérifie qu'il s'agit bien d'une chaîne de caractères.
                            if (is_string($nom))
                            {
                              $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 >= 0 && $niveau <= 100)
                            {
                              $this->_niveau = $niveau;
                            }
                          }
                        
                          public function setExperience($experience)
                          {
                            $experience = (int) $experience;
                            
                            if ($experience >= 0 && $experience <= 100)
                            {
                              $this->_experience = $experience;
                            }
                          }
                        }
                        ?>

                        Merci



                        -
                        Edité par Mokhona 27 juin 2017 à 19:55:02


                        Salut , pour le delete j'ai procédé comme ça, en rajoutant une ligne "id" a mon tableau, effectivement la méthode delete attend un id.... qu'il n'y a pas dans le cours....... :

                        function chargerClasse($classe){
                            require $classe . '.php';
                        }
                        
                        spl_autoload_register('chargerClasse');
                        
                        $perso = new Personnage();
                        $perso->hydrate([
                            'id'=> 6,
                            'nom'=>'Choukize',
                            'forcePerso'=>23,
                            'degats'=>45,
                            'niveau'=>10,
                            'experience'=>99
                        ]);
                        
                        
                        
                        $db=new PDO('mysql:host=localhost;dbname=TPOC','root','root'); 
                        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        //Initialisation de la connexion 
                        $manager = new PersonnagesManager($db);
                        //
                        
                        $manager->delete($perso);
                        
                        

                        et pour récupérer l'ID d'un perso j'ai eu du mal mais j'ai réussit : 

                        -j'ai modifié ma classe personnage en remplaçant hydrate par __construct pourquoi?
                        parce que quand on veut charger un personnage avec 

                        $guerrier = $manager->get(4); 

                        $guerrier est directement un objet et il n'est pas hydraté (ou mal).

                        donc :

                        <?php
                        
                        function chargerClasse($classe){
                            require $classe . '.php';
                        }
                        
                        spl_autoload_register('chargerClasse');
                        
                        
                        $db=new PDO('mysql:host=localhost;dbname=TPOC','root','root'); 
                        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        //Initialisation de la connexion 
                        $manager = new PersonnagesManager($db);
                        //
                        $perso = $manager->get(5);
                        echo 'Le personnage avec l\'id n°',$perso->id(),'a ete chargé. Il correspond a :
                        <br/> Nom :',$perso->nom(),'<BR/>','Force : ',$perso->forcePerso(),'<br/> Degats subits : ',$perso->degats();
                        
                        
                        



                        la méthode du PersonnagesManager get($id) renvoi un nouvel objet Personnage directement hydraté donc plus qu'a aller choisir sa donnée avec $perso->id(), $perso->nom(); a condition de faire un __construct et non plus un hydrate , sur la classe Personnage.
                         

                         Autrement possible, avec hydrate($donnees) ça pourrait marché mais a ce moment la , la méthode du manager->get(4) ne doit pas retourné d'objet mais simplement un tableau comme ceci : (a ce moment la remettre la fonction hydrate(array $donnees) a la place de __construct(array $donnees)

                        coté PersonnagesManager:

                         public function get($id){
                                $id = (int) $id;
                        
                                $q = $this->_db->query('SELECT id, nom, forcePerso, degats, niveau, experience FROM personnages WHERE id = '.$id);
                                $donnees = $q->fetch(PDO::FETCH_ASSOC);
                        
                                return $donnees;
                                
                              }

                         et du coté exécution : 

                        $manager = new PersonnagesManager($db);
                        
                        $tableau = $manager->get(4);
                        $perso4= new Personnage;
                        $perso4->hydrate($tableau);
                        
                        echo 'Le personnage avec l\'id n°',$perso4->id(),'a ete chargé. Il correspond a :
                        <br/> Nom :',$perso4->nom(),'<BR/>','Force : ',$perso4->forcePerso(),'<br/> Degats subits : ',$perso4->degats();
                        

                        J'espère avoir été clair, c'est quand même chaud pour expliquer. il faut tout tester simplement.

                        -
                        Edité par CometBoy 29 juin 2017 à 16:19:13

                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 juin 2017 à 15:54:38

                          jissey a écrit:

                          merci nanart, je ne connaissait pas cette façon de créer les url a partir d'un liens (d'alleiur je connaissait pas nom plus le <> dans "WHERE nom<>:nom" dans la requette.

                          maradja92, si j'ai bien compris où tu en es, la méthode dynamique viendra après. pour le moment, on se contente de créer des persos en prenant ce qui est dans la base de données, et ce cera plus simple avec l'hydratation.

                          Quand tu crée ton nouveau perso, tu n'a pas besoin de lui redéfinir les attributs car ils sont déjà dans $données :

                           $perso = new  bdd($donnees['id'], $donnees['nom'], $donnees['forcePerso'], $donnees['degats'], $donnees['niveau'], $donnees['experience'], $donnees['experience']);

                          est la même chose que

                          $perso = new bdd($donnees)

                          justement $donnees contient les informations brut quant ça arrive au niveau du constructeur lui a sont tour doit organise les données   la pour les assignés a chaque setter si on fait comme toi tu prétend il ne va qu'affiche une seul valeur de chaque personnage hors mais après avoir lu la suite du cour  l'hydration viens résoudre ce problème de la plus belle des manières



                          • Partager sur Facebook
                          • Partager sur Twitter
                          la patience et la perseverence son les meilleurs armes de la programmation
                            30 juin 2017 à 17:31:24

                            Bonjour,

                            Dans AdvertRepository, la méthode getAdverts pose problème; le paginator enclenche une erreur avec le orderby. Si je retire de la requete le orderBy, les annonces sont bien affichées dans ma page.

                            Est-ce un bug?

                            Merci bien.

                            Elie.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 juin 2017 à 19:09:38

                              hello

                              Question d'écriture :

                              <p>
                                 Dégats : <?= $perso->degats() ?>
                              </p>

                              c'est un raccourci pour <?php echo $perso->degats()?> ?

                              • Partager sur Facebook
                              • Partager sur Twitter
                                1 juillet 2017 à 13:25:01

                                jissey a écrit:

                                hello

                                Question d'écriture :

                                <p>
                                   Dégats : <?= $perso->degats() ?>
                                </p>

                                c'est un raccourci pour <?php echo $perso->degats()?> ?

                                Oui quand on le mélange au Html on peut s'éviter des <?php echo $montruc ; ?>
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 juillet 2017 à 23:53:05

                                  Bonsoir à tous,

                                  J'ai une question qui peux être un peu bête, mais qui m'intrigue beaucoup je suis en train de réaliser le cours de PDO je suis au Setter et Getter et c'est à propos des conditions est ce qu'il est préférable de les placer dans les Setters ou les Getters ou aucune importance ? Par ce que j'ai réalisé un petit exercice avec des articles et j'ai imposé une condition à la référence du produit qui ne doit pas dépasser 10 caractères mais quand je place ma condition dans le Setter j'ai tout le temps le retour de "La référence du produit :" Qui s'affiche en permanence !

                                  Je vais vous montrer le résultat de mon code pour que vous comprenez un peu plus en détail

                                  index.php

                                  <?php
                                  // inclusion du fichier
                                  require_once '../src/App/Entity/Article.php';
                                  use App\Entity\Article;
                                  //Création d'un objet : INSTANCIATION
                                  // INSTANCE = objet !!
                                  $article_1 = new Article();
                                  //$article_2 = new Article();
                                  //
                                  $article_1->setReference('rfrdgfgfgrf');
                                  $article_1->setNomProduit('Mon article A');
                                  $article_1->setDescription('Ici une description');
                                  
                                  
                                  echo  $article_1->getReference().'<br>';
                                  echo 'Le nom du produit : <b>'.$article_1->getNomProduit().'</b><br>';
                                  echo 'La déscription du produit : <b>'.$article_1->getDescription().'</b><br>';

                                  Article.php

                                  class Article
                                  {
                                      /**
                                       * @var string $_reference référence du produit
                                       */
                                      private $_reference;
                                      /**
                                       * @var string $_nomProduit Le nom du produit
                                       */
                                      private $_nomProduit;
                                      /**
                                       * @var string $_description La déscription du produit
                                       */
                                      private $_description;
                                  
                                      /**
                                       * @param string $reference
                                       */
                                      // MUTATEUR / SETTER DE LA REFERENCE 
                                      public function setReference($reference)
                                      {
                                          $this->_reference = $reference;
                                      }
                                  
                                      /**
                                       * @param string $nomProduit
                                       */
                                      public function setNomProduit($nomProduit)
                                      {
                                          $this->_nomProduit = $nomProduit;
                                      }
                                  
                                      /**
                                       * @param string $description
                                       */
                                      public function setDescription($description)
                                      {
                                          $this->_description = $description;
                                      }
                                      // ACCESEUR  / GETTER DE LA REFERENCE
                                  
                                      /**
                                       * @return string
                                       */
                                      public function getReference()
                                      {
                                          if (strlen($this->_reference) > 10) {
                                              echo 'La référence ' . $this->_reference . ' ne peut pas comporter plus de 10 caractères !';
                                          } else {
                                              return 'La référence du produit : <b>'.$this->_reference.'</b>';
                                          }
                                      }
                                  
                                      /**
                                       * @return string
                                       */
                                      public function getNomProduit()
                                      {
                                          return $this->_nomProduit;
                                      }
                                  
                                      /**
                                       * @return string
                                       */
                                      public function getDescription()
                                      {
                                          return $this->_description;
                                      }
                                  
                                  }

                                  Quand je mets la condition dans le Getter tout se passe bien comme je le veux, par compte si jamais je place la condition dans le Setter j'obtiens la référence du produit en plus que je vous montre ci-dessous

                                    public function setReference($reference)
                                      {
                                          if (strlen($reference) > 10) {
                                              echo 'La référence ' . $reference . ' ne peut pas comporter plus de 10 caractères !';
                                          }else{
                                              $this->_reference = $reference;
                                  
                                          }
                                      }


                                   Comme je le disais j'obtiens la phrase que j'ai soulignée en noir sur la capture d'écran ci-dessous

                                  Merci d'avance de m'éclairer sur ce point que je ne comprends pas !

                                  À bientôt sur le forum.

                                  -
                                  Edité par webcode 3 juillet 2017 à 0:01:43

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Tester le code Premium Solo et gagner un mois gratuit sans engagement, Voici le code promotionnel : WEBCODE-9F7H
                                    3 juillet 2017 à 16:47:50

                                    Bonjour,

                                    Je suis bloquée pour afficher mes 5 derniers billets, ci-dessous mon MCD :

                                    Suivi de code :

                                    <h1>Découvrez les 5 derniers billets : </h1><hr>  
                                    
                                     $requete=$bdd->query('SELECT id, titre, nom, prenom, contenu, DATE_FORMAT(date, \'%d/%m/%Y à %Hh%i\') AS date_creation_fr 
                                     FROM , auteur
                                     WHERE billet
                                     ORDER BY date DESC LIMIT 0,5');
                                    
                                        while ($donnees = $requete->fetch())
                                        {
                                        ?>
                                          <div class="blog-post">
                                            <h2 class="blog-post-title">
                                              <?php echo htmlspecialchars($donnees['titre']); ?>
                                            </h2>
                                            <p class="blog-post-meta">
                                              <?php echo ($donnees['date_creation_fr']);?> par <a href="#"><?php echo htmlspecialchars($donnees['auteur']);?></a>
                                            </p>
                                    
                                            <p>
                                              <?php echo htmlspecialchars($donnees['contenu']) ?>
                                            </p>
                                    
                                            
                                          </div><!-- /.blog-post -->
                                      <?php
                                      }
                                       $requete->closeCursor();
                                       ?>



                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      4 juillet 2017 à 16:28:50

                                      Salut 

                                      Tu risque avoir peut de réponse avec le peut de détail que tu as mis, c'est quoi le problème ? au juste ?

                                      L'affiche, l'ordre, de tes 5 derniers billets ?

                                      A bientôt sur le forum.

                                      -
                                      Edité par webcode 4 juillet 2017 à 16:31:29

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Tester le code Premium Solo et gagner un mois gratuit sans engagement, Voici le code promotionnel : WEBCODE-9F7H
                                        4 juillet 2017 à 18:13:04

                                        Dans ta requête sql, à quoi sert "Where billet" ? Ta requête devrait plutôt ressembler  à :

                                        $requete=$bdd->query('SELECT id, titre, nom, prenom, contenu, DATE_FORMAT(date, \'%d/%m/%Y à %Hh%i\') AS date_creation_fr FROM auteur ORDER BY date DESC LIMIT 0,5');





                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Christophe Vallot

                                          4 juillet 2017 à 20:07:14

                                          webcode a écrit:

                                          Bonsoir à tous,

                                          J'ai une question qui peux être un peu bête, mais qui m'intrigue beaucoup je suis en train de réaliser le cours de PDO je suis au Setter et Getter et c'est à propos des conditions est ce qu'il est préférable de les placer dans les Setters ou les Getters ou aucune importance ? Par ce que j'ai réalisé un petit exercice avec des articles et j'ai imposé une condition à la référence du produit qui ne doit pas dépasser 10 caractères mais quand je place ma condition dans le Setter j'ai tout le temps le retour de "La référence du produit :" Qui s'affiche en permanence !

                                          Je vais vous montrer le résultat de mon code pour que vous comprenez un peu plus en détail

                                          index.php

                                          <?php
                                          // inclusion du fichier
                                          require_once '../src/App/Entity/Article.php';
                                          use App\Entity\Article;
                                          //Création d'un objet : INSTANCIATION
                                          // INSTANCE = objet !!
                                          $article_1 = new Article();
                                          //$article_2 = new Article();
                                          //
                                          $article_1->setReference('rfrdgfgfgrf');
                                          $article_1->setNomProduit('Mon article A');
                                          $article_1->setDescription('Ici une description');
                                          
                                          
                                          echo  $article_1->getReference().'<br>';
                                          echo 'Le nom du produit : <b>'.$article_1->getNomProduit().'</b><br>';
                                          echo 'La déscription du produit : <b>'.$article_1->getDescription().'</b><br>';

                                          Article.php

                                          class Article
                                          {
                                              /**
                                               * @var string $_reference référence du produit
                                               */
                                              private $_reference;
                                              /**
                                               * @var string $_nomProduit Le nom du produit
                                               */
                                              private $_nomProduit;
                                              /**
                                               * @var string $_description La déscription du produit
                                               */
                                              private $_description;
                                          
                                              /**
                                               * @param string $reference
                                               */
                                              // MUTATEUR / SETTER DE LA REFERENCE 
                                              public function setReference($reference)
                                              {
                                                  $this->_reference = $reference;
                                              }
                                          
                                              /**
                                               * @param string $nomProduit
                                               */
                                              public function setNomProduit($nomProduit)
                                              {
                                                  $this->_nomProduit = $nomProduit;
                                              }
                                          
                                              /**
                                               * @param string $description
                                               */
                                              public function setDescription($description)
                                              {
                                                  $this->_description = $description;
                                              }
                                              // ACCESEUR  / GETTER DE LA REFERENCE
                                          
                                              /**
                                               * @return string
                                               */
                                              public function getReference()
                                              {
                                                  if (strlen($this->_reference) > 10) {
                                                      echo 'La référence ' . $this->_reference . ' ne peut pas comporter plus de 10 caractères !';
                                                  } else {
                                                      return 'La référence du produit : <b>'.$this->_reference.'</b>';
                                                  }
                                              }
                                          
                                              /**
                                               * @return string
                                               */
                                              public function getNomProduit()
                                              {
                                                  return $this->_nomProduit;
                                              }
                                          
                                              /**
                                               * @return string
                                               */
                                              public function getDescription()
                                              {
                                                  return $this->_description;
                                              }
                                          
                                          }

                                          Quand je mets la condition dans le Getter tout se passe bien comme je le veux, par compte si jamais je place la condition dans le Setter j'obtiens la référence du produit en plus que je vous montre ci-dessous

                                            public function setReference($reference)
                                              {
                                                  if (strlen($reference) > 10) {
                                                      echo 'La référence ' . $reference . ' ne peut pas comporter plus de 10 caractères !';
                                                  }else{
                                                      $this->_reference = $reference;
                                          
                                                  }
                                              }


                                           Comme je le disais j'obtiens la phrase que j'ai soulignée en noir sur la capture d'écran ci-dessous

                                          Merci d'avance de m'éclairer sur ce point que je ne comprends pas !

                                          À bientôt sur le forum.

                                          -
                                          Edité par webcode hier à 0:01


                                          Petit Up svp Je ne trouve pas de précision pour les conditions dans les Setters et Getters 

                                          je suis en train de réaliser le cours de PDO je suis au Setter et Getter et c'est à propos des conditions est ce qu'il est préférable de les placer dans les Setters ou les Getters ou aucune importance ?

                                          PS : Je chercher vraiment a comprendre la meilleur solution !

                                          Au faite comme je comprend il est préférable de mettre les conditions directement dans l'objet comme ceci ?

                                          //Création d'un objet : INSTANCIATION
                                          // INSTANCE = objet !!
                                          $article_1 = new Article();
                                          
                                          $article_1->setReference('Geu8FR');
                                          if (strlen($article_1->getReference()) > 4) {
                                              echo 'La référence '.$article_1->getReference().' ne doit pas depasser 4 caractères';
                                          } else {
                                              echo 'La référence '.$article_1->getReference();
                                          }
                                          

                                          Et non dans le Setter et Getter ? 

                                          A bientôt sur le forum.

                                          -
                                          Edité par webcode 4 juillet 2017 à 20:34:07

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Tester le code Premium Solo et gagner un mois gratuit sans engagement, Voici le code promotionnel : WEBCODE-9F7H
                                            4 juillet 2017 à 21:41:33

                                            Bonsoir à tous, et merci pour vous réponses.

                                            Je souhaiterais faire une requête imbriquée en prenant le "nom, prénom"=> de la table AUTEUR

                                            Puis le "titre, contenu, date" => de la table BILLET

                                            Et pouvoir afficher mes 5 billets en page d'accueil.

                                            Quelque chose qui ressemble à l'image ci-dessous.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              4 juillet 2017 à 22:31:28

                                              résolu

                                              -
                                              Edité par Karolyn 5 juillet 2017 à 15:50:25

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                5 juillet 2017 à 9:46:24

                                                @Stagiaire68,

                                                J'avais répondu un peu vite (pas fait attention au fait que tu souhaitais récupérer des informations de deux tables).

                                                Veux-tu récupérer les 5 derniers billets d'un auteur en particulier ou les 5 derniers billets tout auteur confondu ?

                                                Tu devrais utiliser une jointure :

                                                INNER JOIN auteur
                                                    ON billet.aut_id=auteur.aut_id (dans le cas d'un auteur précis WHERE auteur.aut_id=11 par exemple)

                                                et pour la sélection de tes champs prendre ceux de ta table billet plus :

                                                auteur.nom AS nom_auteur,

                                                auteur.prenom AS prenom_auteur,

                                                Je n'ai pas testé, dis-nous si cela fonctionne.

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Christophe Vallot

                                                  5 juillet 2017 à 12:12:53

                                                  @christophevallot, @webcode,

                                                  Si ca peut aider d'autres personnes, le code fonctionne les loulous !!! :)

                                                  Et merci vos aides.

                                                  <?php echo dirname(__FILE__); ?>
                                                  
                                                  <?php include(dirname(__FILE__).'/config/connexion.php'); ?>
                                                  
                                                  
                                                  <?php include(dirname(__FILE__).'/inc/header.php'); ?>
                                                  
                                                    
                                                       
                                                  <h1>Découvrez les 5 derniers billets : </h1><hr>  
                                                  <?php
                                                   $requete=$bdd->query('SELECT id_bil, nom, prenom, titre, contenu, DATE_FORMAT(date, \'%d/%m/%Y à %Hh%i\') AS date_creation_fr 
                                                   FROM billet AS a, auteur AS b WHERE a.id_aut = b.id_aut ORDER BY date DESC LIMIT 0,5');
                                                  
                                                   
                                                  
                                                  
                                                   //SELECT * FROM news AS n, auteur AS a WHERE n.id_auteur = a.id_auteur AND nom="DUPONT" AND prenom="Marchel"
                                                  
                                                  
                                                   //var_dump($bdd);
                                                  
                                                      while ($donnees = $requete->fetch()):
                                                   /*$i=0;
                                                        while ($i < 5):
                                                      $i++;*/
                                                      ?>
                                                        <div class="blog-post">
                                                          <h2 class="blog-post-title">
                                                            <?php echo htmlspecialchars($donnees->titre); ?>
                                                          </h2>
                                                          <p class="blog-post-meta">
                                                            <?php echo ($donnees->date_creation_fr);?> par <a href="#"><?php echo htmlspecialchars($donnees->nom." ".$donnees->prenom);?></a>
                                                          </p>
                                                  
                                                          <p>
                                                            <?php echo htmlspecialchars($donnees->contenu); ?>
                                                          </p>
                                                  
                                                          
                                                        </div><!-- /.blog-post -->
                                                    <?php
                                                    endwhile;
                                                     $requete->closeCursor();
                                                     ?>
                                                  
                                                  
                                                  <?php include(dirname(__FILE__).'/inc/footer.php'); ?>
                                                  
                                                         





                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    8 juillet 2017 à 0:04:36

                                                    Bonjour, 

                                                    J'en suis à l'activité finale du cours POO. J'ai besoin de votre aide pour comprendre le critère d'évaluation ci-après :

                                                    "La suppression automatique des ressources en cache : si une ressource périmée est lue dans le cache, alors celle-ci doit automatiquement être supprimée".

                                                    Ma question est la suivante : est-ce que cette phrase signifie que la suppression automatique du fichier périmé doit obligatoirement se faire dans la classe Cache, ou est-ce que l'important est que la suppression soit automatique à la lecture d'un fichier périmé (et que l'on peut la faire en dehors de la classe Cache qui gère les mise en cache : lecture, écriture ... des ressources)  

                                                    J'espère que mes propos sont suffisamment clair pour obtenir une réponse !!

                                                    Merci ;)

                                                    J'ai finalement fait le choix de tester les dates d'expiration des fichiers de mise en cache en dehors de la classe Cache. Et maintenant que je suis allée au bout de l'activité, je pense que c'est le bon choix. En effet, la date d'expiration étant une donnée écrite dans le fichier, on doit la lire : une méthode de la classe Cache renvoie les deux informations contenues dans le fichier. La date d'expiration est alors traitée par la méthode qui a demandé le fichier de mise en cache.

                                                    J'espère que cela pourra t'aider.

                                                    Bon courage

                                                    -
                                                    Edité par Squirrel Jo 25 juillet 2017 à 16:40:43

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      8 juillet 2017 à 23:28:56

                                                      Bonsoir Squirel Jo,

                                                      J'en suis pas encore là, désolée...

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        9 juillet 2017 à 20:33:24

                                                         setFetchModePDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE 

                                                        bonjour,

                                                        je n'arrive pas à trouver de la documentation suffisante en français sur ceci, pouvez-vous m'aider (parce que je me retrouve avec des "doublons" de mes attributs)? :$ merci :)

                                                        -
                                                        Edité par Karolyn 9 juillet 2017 à 21:13:27

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          10 juillet 2017 à 19:38:20

                                                          Karolyn a écrit:

                                                           setFetchModePDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE 

                                                          bonjour,

                                                          je n'arrive pas à trouver de la documentation suffisante en français sur ceci, pouvez-vous m'aider (parce que je me retrouve avec des "doublons" de mes attributs)? :$ merci :)

                                                          -
                                                          Edité par Karolyn il y a environ 22 heures


                                                          Salut

                                                          Je ne vais pas réponde a ta question, mes je sais avec l'expérience d'avoir fait des demande a mes question, tu aura plus vite une réponse dans le forum PHP que sur le sujet en question !

                                                          A bientôt sur le forum.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Tester le code Premium Solo et gagner un mois gratuit sans engagement, Voici le code promotionnel : WEBCODE-9F7H
                                                            11 juillet 2017 à 13:12:24

                                                            Karolyn, je n'ai jamais utilisé cette fonction, et je suppose que tu as été voir la doc (http://php.net/manual/fr/pdostatement.setfetchmode.php).

                                                            je pense aussi si tu veut une réponse qu'il faut que tu indique le code utilisé qui te renvoie un doublon de tes attributs.

                                                            Pour ma part, j'ai une question d'écriture que je ne comprends pas :

                                                            j'en suis au 2eme TP (créer les classes magiciens et guerrier), et je ne comprends pas une écriture :

                                                            return $this->timeEndormi > time();

                                                            c'est une condition qui renvoie  l'heure de reveil (enfin l'heure à laquelle se réveille le perso si elle est plus grande que l'heure actuelle) ? j'ai jamais vu pour le moment timeEndormi > time()

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            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