Partage
  • Partager sur Facebook
  • Partager sur Twitter

creation d'un espace membre

    5 mai 2021 à 13:05:24

    bonjour

    je tente de creer un espace membre mais j'avoue je galère. beaucoup de façon de procéder d'apres ce je lis dans les posts. voici ce que j'ai fait et qui ne fonctionne pas.


    <?php
    
    session_start();
     $DB = new PDO('mysql:host=*******;dbname=*****;charset=utf8', '******', '****');
    //récupération des variables
    $pseudo = ($_POST['pseudo']);
    $pass = ($_POST['pass']);
    $pseudo = ($_GET['pseudo']);
    
    
    //  Récupération de l'utilisateur et de son pass hashé
    $req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
    
        $req->execute(array('pseudo' => $pseudo));
        $resultat = $req->fetch();
     
    // Comparaison du pass envoyé via le formulaire avec la base
        $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
        
    
        
        if (!$resultat) {
            echo 'Mauvais identifiant ';
        } else {
            if ($isPasswordCorrect) {
     
                echo 'connexion avec le pseudo '; echo $pseudo;
                session_start();
                $_SESSION['id'] = $resultat['id'];
                $_SESSION['pseudo'] = $pseudo;
    
        
         $DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
           
        header('Location:login2.php');   
               
                //redirection vers l'index
    
            } else {
                echo 'Mauvais mot de passe !';
            }
        }
    
    ?>



    -
    Edité par maohi56 5 mai 2021 à 15:39:42

    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2021 à 13:17:41

      Bonjour,

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Manque de précisions

      Vous êtes ici sur un forum d'entraide communautaire et non pas sur un forum de demande de service, le but n'est donc pas de fournir une réponse toute faite ou de directement fournir la solution à quiconque viendrait sans la moindre trace. Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :

      • Un descriptif clair et précis du problème : qu'est-ce qui ne marche pas, quels sont les messages d'erreur ?
      • La tentative actuelle de résolution que vous avez effectué : il nous faudrait probablement le formulaire aussi (tu sembles récupérer le pseudo via $_GET *et* $_POST…)
      • Le résultat attendu et le résultat actuel
      • Toutes pistes de recherches pouvant aider à la résolution
      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        5 mai 2021 à 13:25:23

        Définir "ne pas marcher" ?

        > $pseudo = ($_POST['pseudo']);

        > $pseudo = ($_GET['pseudo']);

        C'est du GET ou du POST ? (sachant que le dernier écrase le premier donc ce dernier ne sert à rien)

        > $DB-&gt;exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");

        C'est quoi cette requête ? $session sort de nulle part, avec le mot de passe en clair en clause WHERE ?!?

        Enfin, bon, c'est le code qui vous est donné dans le TP du cours PHP/MySQL où on retrouve l'erreur du password_verify effectué avant d'avoir exclu le cas où fetch renvoie FALSE (pseudo n'existant pas dans la base) : il suffit de le suivre, pas besoin d'inventer.

        -
        Edité par julp 5 mai 2021 à 13:30:11

        • Partager sur Facebook
        • Partager sur Twitter
          5 mai 2021 à 15:41:21

          Merci Julp, je vais supprimer le GET, je ne savais pas que l'un écrasais l'autre.

          pour la session en effet je pense qu'il doit manquer la création de la variable session.

          <?php
          
          session_start();
           $DB = new PDO('mysql:host=*******;dbname=*****;charset=utf8', '******', '****');
          //récupération des variables
          $pseudo = ($_POST['pseudo']);
          $pass = ($_POST['pass']);
          
          
          
          //  Récupération de l'utilisateur et de son pass hashé
          $req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
          
              $req->execute(array('pseudo' => $pseudo));
              $resultat = $req->fetch();
           
          // Comparaison du pass envoyé via le formulaire avec la base
              $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
              
          
              
              if (!$resultat) {
                  echo 'Mauvais identifiant ';
              } else {
                  if ($isPasswordCorrect) {
           
                      echo 'connexion avec le pseudo '; echo $pseudo;
                      session_start();
                      $_SESSION['id'] = $resultat['id'];
                      $_SESSION['pseudo'] = $pseudo;
          
              
               $DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
                 
              header('Location:login2.php');   
                     
                      //redirection vers l'index
          
                  } else {
                      echo 'Mauvais mot de passe !';
                  }
              }
          
          ?>



          • Partager sur Facebook
          • Partager sur Twitter
            5 mai 2021 à 18:24:44

            Bonjour,

            Comme dit plus haut, la ligne 17 devrait être faite entre la ligne 24 et 25 pour le cas où la requête renverrai false

            Pourquoi la seconde requête n'est pas préparer comme la 1ère ? et le WHERE serzait sur l'id et non le mdp.

            Que souhaites-tu faire avec cette requête ?

            Active les erreurs PDO (cf signature)

            • Partager sur Facebook
            • Partager sur Twitter
              6 mai 2021 à 8:28:35

              l'acces a l'espace membre fonctionne désormais

              mais je n'arrive pas a creer une session

              • Partager sur Facebook
              • Partager sur Twitter
                6 mai 2021 à 12:32:07

                si je ne me trompe pas en créant une session, le visiteur une fois identifié pourra naviguer sur tout le site sans avoir a s'identifier a nouveau.

                • Partager sur Facebook
                • Partager sur Twitter
                  6 mai 2021 à 13:00:05

                  A condition de la vérifier sur chaque page
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mai 2021 à 13:12:33

                    je pensais qu'il fallait ecrire " le code session" dans la base de données a chaque fois.

                    mais en relisant le tuto je ne vois pas ca.

                    j'avoue que je suis perdu dans cette partie complexe.

                    -
                    Edité par maohi56 6 mai 2021 à 13:28:26

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 mai 2021 à 18:23:13

                      Le code session ? 

                      Lorsque l'utilisateur se connecte, tu affectes la session de son id quand il est autorisé à accéder à l'espace privé (ce que tu viens de faire)

                      Sur chaque page de l'espace privé, tu dois vérifier si la session existe

                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 mai 2021 à 21:23:23

                        je n'arrive pas a trouver d'ou vient le probleme. Vois tu ce qui ne va pas?

                        page login.php

                        <?php
                        
                        session_start();
                         $DB = new PDO('xxxxxx'); 
                        //récupération des variables
                        $pseudo = ($_POST['pseudo']);
                        $pass = ($_POST['pass']);
                        
                        
                        
                        //  Récupération de l'utilisateur et de son pass hashé
                        $req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
                        
                            $req->execute(array('pseudo' => $pseudo));
                            $resultat = $req->fetch();
                         
                        
                             
                         
                             
                            if (!$resultat) {
                                echo 'Mauvais identifiant ';
                            } else {
                        		
                        		// Comparaison du pass envoyé via le formulaire avec la base
                            $isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
                        		
                                if ($isPasswordCorrect) {
                          
                                    echo 'connexion avec le pseudo '; echo $pseudo;
                                    session_start();
                                    $_SESSION['id'] = $resultat['id'];
                                    $_SESSION['pseudo'] = $pseudo;
                         
                             
                             $DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
                                
                            header('Location:login2.php');  
                                    
                                    //redirection vers l'index
                         
                                } else {
                                    echo 'Mauvais mot de passe !';
                                }
                            }
                         
                        ?>
                        



                        page login2.php

                        <?php
                        
                        require_once('configruban.php');
                        	 
                        if (isset($_SESSION['id']) AND isset($_SESSION['pseudo']))
                        {
                            echo 'Bonjour ' . $_SESSION['pseudo'];
                        }
                        	
                        
                        
                        	
                            
                        	echo'
                        	<div class="Style1" align="center">espace membre </a> <br> <br>
                        	<a href="profil.php"><strong>mon compte</strong></a> <br>
                        	<a href="macollec.php?pseudo='; echo $pseudo; echo '"><strong>ma collection</strong></a> <br>
                        	<a href="mastat.php?pseudo='; echo $pseudo; echo '"><strong>mes statistiques</strong></a> <br> 	
                        		
                        	<br /><a href="logout.php"><strong>D&eacute;connexion</strong></a></div>';
                        	
                        ?>
                        



                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 mai 2021 à 21:31:57

                          Retire ta ligne 31, et à quoi sert encor euine fois, ta ligne 36 ?

                          Sur ton second fichier, ou est ton session_start() ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 mai 2021 à 21:34:09

                            Définir "problème" ?

                            On ne sait toujours pas à quoi sert cet UPDATE ni d'où sort $session (et qui devrait valoir une notice: undefined variable session) ni ce que vient faire le mot de passe en clair en clause WHERE quand tu le haches ni pourquoi la requête n'est pas préparée non plus !

                            Il manque un session_start pour le second script ?

                            Encore une fois, compare ton code à celui du TP : tu nous redonnes le même code avec les mêmes erreurs toujours sans nous expliquer en quoi "ça marche po" soit aucun effort de ta part !

                            EDIT : trop lent

                            > $resultat['id']

                            Ne peut pas exister avec SELECT pass FROM, ça devrait te valoir une notice: undefined index id si tant est que tu travailles avec toutes les erreurs PHP affichées.

                            En principe, faire un echo avant une redirection est censé bloquer cette dernière, gare aux surprises quand tu passeras en production avec un output_buffering à off parce que tu ne respectes pas le fonctionnement du protocole http (entêtes puis corps)

                            N'oublions pas les XSS, il n'y a aucun htmlspecialchars non plus.

                            Pas besoin de passer le pseudo de l'utilisateur courant en GET quand tu l'as en session.

                            Et en supposant que le formulaire soit bien en method="POST" et que tes variables POST existent bel et bien parce que tu n'as fourni aucun var_dump de $_POST ni même le formulaire.

                            require_once n'est pas une fonction, les parenthèses ne sont pas nécessaires.

                            Idem pour les variables $_POST, pas besoin de les parenthéser.

                            array( ... ) se simplifie depuis PHP 5.4.0 par [ ... ]

                            PS : honnêtement, mon impression, c'est qu'il (elle ?) est tombé je ne sais comment directement sur la partie TP espace membre pour le recopier (c'est le même code avec la même erreur quand même !) sans le comprendre, ni même les parties du cours qui précèdent (si tant est qu'elles aient été ne serait-ce que lues déjà). Je n'ai pas de problème avec les débutants, il y tout un tas de domaines où je le suis, mais je ne fais pas genre j'ai écrit un code quand je l'ai pompé pour commencer. De plus, on me dirait que telle chose est fausse, j'essaierais de creuser pour comprendre en quoi et si vraiment je ne comprends toujours pas, je demande or, là, non, strictement aucun effort, même code, même description inexistante du "problème".

                            -
                            Edité par julp 8 mai 2021 à 22:52:45

                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 mai 2021 à 0:53:38

                              Merci de votre aide.

                              j'ai enfin compris mes erreurs. mes débuts sont laborieux.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              creation d'un espace membre

                              × 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