Partage
  • Partager sur Facebook
  • Partager sur Twitter

Page de connexion en MVC

    28 octobre 2016 à 15:12:57

    Bonjour, 

    J'essaye d'imaginer une page de connexion en php, en MVC. Une page qui quand on se connecte (avec les bons identifiants) dessus nous renvoie sur la même page mais avec un formulaire.

    C'est très simple à mettre en oeuvre mais j'ai vraiment du mal avec l'architecture MVC.

    On aura donc dans le modèle, la connexion à la bd et aussi une fonction pour vérifier si l'identifiant et le mdp existe dans la base de données.

    Dans la vue, le fichier avec le code html.

    Là où je bloque, c'est dans le contrôleur, comment dire que par exemple je veux que quand dans la page où il a le formulaire, quand j'appuie sur le bouton connexion du formulaire, ça se vérifie si l'identifiant existe et ensuite affiche sur la même page un nouveau formulaire, tout en sauvegardant l'identifiant avec une session..

    Je sais pas si c'est clair mais je ne sais pas comment le formuler autrement.

    Pour résumer rapidement, je demande comment je peux vérifier, en MVC, qu'un identifiant existe, le ramener sur la même page en ajoutant un formulaire, en sauvegardant le tout avec une session.

    Si quelqu'un peut me dire les différents dossiers et fichiers à faire, je lui serai très reconnaissant !

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      28 octobre 2016 à 15:33:35

      Salut,

      Je travaille justement sur un projet avec ce type de connexion, moi je fonctionne comme ça:

      - index.php (le controller global, moi c'est ma page d'index mais c'est pas obligé). C'est lui qui va vérifier quelle page il doit inclure (par exemple si la variable $_POST['username'] existe ça voudra dire que le formulaire à été envoyé. Dans le cas présent si le formulaire est envoyé il faut lui demander d'appeler le controller de la page de connexion.

      - La page vue: Rien de spécifie c'est ta page formulaire, avec une partie affichée que si une variable $_POST est reçue par exemple.
      - La page modèle: les différentes fonctions à utiliser, tu peux créer dedans une grosse fonction qui appelle toutes les autres, c'est plus simple.
      - La page controller: Elle est appelée par le controller global, c'est là que tu vas appeler ta grosse fonction du modèle et ensuite inclure le code de la vue.

      En gros c'est comme ça que je fais^^.

      • Partager sur Facebook
      • Partager sur Twitter
      C'est pas un bug, c'est une feature.
        28 octobre 2016 à 16:15:41

        Palipica a écrit:

        Là où je bloque, c'est dans le contrôleur, comment dire que par exemple je veux que quand dans la page où il a le formulaire, quand j'appuie sur le bouton connexion du formulaire, ça se vérifie si l'identifiant existe et ensuite affiche sur la même page un nouveau formulaire, tout en sauvegardant l'identifiant avec une session..

        Le controlleur c'est à peu près le truc le plus important dans le MVC, et tu n'as pas cerné son principe voilà pourquoi tu as du mal.

        Quand tu appuies sur ton bouton de formulaire, tu vas router ton action sur le bon controlleur, par exemple : 

        index.php?controlleur=connexion&action=login

        donc dans ton index.php tu sais que tu dois appeler la méthode login du controlleur connexion.

        <?php
        class ConnexionControlleur
        {
            public function login()
            {
                if ( isset($_POST['login']) && isset($_POST['mdp']) {
                    //tu traites les chaines, les securises logiquement etc... (pas pour l'exemple)
                    $login = $_POST['login'];
                    $mdp = $_POST['mdp'];
                    // notre model ne sert qu'à vérifier en base si l'user existe.
                    $connexion = new ConnexionModel();
                    if ($connexion->userExist($login, $mdp)) {
                        $_SESSION['is_logged'] = true;
                        include 'app/views/espace_membre.php';
                    } else {
                        //sinon on le renvoit sur l'espace membre
                        include 'app/views/authentification.php';
                    }
                }
            }
        }



        Après si tu veux plus d'aide, il va falloir poster ton code

        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2016 à 19:11:43

          D'accord ! 

          Merci à vous deux pour vos réponses ! 

          Pour l'instant, j'ai juste gribouillé un truc à la main pour avoir une idée des différents fichiers.

          Etant donné que j'ai un test sur le PHP la semaine prochaine, je vais essayer de coder proprement pour bien saisir le principe.

          Est-ce que c'est bête de faire deux pages pour la vue, une avec le formulaire et une sans ?

          Edit : je viens d'avoir un éclair de génie et je viens de saisir ! Vite que je code !

          Edit 2 :  Voilà j'ai tenté quelque chose, c'est pas top mais au moins j'ai essayé. 

          Je ne sais pas si ça marche parce que je n'ai pas crée les bases de données. 

          Du coup, pas spécialement besoin d'avoir un controleur global là. Enfin je trouve pas ça utile.

          Voici le code : 

          Modèle : connexion_sql.php 

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

          testconnexion.php :

          <?php
          class TestConnexion{
          	global $bdd;
          	
          	public fonction login(login, mdp){
          		
          	$requete = $bdd -> prepare('SELECT * FROM user WHERE login = ? and password = ?');
          	$ligne = $requete->execute(array(login, mdp);
          	return $ligne;
          	
          		
          	}
          }
          



          Controleur : identifiant.php

          <?php
          
          include_once('modele/connexion_sql.php');
          
          if (isset($_POST['pseudo']) && $_POST['mdp'])
          {
          	include('modele/TestConnexion.php);
          	$tc = new TestConnexion();
          	$ligne = $tc->login($_POST['pseudo'],$_POST['mdp'] ); 
          	if(ligne == 1){ //si ligne ==1 alors l'utilisateur a rentré un bon identifiant et mot de passe
          		require_once('vue/page1.php');
          	}
          	
          }else{
          	require_once('vue/page1.php')
          }
          





          Vue : page1.php

          <!DOCTYPE html>
          <html>
              <head>
                  <title></title>
                  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                  
              </head>
                  
          	<body>
          		<form action="identifiant.php" method="post">
          			<p>
          			<label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" />
          			<label for="message">Mot de passe</label> :  <input type="password" name="mdp" id="mdp" /><br />
          
          			<input type="submit" value="Connexion" />
          			</p>
          		</form>
          		
          		<?php if ($ligne = 1){?>
          			<form action="requetesql.php" method="post">
          			
          			<p> Taper votre requête SQL : </p>  <input type="text" name="pseudo" id="pseudo" />
          
          			<input type="submit" value="Envoyer" />
          			</p>
          			</form>
          			
          		<?php }?>
                 
          	</body>
          </html>


          Je n'ai pas encore réfléchi pour la SESSION, et dans la vue il y'a une page requetesql.php.

          Elle n'existe pas. Plus tard, pour m'entraîner, je l'a créerai, et ça sera une page qui retourne un tableau avec des requêtes sql.

          Merci d'avance si vous me corrigez !

          -
          Edité par Palipica 29 octobre 2016 à 14:07:53

          • Partager sur Facebook
          • Partager sur Twitter

          Page de connexion en MVC

          × 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