Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Programmez en orienté objet en PHP

    5 novembre 2018 à 13:43:57

    Rebonjour,

    Merci pour l'info Theprogrammer

    Juste une question concernant le cours histoire d'être sur. Sur la fonction get() ou l'on peut passer en paramètre soit un ID en guise de int (la, pas de problème car il s'agit de la clé primaire de ma table PK) mais concernant le nom aucune vérification est faite au préalable savoir si il existe deja. Est ce du au fait que, lors de la création de ma table, j'ai mis UNIQUE KEY

    Je demande car je suis allez voir sur la toile et je n'ai rien trouvé concernant ce UNIQUE KEY. Est ce que cela en fait une clé d'identification ou est ce juste pour éviter d'avoir à faire une vérification dans mon code PHP avec une fonction genre exists().

    En vous remerciant.

    Francois

    • Partager sur Facebook
    • Partager sur Twitter
      10 novembre 2018 à 13:42:14

      Bonjour,

      Je crois que unique key signifie que chaque ligne de la colonne(ex. nom d'usage, email, etc.) a une valeur unique, ce qui permet comme le id (primary key) de jouer un rôle d'identifiant de la ligne. La différence entre primary et unique est seulement dans le fait qu'une clé unique accepte les valeurs null, si on n'a pas spécifié NOT NULL. Pour plus d'informations, voir ce cours: https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql. Et oui, le fait de mettre un unique key sur un attribut qui doit être unique comme un nom d'usager, un email, etc. va faire que si quelqu'un tente de créer un personnage déjà existant, la bdd va renvoyer un false qui pourrait permettre d'avertir au moyen d'un message l'usager de choisir un autre nom. Mais généralement, on aura une méthode un peut plus raffinée de vérification, je crois, comme le exist() du manager, car il y a bien d'autres raisons qui peuvent créer un problème avec la bdd et renvoyer un false sur la requête. Mais, à la base, ce unique key sert à éviter des confusions d'identité dans une bdd. Si deux usagers on le même nom d'usager, ce peut être embêtant. La clé primaire n'est pas toujours connu lors des requêtes, à ce moment la requête peut parfois être accompli au moyen d'un autre attribut  qui a un unique key qui lui est accessible: ici l'usager entre son nom d'usager qu'en principe il connait et on s'en sert pour faire un select en dbb qui ira à la bonne ligne sans équivoque.

      Je crois que vous avez besoin d'affiner votre méthode de recherche sur internet, ce sujet est largement expliqué dans une "infinité" de sites. Utilisez Google!

      Bonne journée!

      • Partager sur Facebook
      • Partager sur Twitter
      Francis du Canada - Soyons audacieux!
        16 novembre 2018 à 16:05:36

        Bonjour à tous,

        Voilà je rencontre un soucis depuis quelques jours sur la mise en ligne d'un site php basé sur le dernier TP du cours POO. Mon hébergeur est 1&1. Pour acceder à mon site comme pour le cour je fais  nomDeDomaine/blog/Autoload/ et la bizarrement 1&1 me fait une erreur 404 en me disant que le dossier n'existe pas, alors que dans mon FTP il existe et que en local ça fonctionne correctement.


        Quelqu'un aurait une idée où a rencontré se problème? 

        • Partager sur Facebook
        • Partager sur Twitter
          17 novembre 2018 à 14:57:48

          Salut à tous !!

          Comment fait-on pour se connecter à la base des données avec MAMPserver SVP!!!!!!

          • Partager sur Facebook
          • Partager sur Twitter
            17 novembre 2018 à 16:18:54

            Par exemple, j'ai un MACOS SIERRA, voilà ce que j'ai trouvé pour ce MACOS SIERRA: https://websitebeaver.com/set-up-localhost-on-macos-high-sierra-apache-mysql-and-php-7-with-sslhttps.

            Tu as quoi comme MAC, si tu le sais alors écris cela dans l'url plus le mot clé localhost et recherche le tien.

            • Partager sur Facebook
            • Partager sur Twitter
              19 novembre 2018 à 13:06:58

              Salut à vous tous, je suis Chris Precieux, débutant en Php. j'ai un soucis au niveau de l'extension PDO. j'utilise Xampp comme serveur, mais lorsqu'il s'agit d'avoir accès à la base de donnée nommée 'test' j'ai des problèmes je suis allé dans le file php puis dans php.ini pour faire quelques petits réglages comme m'a indiqué le cours, mais toujours le même message d'erreur qui s'affiche. besoin d'aide !!!! :-)
              • Partager sur Facebook
              • Partager sur Twitter
                20 novembre 2018 à 4:20:20 - Message modéré pour le motif suivant : Toute forme de publicité est interdite


                Discord pour programmeur ::   https://discord.gg/8SyZ7GA
                  20 novembre 2018 à 4:24:10

                  @The programmer Bonjour, tu avais été prévenu, pas de publicité ni de spam sur les forums d'OC. Pour toi c'est le BAN.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 novembre 2018 à 4:28:15

                    non ca!!! mais je le proposais juste !!!!
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Discord pour programmeur ::   https://discord.gg/8SyZ7GA
                      26 novembre 2018 à 12:02:55

                      Bonjours,

                      J'ai une questions qui me semble idiote mais je préfère demander pour être sure, pour utiliser 'extends' il faut que les classes soient dans le même fichier ou incluent ? 

                      -
                      Edité par NeoSensEight 26 novembre 2018 à 13:18:36

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Call me Spaceman

                        28 novembre 2018 à 15:30:51

                        Pas nécessairement, on peut mettre cette classe ailleurs dans le système de fichier du code et utiliser une système de chargement qui précise quel fichier charger pour faire fonctionner le script et/ou de Namespace et le fait de préciser le Namespace du fichier qui est ailleurs  avec un «use /Dossier/classe» va renseigner ton script où trouver la classe qui fait l'extension avec «extends». Évidemment la classe parente peut aussi être dans le même fichier, le script n'a alors pas besoin d'autres informations en autant que la classe est bien écrite avec la syntaxe prévue. Je crois qu'il faut qu'elle précède le code qui en aura besoin. Ce serait à vérifier! Pour des tests, on peut laisser tout dans le même fichier.

                        -
                        Edité par Chat Botté 28 novembre 2018 à 15:38:03

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Francis du Canada - Soyons audacieux!
                          18 décembre 2018 à 15:18:32

                          Bonjour tout le monde,

                          J'ai tant bien que mal terminé le TP de mise en cache des news mais au momment d'envoyer mon zip, ça ne marche pas ! J'ai le message d'erreur : 'The file "" does not exist". J'ai essayé plusieurs fois, en changeant de navigateur, mais rien y fait. Avez vous le même problème ?

                          Ca m'embête, j'ai hâte de voir le corrigé :)

                          Merci


                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 décembre 2018 à 12:43:54

                            Etant sur une vue, mon lien <a> pour index ne marche pas, voici la partie

                            Vue :

                            <!DOCTYPE html>
                            <html>
                            	<head>
                            		<meta charset="utf-8">
                            		<title>Mon blog</title>
                            		<link rel="stylesheet" type="text/css" href="style.css">
                            	</head>
                            	<body>
                            		<h1>Mon super blog !</h1>
                            		<p><a href="index.php">Retour à la liste des billets</a></p>
                            
                            		<div class="news">
                            			<h3>
                            				<?= htmlspecialchars($post['title'])?>
                            				<em>le <?= htmlspecialchars($post['creation_date_fr'])?></em>
                            			</h3>	
                            			<p>
                            				<?= nl2br(htmlspecialchars($post['content']))?>
                            			</p>
                            		</div>
                            
                            		<h2>Commentaires</h2>
                            		<?php 
                            		if ($_GET['action']!='modifyComment') {
                            		?>
                            			<form action="index.php?action=addComment&amp;id=<?= $post['id'] ?>" method="POST">
                            				<div>
                            					<label for="author">Auteur</label><br>
                            					<input type="text" id="author" name="author">
                            				</div>
                            				<div>
                            					<label for="comment">Commentaires</label><br>
                            					<textarea id="comment" name="comment"></textarea>
                            				</div>
                            				<div>
                            					<input type="submit" />
                            				</div>
                            			</form>	
                            		<?php
                            		}
                            		else {
                            		?>
                            			<form action="index.php?action=modifyComment&amp;id=<?= $post['id'] ?>" method="POST">
                            				<div>
                            					<label for="comment">Commentaires</label><br>
                            					<textarea id="comment" name="comment"></textarea>
                            				</div>
                            				<div>
                            					<input type="submit" />
                            				</div>
                            			</form>	
                            		<?php
                            		}
                            		?>		
                            
                            		<h2>Commentaires</h2>
                            
                            		<?php
                            		while ($comment = $comments->fetch()) {
                            		?>
                            			<p><strong><?= htmlspecialchars($comment['author'])?></strong> le <?= htmlspecialchars($comment['comment_date_fr'])?><a href="index.php?action=modifyComment&amp;id=<?= $comment['id'] ?>">(modifier)</a></p>
                            			<p><?= nl2br(htmlspecialchars($comment['comment']))?></p>
                            		<?php
                            		}
                            		?>
                            	</body>
                            </html>

                            index :

                            if (($_GET['action'] == 'modifyComment') && (isset($_GET['id']))) {
                                        if (isset($_GET['id']) && $_GET['id'] > 0) {
                                            modifyComment($_GET['id'], $_POST['comment']);
                                        }
                                        else {
                                            throw new Exception('Aucun commentaire n\'a été modifié');
                                           
                                        }
                                    }

                            A l'aide



                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 décembre 2018 à 19:03:56

                              Bonjour à tous,

                              j'ai de gros soucis avec l'OCFramwork !

                              Même avec la version en ligne (http://www.victorthuillier.com/oc/poo/tp_app/?f=Partie+III), j'ai pas mal de 'Fatal Error'. Quelqu'un aurait-il une version fonctionnelle pour que je puisse aborder le TP de mise en cache sur de bonnes bases ?

                              Sinon par curiosité, est-ce le Framework actuellement utilisé par OpenClassroom ? J'avoue que son architecture est un peu confuse:

                              - j'ai d'une part des bloc Appli (ici Frontend, et Backend), et ensuite des modules. Ne pouvait-on pas rassembler tous les contrôleurs dans un unique dossier 'controller'. Par analogie avec Symfony, les 'bundles' sont ici les blocs appli, ou les modules ?

                              - d'autre part, tous les modèles (objets et manager) sont rassemblés ailleurs (dossier 'vendors') ! Du coups, si je récupère mon bloc appli ou module pour le travailler dans un autre projet, ça ne marche plus.

                              - Enfin, les configurations 'app' et 'route' sont en .xml, est-ce l'usage, ou peut-on aussi utiliser du .ini...voir même un .php spécifique (il y a aussi .yml mais la fonction yaml_parse_file() n'est pas reconnu sur ma version de Wamp). A ce propos, je suis surpris de trouver les paramètres de connexion à la Bdd codé en dur dans le PDOFactory du Framework...

                              Pour la petite histoire, je recherche un microFramework MVC-Objet exploitable pour ma formation php (exit donc les usines à gaz genre Symfony…). Je pensais utiliser l'OCFram, mais ma version a des bugs.

                              @+

                              -
                              Edité par Torti 23 décembre 2018 à 19:07:45

                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 décembre 2018 à 19:37:42

                                Bonjour à tous , 

                                Je voudrais savoir comment garder un objet de page en page !

                                Je m'explique autrement. 

                                Imaginons un objet compte : 

                                créé sur la page d'accueil, comment faire pour avoir ce compte et ces informations sur une autre page exemple dashboard

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 décembre 2018 à 8:12:35

                                  Bonjour,

                                  Tu peux utiliser $_session qui gère automatiquement les objets pour le passage entre les pages.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Call me Spaceman

                                    8 janvier 2019 à 13:48:00

                                    Salut,

                                    Attention car les objets de type Ressources (Connexion SQL) ne sont pas linéarisables ;)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      8 janvier 2019 à 23:22:04

                                      Bonjour à tous,

                                      Après avoir lu et relu les cours sur la POO en PHP, je bloque sur la partie frontEnd :

                                      Lors du lancement du site en utilisant le bootstrap, le layout est bien initié, affiché sur l'écran, mais le <?= content?> renvoie toujours une erreur 404 via le HTTPResponse.

                                      J'ai beau relire chaque fichiers du programme, tout semble correctement écrit. La base de donnée est, elle, également crée et contient les valeurs nécessaires.

                                      En suivant le schéma, et en reprenant chaque fonctions, il semble que le redirect404() (contenu dans la fonction getController() du fichier Application du Framework) soit initié lorsqu'aucune route ne correspond, que la page n'existe donc pas. Mes fichiers XML sont bien existant, au bon endroit, et correctement remplies. 

                                      Par ailleurs, mon php_error.log ne me renvoie aucune erreur.

                                      Bref, si vous avez des idées pour m'aiguiller, je vous remercie d'avance!

                                      Pooseument!

                                      Julien

                                      -
                                      Edité par Juuk 8 janvier 2019 à 23:24:37

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 janvier 2019 à 17:10:01

                                        Bonjour, 

                                        Je galère depuis quelques jours sur le projet POO et je ne trouves malheureusement pas de réponses. Je parle ici de la partie 3. Des que j'implémente la class ApplicationComponent, j'ai une erreur fatale, comme ici dans la classe BackController : Fatal error: Class 'Blog\ApplicationComponent' not found in /Applications/MAMP/htdocs/blogecrivain/lib/Blog/BackController.php on line 4. 

                                        Mes fichiers se trouvent dans un dossier blog. J'ai vérifié, revérifier mais je comprends pas d'où vient l'erreur. Quelqu'un aurait-il la réponse ? 

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 janvier 2019 à 17:14:27

                                          <?php


                                          namespace  App\Controller ;


                                          use Symfony\Component\HttpFoundation\Response;

                                          use Twig\Environment ;

                                          /**

                                           * 

                                           */

                                          class DefaultController

                                          {

                                          /**

                                           * @var Environment

                                           */

                                          private $twig ;

                                          public function _Construct(Environment  $twig)

                                          {

                                          $this->twig=$twig ;

                                          }

                                          public function index():Response

                                          {

                                          return new Response($this->twig->render('pages/home.html.twig'));

                                          }

                                          }







                                          ?>

                                          j'ai ce problem la qui peut maider merci   

                                          Call to a member function render() on null

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 janvier 2019 à 18:27:39

                                            oui, si tu fais que ton post soit lisible ;)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              2 février 2019 à 20:11:13

                                              J'ai besoin d'aide sur ce code,

                                              Il est censé (après avoir taper ce que l'on veut dans le formulaire) insérer ce que on à dans $_POST['pseudo']

                                              à savoir j'y est passé 6h pour essayé de comprendre mes erreurs, changé 52 fois mon code....

                                              RIEN N'Y  FAIT (il ne se passe rien et je rage vraiment)

                                              <!DOCTYPE html>
                                              <html>
                                                  <head>
                                                      <meta charset="utf-8" />
                                                      <title>Messagerie</title>
                                                  </head>
                                                  <style>
                                                  form
                                                  {
                                                      text-align:center;
                                                  }
                                                  </style>
                                                  <body>
                                                  
                                                  <form action="" method="POST" name="pseudo">
                                                      <p>
                                                      <input type="text" name="pseudo"/>
                                                      <br />
                                                      <br> 
                                                      <textarea name="le-message" rows="8" cols="20">Saisissez le message ici.</textarea>
                                                      <br />
                                              <br>
                                              <br>
                                                      <button type="submit" value="Envoyer">button</button>
                                              	</p>
                                                  </form>
                                              
                                              <hr/>
                                              <br>
                                              <br>
                                              <br>
                                                  <?php
                                              
                                                  $bdd = new PDO("mysql:host=127.0.0.1;dbname=test", "root", "");
                                              
                                                  $requete = $bdd->query("SELECT * FROM base_inscri");
                                              
                                                 
                                              
                                                  while ($resultat = $requete->fetch()) 
                                                  {
                                                          echo $resultat['id'].' - '.$resultat["membre"]."<br>";
                                                  }
                                                   ?>
                                              
                                                   <?php
                                                   if(isset($_POST['pseudo']) AND !empty($_POST['pseudo'])){
                                                       $bdd = new PDO("mysql:host=127.0.0.1;dbname=test", "root", "");
                                              
                                                       $prenom=$_POST['pseudo'] 
                                              
                                                       $req = $bdd->prepare('INSERT INTO base_inscri (id,membre) VALUES (NULL,:membre)');
                                              
                                                       $req->execute(array('membre'=>$prenom);)
                                              
                                                       echo 'Nous venons d\'insérer un nouveau membre : '.$_POST['pseudo'];
                                              
                                               }
                                                   else
                                                   {
                                                     echo "désolé";
                                                   }
                                              ?>
                                              </body>
                                              </html>
                                              
                                              



                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 février 2019 à 20:35:42

                                                Bonsoir,

                                                Il manque un ";" ligne 50 d'où le problème avec $req signalé sur un autre forum.

                                                De même un ";" mal placé ligne 54!

                                                L'ouverture de la bdd devrait se faire comme ceci(localhost):

                                                 $bdd = new PDO("mysql:host=localhost;dbname=test", "root", "root");

                                                et mieux encore, de cette manière:

                                                try {
                                                            $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
                                                        } catch (Exception $e) {
                                                            die('Erreur : ' . $e->getMessage());
                                                        }

                                                A+

                                                -
                                                Edité par Philippe2463 2 février 2019 à 23:50:05

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                La chute n'est pas un échec, l'échec c'est de rester là où on est tombé!
                                                  5 février 2019 à 13:23:04

                                                  Bonjour,

                                                  J'ai appris dans cet exercice (Les objets en profondeur - Parcourons nos objets) que "foreach" parcourt les attributs de l'objet.

                                                  Mais dans cet exercice (Les interfaces - L'interface Iterator) "foreach" semble avoir un comportement différent.

                                                  • Qui appelle les fonctions surchargées de l'exercice ?
                                                  • Quand sont appelées ces fameuses fonctions ?
                                                  • se trouvent ces appels ?

                                                  Je pourrais très bien admettre bêtement le fonctionnement avéré de cet exercice, le code fonctionne très bien. Mais il fonctionne comment, pourquoi ?

                                                  Merci de bien vouloir éclairer ma petite lanterne (trop?) curieuse... o_O

                                                  -
                                                  Edité par Bouchave 5 février 2019 à 13:25:56

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    5 février 2019 à 13:32:51

                                                    Salut,

                                                    • Qui appelle les fonctions surchargées de l'exercice ? => la fonction native foreach
                                                    • Quand sont appelées ces fameuses fonctions ? => lors de la mise en place de AS pour découpler l'objet et ses valeurs
                                                    • se trouvent ces appels ? => dans le code natif de foreach
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      5 février 2019 à 14:08:41

                                                      christouphe a écrit:

                                                      Salut,

                                                      • Qui appelle les fonctions surchargées de l'exercice ? => la fonction native foreach
                                                      • Quand sont appelées ces fameuses fonctions ? => lors de la mise en place de AS pour découpler l'objet et ses valeurs
                                                      • se trouvent ces appels ? => dans le code natif de foreach
                                                      Merci d'avoir pris la peine de me répondre. Je me doutais bien de cette réponse, mais je ne trouve aucune preuve.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        5 février 2019 à 14:36:54

                                                        Bouchave a écrit:

                                                        christouphe a écrit:

                                                        Salut,

                                                        • Qui appelle les fonctions surchargées de l'exercice ? => la fonction native foreach
                                                        • Quand sont appelées ces fameuses fonctions ? => lors de la mise en place de AS pour découpler l'objet et ses valeurs
                                                        • se trouvent ces appels ? => dans le code natif de foreach

                                                        Merci d'avoir pris la peine de me répondre. Je me doutais bien de cette réponse, mais je ne trouve aucune preuve.

                                                        Il faut aller plonger dans le code C de la fonction foreach ;)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          13 février 2019 à 23:04:31

                                                          Je tiens à signaler que la correction du TP3 est elle-même fausse :
                                                          - quand on ajoute une nouvelle news, le cache de la page d'accueil n'est pas supprimé
                                                          - quand on modifie une news, le cache de la news n'est pas supprimé.

                                                          C'est dommage de trouver de telles boulettes dans un TP qui a demandé beaucoup de travail aux étudiants, après un cours lui-même difficile à suivre. OpenClassrooms mérite mieux que ça !

                                                          Le cours a l'air bien adapté à un enseignement en présentiel, mais pour travailler en ligne c'est trop verbeux et pas assez imagé.
                                                          Même en ayant déjà une très bonne maîtrise de Java, j'ai pourtant galéré pour comprendre où l'auteur veut en venir, surtout dans la partie 3 et le TP.

                                                          Quelques conseils pour les suivants :

                                                          - faites un diagramme sur Dia pour suivre les développements de la partie 3 au fur et à mesure

                                                          - pour le TP, vous serez vraiment évalués sur les fonctionnalités que vous aurez ajoutées, pas du tout sur la façon dont vous les aurez codées.
                                                          De toute façon, le code de départ est tellement orienté POO que pour le modifier, vous êtes obligé de faire de la POO ; donc si votre code marche, c'est que vous avez correctement mis en oeuvre les principes du cours.

                                                          - suivez un cours sur la POO dans un autre langage, en complément de celui-ci. Cela consolidera ce qui était flou.

                                                          • 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