IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Développer une appli en Architecture MVC


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut Développer une appli en Architecture MVC
    Bonjour,

    Je fais mes premières armes en PHP et je me suis fixé l'objectif de créer une application toute bête qui permet à un utilisateur
    de remplir un tableau qui répertorie les films favoris par titre et réalisateur dudit utilisateur (pas de quoi rêver mais bon ! )

    Je rencontre un problème au niveau de la connexion pour accéder à l'espace membre où j'ai crée une requête qui doit récupérer
    le mot de passe de l'utilisateur en fonction de son pseudo(formulaire), puis le comparer au mot de passe stocké dans la base.
    Or le code suivant ne fonctionne pas. Ligne 16, resultat['pass'] (qui devrait contenir le mot de passe de la base)
    est non défini et je ne comprends pas pourquoi.

    J'ai extrait chaque module qui traite la connexion de mon MVC sur ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
    //________________________________MODEL___________________________________
    $sql = 'SELECT id, pass, pseudo FROM membres WHERE pseudo = :pseudo';
     
    $pdostatement = $this->_db->prepare($sql);
    $pdostatement->bindValue(':pseudo', $_POST['pseudoConnex'], PDO::PARAM_STR);
    $pdostatement->execute();
     
    $resultat = $pdoStatement->fetch();
    return $resultat
     
    //_______________________________INDEX______________________________________
    case 'connex' : 
    if(!empty($_POST['pseudoConnex']) && !empty($_POST['passConnex'])) {
    		$passTest = password_verify($_POST['passConnex'], $resultat['pass']);//$resultat['pass'] non définie
     
    		if ($passTest) {
    			session_start();
     
    			$_SESSION['pseudo'] = $resultat['pseudo'];
     
    			echo 'salut '.$_SESSION['pseudo'].' ! ';
    	    }
    	} else {
        echo 'Mauvais identifiant ou mot de passe !';
     
    //____________________________CONTROLLER____________________________________
    function connexion() {
    	$membre = new Membre();//Instance de classe "Membre"
    	$manager = new Manager_Membre();//Instance de la classe du manager "Manager_Membre"
     
    	$resultat = $manager->getMember($membre);
    }
    //_____________________FORMULAIRE DE CONNEXION_______________________________
    ?>
    <form method="POST" action="../index.php?action=connex">
     
    			<p>
    				<label for="pseudoConnex">Pseudo :</label>
    				<input type="text" name="pseudoConnex" id="pseudoConnex">
    			</p>
     
    			<p>
    				<label for="passConnex">Mot de passe :</label>
    				<input type="password" name="passConnex" id="passConnex">
    			</p>
     
    			<input type="submit" value="Envoyer"/>
    		</form>
    Merci pour votre coup de pouce !

    Au plaisir de vous lire
    Olivier

  2. #2
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Bonjour,

    Fondamentalement ton code semble correcte mais,
    il y a 2 points que je ne vois pas dans ton code qui peux être source d'erreur :

    1 - Comment dans ton index tu récupères les données de ton modèle
    On voit l'utilisation de la variable $resultat['pass'] mais pas l'appel au script. Donc est-il existant ?

    2 - L'utilisation de la fonction password_verify($_POST['passConnex'], $resultat['pass']);
    ça suggère que tu utilises la fonction password_hash() pour la génération des mot de passe utilisateur. C'est le cas ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut
    Merci pour ton retour car je commence à tourner en rond sur ce script !

    -Point 1, je lie bien le script de mon contrôleur à l'index comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require('Controller/frontend_Cont.php');
    Dans le front j'ai configuré un autoload comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function load($classe) {
    	include 'Model/'.$classe.'.class.php';
    }
    spl_autoload_register('load');
    - Point 2 : En effet j'utilise bien password_hash() comme ceci lors de l'ajout d'un nouveau membre (phase d'inscription à l'appli)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['pass'] = password_hash($_POST['pass'], PASSWORD_DEFAULT)
    D'ailleurs le résultat est visible dans la table

    Cordialement

  4. #4
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Dans ce que je vois tu utilises dans ton index.php un switch pour que en fonction du paramètre $_GET tu puisses réaliser telles où telles opérations (on peu même dire que ça te sers de routeur).
    Mais je ne vois pas quand tu passes dans ton contrôleur au paramètre connex, ni quand tu renvois tes données de ta fonction connexion()

  5. #5
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut
    Je ne suis pas sûr d'avoir compris ce que tu m'as dit (désolé, je comprends vite mais il faut m'expliquer longtemps ; Du coup je te livre ma logique.

    Le paramètre connex est envoyé via le formulaire dans l'url comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="POST" action="../index.php?action=connex">
    Une fois dans le routeur, j'exécute la fonction connexion() comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    				
    case 'connex' : 
    			if(!empty($_POST['pseudoConnex']) && !empty($_POST['passConnex'])) {
    				$passTest = password_verify($_POST['passConnex'], $resultat['pass']);
    
    				if ($passTest) {
    					connexion();//Ajout car oublié dans mon premier post !!!!!
    					session_start();
    					$_SESSION['id'] = $resultat['id'];
    					$_SESSION['pseudo'] = $pseudo;
    
    					echo 'salut '.$_SESSION['pseudo'].' ! ';
    Ensuite je pars dans le controlleur où j'ai bien ma fonction connexion() qui va stocker le contenu de la requête du modèle grace à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$resultat = $manager->getMember($membre);
    Pour rappel, mon modele renvoie la valeur de retour de la requête au controller comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $resultat = $pdoStatement->fetch();
     
     
    		return $resultat;
    Merci encore de t'intéresser à mon problème !

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2017, 19h15
  2. Réponses: 10
    Dernier message: 12/04/2010, 00h31
  3. Réponses: 2
    Dernier message: 04/04/2009, 09h17
  4. Développer une appli 64 bits avec PB
    Par Nicolas59 dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 24/02/2009, 10h27
  5. Réponses: 2
    Dernier message: 26/08/2003, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo