Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expliquez-moi ces lignes de code

    15 août 2018 à 16:51:47

    <?php
    
    /**
     * Login Class
     */
    
    class Login extends Model{
    
        public function getLogIn($pseudo){
            $database = Database::openConnection();
            $query  = "SELECT id, password ";
            $query .= "FROM membres ";
            $query .= "WHERE pseudo = :pseudo ";
            $query .= "LIMIT 1 ";
            
            $database->prepare($query);
            $database->bindValue(':pseudo', $pseudo);
            $database->execute();
            
            $login = $database->fetchAssociative();
            return $login;        
        }
        
        public function getById(){
        	$database = Database::openConnection();
        	$query  = "SELECT id,pseudo,email ";
        	$query .= "FROM membres ";
        	$query .= "WHERE id = :id ";
        	$query .= "LIMIT 1 ";
        	
        	$database->prepare($query);
        	$database->bindValue(':id', Session::getUserId());
        	$database->execute();
        	
        	$login = $database->fetchAssociative();
        	return $login;
        }
        
    
        public function logOut($userId){
    
            Session::remove();
            Cookie::remove($userId);
        }
    }
    Voilà le code en question. Je pense utiliser ce code pour gérer le "login" de mon blog. J'ai élaborer ce code selon les indications trouvées dans la documentation de PHP. Je pense avoir compris dans les grandes lignes de quoi il retourne.
    Toutefois, ces lignes de code demeurent encore assez obscures.
    Quelqu'un pourrait-il m'aider à y voir plus clair ?
    Par exemple, je comprends mal la différence entre fetch et fetchAssociative.
    Je remercie d'avance toutes les personnes qui pourront m'apporter leur aide.

    -
    Edité par BryanMangin 15 août 2018 à 16:53:44

    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2018 à 18:44:14

      Hello,

      Un bonjour pour commencer serait apprécier on est humain pas des boot ;).

      C'est un code assez basique.

      Une classe qui hérite d'une autre classe.

      Il n'y a que des requêtes sql.

      fetch sa va créer un tableau numérote ( [0] = > "Hello world" ) alors que fetchAssociative ( plutot fetch_assoc() ou PDO::FETCH_ASSOC ) c'est pour un tableau associatif ( ['pseudo'] => "Hello World" ).

      Pour finir les double double point " :: " c'est pour appeler directement une classe et non un objet. Dons ton code ça fait appel a la methode remove de la classe Session et remove de la classe Cookie par contre cette fois-ci elle envoie en paramètre la valeur de $userId.

      -
      Edité par Alby57600 15 août 2018 à 22:22:24

      • Partager sur Facebook
      • Partager sur Twitter
        15 août 2018 à 22:50:42

        Merci beaucoup pour ces précisions !

        Donc, par exemple:

        $database = Database::openConnection();
             	$query  = "SELECT id, titre, contenu, publication, image ";
             	$query .= "FROM articles ";
             	$query .= "WHERE id = :id ";
             	$query .= "LIMIT 1 ";

        C'est pour dire: "Accède à la base de donnée et SELECTIONNE l'id, le titre, le contenu, la publication ET l'image DE TOUS les articles..."

        Et le reste est encore un peu flou

        J'ai

        $query .= "WHERE id = :id ";

        Et je ne sais pas trop ce que ça veut dire... "Où l'identifiant est égal à l'identifiant" (???)

        Pour la ligne de code suivante:

        $query .= "LIMIT 1 ";

        Certains disent que c'est une mauvaise pratique... Mais je ne comprends pas pourquoi.


        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2018 à 6:43:44

          Bonjour,

          BryanMangin a écrit:

          Merci beaucoup pour ces précisions !

          Donc, par exemple:

          $database = Database::openConnection();
               	$query  = "SELECT id, titre, contenu, publication, image ";
               	$query .= "FROM articles ";
               	$query .= "WHERE id = :id ";
               	$query .= "LIMIT 1 ";

          C'est pour dire: "Accède à la base de donnée et SELECTIONNE l'id, le titre, le contenu, la publication ET l'image DE TOUS les articles..."

          Et le reste est encore un peu flou

          J'ai

          $query .= "WHERE id = :id ";

          Et je ne sais pas trop ce que ça veut dire... "Où l'identifiant est égal à l'identifiant" (???)

          Pour la ligne de code suivante:

          $query .= "LIMIT 1 ";

          Certains disent que c'est une mauvaise pratique... Mais je ne comprends pas pourquoi.


          Bonjour,

          Sur ta première question, cela s'appelle préparer la requete.

          Au lieu d'écrire

          $query .= "WHERE id = :id ";

          on aurait pu écrire

          $query .= "WHERE id = :unevariable ";

          et ensuite mettre à la place d'unevariable, la bonne valeur de la variable par:

          $database->bindValue(':unevariable', Session::getUserId());

          Quant à ta deuxième question, je ne sais pas dire si

          $query .= "LIMIT 1 ";

          est une mauvaise pratique, mais c'est en tout cas ici inutile car si id est bien un identifiant unique tu ne risques pas d'avoir plus d'un résultat comme réponse à ta requête.

          A toi


          fdf




          • Partager sur Facebook
          • Partager sur Twitter
            16 août 2018 à 12:33:08

            Hello ALL,

            CarréDas1 a tout dit.

            Par contre tout ses concaténations au niveau de $query je trouve ça inutile dans ce code. pour LIMIT 1 inutile aussi vu que un id dois être unique donc une seule entrée est à récupérer. A moins que l'id ne soit pas en auto incrément dans la BDD et du coup plusieurs doublons seront présent chose à déconseiller.

            Pour les marqueurs il y on a 2 sorte : paramètres nommés => " :id " et marqueurs => " ? " .

            Je te conseille de lire la doc http://php.net/manual/fr/pdo.prepare.php

            Bye ALL

            -
            Edité par Alby57600 16 août 2018 à 16:21:11

            • Partager sur Facebook
            • Partager sur Twitter
              16 août 2018 à 14:45:11

              Grâce à toutes ces informations, je comprends beaucoup mieux comment tout cela fonctionne.

              Merci pour votre aide.

              • Partager sur Facebook
              • Partager sur Twitter

              Expliquez-moi ces lignes de code

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown