Partage
  • Partager sur Facebook
  • Partager sur Twitter

Formulaire de connexion

Création d'un formulaire de connexion

    22 mai 2018 à 18:27:37

    Bonsoir à tous,

    Je suis actuellement débutant en programmation (je m'essaye un peu au WEB, PYTHON).

    Je vous contacte car je souhaite actuellement faire un formulaire de connexion (avec le traitement de ce formulaire par une autre page "externe" en PHP) afin que les personnes puissent se connecter sur mon site web (j'ai déjà réaliser une page d'inscription sur le site sans trop de problème qui est actuellement plutôt fonctionnel) mais le formulaire de connexion ne veut jamais fonctionner malgré ms diverses recherches sur Internet. Je vous transmet ci-dessous le code de ma page de connexion et de son traitement par le fichier PHP :

    Code du formulaire de connexion (c'est l'endroit ou la personne rentre ses infos) (que j'ai nommé connexion.php) :

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<link rel="stylesheet" href="style3.css" />
    		<title>Connexion</title>
    		
    	</head>
    	<body>
    	<header>
    	<div id="menu">
    	<nav> </br>
    		<ul>
    					<a class="menubutton" href="#" onclick="Ajax('listing', 'actualite.php' )" >Les actualités</a>
    					 <a class="menubutton" href= "contact.html">Me contacter</a>
    					 <a class="menubutton" href=" forum.html">Forum</a>
    					 <a class="menubutton" href="#" onclick="Ajax('listing', 'inscription.php' )" >Inscription</a>
    					 <a class="menubutton" href="connexion.php">Connexion</a>
    					 <a class="menubutton" href="météo.html">Météo</a>
    					 <a class="menubutton" href="test_variable.php">Tester des variables</a>
    		</ul>
    	</nav>
    	</div>
    	</header>
    	<h1>Page de connexion</h1>
    	<form action="espace_connexion.php">
    		<label><b>Votre nom d'utilisateur :</b></label>
    		<input type="text" id="pseudo" placeholder="Nom d'utilisateur" /> </br>
    		<label><b>Votre mot de passe :</b></label>
    		<input type="password" id="password" placeholder="Mot de passe" /> </br>
    		<input type="submit" value="Valider" class="button" /> </br>
    	</form>
    	</body>
    </html>



    Code du fichier du traitement du formulaire ci-dessus (que j'ai nommé espace_connexion.php) :

    <?php
    /* Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1) */
    header('Content-type: text/html; charset=UTF-8');
    
    /* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
    Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
    function Verif_magicquotes ($chaine) 
    {
    if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
    
    return $chaine;
    } 
    
    /* Initialisation du message de réponse */
    $message = null;
    
    
    /* Si le formulaire est envoyé */
    if (isset($_POST['pseudo'])) 
    {
    
        /* Récupération des variables issues du formulaire
        Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
        (Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
        En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
        $pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
        $pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
        
    
        /* Si $pseudo et $pass différents de null */
        if(isset($pseudo,$pass)) 
        {
             /* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
             A MODIFIER avec vos valeurs */
             $hostname = "localhost";
             $database = "monsite";
             $username = "root";
             $password = "";
        
             $connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
    
             /* Connexion à la base */
             mysql_select_db($database, $connection);
        
             /* Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1) */
             mysql_query("SET NAMES 'utf8'");
        
             /* Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string */
             $nom = mysql_real_escape_string($pseudo);
             $password = mysql_real_escape_string($pass);
        
        
             /* Requête pour récupérer les enregistrements répondant à la clause : 
             champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
            $requete = "SELECT * FROM membres WHERE pseudo = '".$nom."' AND pass = '".$password."'";  
        
             /* Exécution de la requête */
             $req_exec = mysql_query($requete) or die(mysql_error());
        
             /* Création du tableau associatif du résultat */
             $resultat = mysql_fetch_assoc($req_exec); 
    
             /* Les valeurs (si elles existent) sont retournées dans le tableau $resultat;  */
             if (isset($resultat['pseudo'],$resultat['pass']))  
                   {
                     /* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
                     qui donne au visiteur la possibilité de visiter les pages protégées.  */
                     session_start();
                     $_SESSION['login'] = $pseudo;
                
                     /* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle. */
                     $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "#">Cliquez ici pour vous connecter</a>';
                    }
                    else
                    {   /* Le pseudo ou le mot de passe sont incorrect */
                    $message = 'Le pseudo ou le mot de passe sont incorrect';
                    } 
    
        }
        else 
        {  /* au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli */
        $message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
        }
    }
    ?>

    Actuellement avec ce code, je suis redirigé vers la page de traitement mais la page est blanche que je rentre les bonnes infos ou les mauvaises infos dans le formulaire (alors que d'après le code, il devrait afficher soir que les champs ne sont pas remplis ou il démarre la session). Auriez-vous une solution à mon problème ? Savez-vous comment pourrais-je faire pour créer une page de connexion qui soit fonctionnelle ?

    J'espère avoir été clair dans mes explications.

    Merci d'avance pour ceux qui prendront le temps de m'aider.

    Cordialement

    Quentin

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2018 à 19:25:21

      Bonjour,

      Les inputs doivent avoir un name.

      Pour les sessions, session_start() est nécessaire en début de code.

      -
      Edité par philodick 22 mai 2018 à 19:27:12

      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2018 à 20:34:04

        philodick a écrit:

        Bonjour,

        Les inputs doivent avoir un name.

        Pour les sessions, session_start() est nécessaire en début de code.

        -
        Edité par philodick il y a environ 1 heure


        C'est de quels inputs dont vous parlez ? Pour la session start(), je pensais avoir fait une redirection au dessus vers mon fichier PHP de config mais il semblerait que je l'ai oublié. Vous pensez que ça vient de la le fait que ça ne m'affichait rien sur la page ?
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2018 à 21:23:53

          Hey ;

          Comme dis par @philodick ; Tu n'as pas mis de "name" sur tes inputs (Ton formulaire donc)
          Du coup, le session_start(); ce trouve dans le fichier de config que tu inclus ?

          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2018 à 21:43:10

            Oui, déjà ça, puisque $_POST['pseudo'] n'existe jamais.
            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2018 à 7:07:11

              Koyuki Tanaka a écrit:

              Hey ;

              Comme dis par @philodick ; Tu n'as pas mis de "name" sur tes inputs (Ton formulaire donc)
              Du coup, le session_start(); ce trouve dans le fichier de config que tu inclus ?


              Oui le session start et connexion à la BDD ou une erreur si il n'y arrive pas se trouve dans mon fichier de config. J'ai déjà fait la redirection vers ce fichier en require_once mais cela n'a pour le moment rien changé au problème. Je vais essayer du coup de mettre des noms dans le formulaire pour voir si cela fonctionne mieux  (il faut mettre name = "ici je mets le nom") ? Désolé pour toutes ces questions mais je suis débutant et je cherche à comprendre le fonctionnement. 

              Merci d'avance 

              • Partager sur Facebook
              • Partager sur Twitter
                23 mai 2018 à 8:56:25

                En résumé, c'est <input name="toto" /> qui te permettra de récupérer $_POST['toto'].
                • Partager sur Facebook
                • Partager sur Twitter
                  23 mai 2018 à 17:32:23

                  philodick a écrit:

                  En résumé, c'est <input name="toto" /> qui te permettra de récupérer $_POST['toto'].

                  Bonjour,


                  C'est fait je viens de mettre des names dans le formulaire de connexion (que je mets ci-joint) :

                  <!DOCTYPE html>
                  <html>
                  	<head>
                  		<meta charset="utf-8" />
                  		<link rel="stylesheet" href="style3.css" />
                  		<title>Connexion</title>
                  		
                  	</head>
                  	<body>
                  	<header>
                  	<div id="menu">
                  	<nav> </br>
                  		<ul>
                  					<a class="menubutton" href="#" onclick="Ajax('listing', 'actualite.php' )" >Les actualités</a>
                  					 <a class="menubutton" href= "contact.html">Me contacter</a>
                  					 <a class="menubutton" href=" forum.html">Forum</a>
                  					 <a class="menubutton" href="#" onclick="Ajax('listing', 'inscription.php' )" >Inscription</a>
                  					 <a class="menubutton" href="connexion.php">Connexion</a>
                  					 <a class="menubutton" href="météo.html">Météo</a>
                  					 <a class="menubutton" href="test_variable.php">Tester des variables</a>
                  		</ul>
                  	</nav>
                  	</div>
                  	</header>
                  	<h1>Page de connexion</h1>
                  	<form action="espace_connexion.php">
                  		<label><b>Votre nom d'utilisateur :</b></label>
                  		<input name="pseudo" type="text" id="pseudo" placeholder="Nom d'utilisateur" /> </br>
                  		<label><b>Votre mot de passe :</b></label>
                  		<input name= "pass" type="password" id="password" placeholder="Mot de passe" /> </br>
                  		<input type="submit" value="Valider" class="button" /> </br>
                  	</form>
                  	</body>
                  </html>

                  Cependant cela n'a rien changé au problème et j'obtiens toujours la même page blanche sans que rien ne s'affiche sur la page. Tu penses que cela peut venir d'où ? Tu aurais une nouvelle solution pour tenter de résoudre le problème ?

                  Merci d'avance

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 mai 2018 à 19:49:48

                    philodick a écrit:

                    Il te manque encore method="post" dans le form


                    Merci pour ta remarque car il se trouve que celle-ci à eu une effet au niveau de ma page blanche sur laquelle il s'affiche maintenant une erreur dont je ne connais pas trop l'origine et que je ne sais pas vraiment comment résoudre.

                    Voici d'abord pour commencer une nouvelle fois le code de la page de traitement (espace_connexion.php) :

                    <?php
                    	require_once 'config.php';
                    ?>
                    <?php
                    /* Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1) */
                    header('Content-type: text/html; charset=UTF-8');
                    
                    /* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
                    Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
                    function Verif_magicquotes ($chaine) 
                    {
                    if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
                    
                    return $chaine;
                    } 
                    
                    /* Initialisation du message de réponse */
                    $message = null;
                    
                    
                    /* Si le formulaire est envoyé */
                    if (isset($_POST['pseudo'])) 
                    {
                    
                        /* Récupération des variables issues du formulaire
                        Teste l'existence les données post en vérifiant qu'elles existent, qu'elles sont non vides et non composées uniquement d'espaces.
                        (Ce dernier point est facultatif et l'on pourrait se passer d'utiliser la fonction trim())
                        En cas de succès, on applique notre fonction Verif_magicquotes pour (éventuellement) nettoyer la variable */
                        $pseudo = (isset($_POST['pseudo']) && trim($_POST['pseudo']) != '')? Verif_magicquotes($_POST['pseudo']) : null;
                        $pass = (isset($_POST['pass']) && trim($_POST['pass']) != '')? Verif_magicquotes($_POST['pass']) : null;
                        
                    
                        /* Si $pseudo et $pass différents de null */
                        if(isset($pseudo,$pass)) 
                        {
                             /* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
                             A MODIFIER avec vos valeurs */
                             $hostname = "localhost";
                             $database = "monsite";
                             $username = "root";
                             $password = "";
                        
                             $connection = mysql_connect($hostname, $username, $password) or die(mysql_error());
                    
                             /* Connexion à la base */
                             mysql_select_db($database, $connection);
                        
                             /* Indique à mySql de travailler en UTF-8 (par défaut mySql risque de travailler au standard ISO-8859-1) */
                             mysql_query("SET NAMES 'utf8'");
                        
                             /* Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string */
                             $nom = mysql_real_escape_string($pseudo);
                             $password = mysql_real_escape_string($pass);
                        
                        
                             /* Requête pour récupérer les enregistrements répondant à la clause : 
                             champ du pseudo et champ du mdp de la table = pseudo et mdp postés dans le formulaire*/
                            $requete = "SELECT * FROM membres WHERE pseudo = '".$pseudo."' AND pass = '".$password."'";  
                        
                             /* Exécution de la requête */
                             $req_exec = mysql_query($requete) or die(mysql_error());
                    		 
                             /* Création du tableau associatif du résultat */
                             $resultat = mysql_fetch_assoc($req_exec); 
                    
                             /* Les valeurs (si elles existent) sont retournées dans le tableau $resultat;  */
                             if (isset($resultat['pseudo'],$resultat['pass']))  
                                   {
                                     /* Démarre la session et enregistre le pseudo dans la variable de session $_SESSION['login']
                                     qui donne au visiteur la possibilité de visiter les pages protégées.  */
                                     session_start();
                                     $_SESSION['login'] = $pseudo;
                                
                                     /* A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle. */
                                     $message = 'Bonjour '.htmlspecialchars($_SESSION['login']).' <a href = "#">Cliquez ici pour vous connecter</a>';
                                    }
                                    else
                                    {   /* Le pseudo ou le mot de passe sont incorrect */
                                    $message = 'Le pseudo ou le mot de passe sont incorrect';
                                    } 
                    
                        }
                        else 
                        {  /* au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli */
                        $message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
                        }
                    }
                    ?>

                    Pourrais-tu me donner une solution détaillée si possible afin de régler cette erreur qui m'empêche d'aller plus loin dans le traitement de ma page ?

                    Merci d'avance

                    Capture d'écran de l'erreur qui apparait lors du traitement :



                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 mai 2018 à 19:57:56

                      En fait, le tuto ou cours dont tu t'inspires est sans doute très ancien (la fonction verifmagicquotes() en est assez symptomatique d'ailleurs) et toutes les fonctions d'interfaces qui commencent par mysql_ sont obsolètes. Ce n'est pas vraiment une erreur au sens strict qui s'affiche, mais un avertissement qui te dit que bientôt (avec php 7) ces fonctions ne seront plus utilisables, et qu'il vaudrait mieux utiliser PDO.

                      Sur le cours php général d'OC, c'est d'ailleurs cette extension qui est utilisée : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/presentation-des-bases-de-donnees-2

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 mai 2018 à 20:48:22

                        philodick a écrit:

                        En fait, le tuto ou cours dont tu t'inspires est sans doute très ancien (la fonction verifmagicquotes() en est assez symptomatique d'ailleurs) et toutes les fonctions d'interfaces qui commencent par mysql_ sont obsolètes. Ce n'est pas vraiment une erreur au sens strict qui s'affiche, mais un avertissement qui te dit que bientôt (avec php 7) ces fonctions ne seront plus utilisables, et qu'il vaudrait mieux utiliser PDO.

                        Sur le cours php général d'OC, c'est d'ailleurs cette extension qui est utilisée : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/presentation-des-bases-de-donnees-2


                        D'accord. Ceci je l'avais un peu près compris en lisant des articles sur internet dessus. Cependant ce que je ne comprends pas vraiment c'est qu'est-ce que je dois changer concrètement au niveau de mon code  ? Concernant l'article D'OC dont tu m'as laissé le lien, il me semble qu'il ne renvoie pas exactement vers la page parlant des PDO. A ce moment la, il faut que j'aille sur quelle page pour que ça aborde les PDO ? 

                        Merci d'avance 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 mai 2018 à 20:51:27

                          Oui, c'est tout le tuto, le début du travail pratique est ici : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2#/id/r-2175052

                          Ce qu'il faudrait changer, c'est toute la partie connexion à la bdd et requêtage.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 mai 2018 à 21:01:23

                            philodick a écrit:

                            Oui, c'est tout le tuto, le début du travail pratique est ici : https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2#/id/r-2175052

                            Ce qu'il faudrait changer, c'est toute la partie connexion à la bdd et requêtage.


                            Parfait. Merci pour toute ton aide. Je vais regarder tout ceci. Si je comprends bien, ça veut dire qu'il y a encore du travail pour que j'obtiennes un code parfait avec un site parfaitement fonctionnel ? Tu penses qu'il est normal qu'il soit beaucoup plus compliqué de coder la page de connexion que celle d'inscription ? 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 mai 2018 à 21:16:05

                              Oui, c'est un peu plus compliqué, mais il y a beaucoup de choses inutiles dans ton code aussi (jusqu'à la ligne 35 en fait qu'on pourrait remplacer par un simple if(!empty des variable $_POST).

                              Je te conseille quand même de repartir de zéro avec PDO, au moins tu n'apprendras pas des choses qui ne te serviront plus dans un mois.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 mai 2018 à 21:20:45

                                philodick a écrit:

                                Oui, c'est un peu plus compliqué, mais il y a beaucoup de choses inutiles dans ton code aussi (jusqu'à la ligne 35 en fait qu'on pourrait remplacer par un simple if(!empty des variable $_POST).

                                Je te conseille quand même de repartir de zéro avec PDO, au moins tu n'apprendras pas des choses qui ne te serviront plus dans un mois.

                                D'accord. Par contre J'ai peur que si je mets uniquement le (!empty avec le $POST de ['pass'] et de ['pseudo']) simplement comme ça sans définir les variables, il risque de m'affiche une erreur me disant que les variables ne sont pas définies comme il m'avait dis parfois dans d'autre page. Tu n 'est pas D'accord ? 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 mai 2018 à 21:27:56

                                  Non, tu verras aussi qu'avec PDO et les requêtes préparées, tu peux utiliser directement les variables $_POST dans la requête. Elles sont définies automatiquement à l'envoi du formulaire.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 mai 2018 à 21:35:17

                                    philodick a écrit:

                                    Non, tu verras aussi qu'avec PDO et les requêtes préparées, tu peux utiliser directement les variables $_POST dans la requête. Elles sont définies automatiquement à l'envoi du formulaire.


                                    Ah cool. Je testerais ceci des que j'aurais pour voir les nombreuses possibilités que peut permettre PDO par rapport à la simple requête MYSQL
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Formulaire de connexion

                                    × 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