Partage
  • Partager sur Facebook
  • Partager sur Twitter

Inscription/connexion en PHP

    4 juin 2013 à 10:38:44

    Bonjour tout le monde !

    Dans le cadre de mon travail de fin d'études j'ai réalisé un module d'inscription et de connexion pour mon site web.

    N'étant pas fort avancé en PHP, je me suis débrouillé comme j'ai pu. Certaines erreurs demeurent cependant...

    L'inscription fonctionne, il manque juste une gestion d'erreur en cas d'email invalide (au mauvais format).

    Suite à la création du compte, on est redirigés sur la page de connexion, les données sont envoyées dans la base de données, jusque là tout va bien ! Mais impossible de se connecter... J'ai essayé un peu tout ce que j'ai trouvé mais rien n'y fait !

    Quelqu'un peut-il me venir en aide ?

    Voici le code des différents fichiers :

    Formulaire d'inscription

    <form method="post" action="php/signup_ac.php" name="registerform" class="registerform">
    <fieldset>
    
    <label>Inscription</label>
    <input type="text" name="email" id="email" placeholder="email"/>
    <input type="password" name="password" id="password" placeholder="mot de passe"/>	
    <input type="password" name="checkpassword" id="checkpassword" placeholder="confirmez le mot de passe"/>
    
    		
    <input type="submit" name="register" class="register" value="Créer un compte" />
    	
    </fieldset>	
    </form>

    signup_ac.php (gère les erreurs et envoie les données à la database)

    <?php
    include "connexion.php";
    	$email = mysql_real_escape_string($_POST['email']);
        $password = md5(mysql_real_escape_string($_POST['password']));
        $checkpassword = md5(mysql_real_escape_string($_POST['checkpassword']));
        $emailcheck = mysql_query("SELECT * FROM users WHERE Email = '".$email."'");
       
    	 
         if($checkpassword !== $password) {
    	     echo "<h1>Erreur</h1>";
    	     echo "<p>Vous avez écrit deux mots de passe différents</p>";
         }
         
         elseif($email == $emailcheck) {
    	     echo "<h1>Erreur</h1>";
    	     echo "<p>Cet email est déjà enregistré chez nous</p>";
         }
         
         else
         {
         	$registerquery = mysql_query("INSERT INTO users (Email, Password) VALUES('".$email."', '".$password."')");
            if($registerquery)
            {
            	?>
                <script>
            	document.location.href="../login.php";
            	</script>
            	<?php
    
            }
            else
            {
         		echo "<h1>Erreur</h1>";
            	echo "<p>Désolé, votre inscription a échoué. Veuillez recommencer en <a href='../login.php'>cliquant ici</a></p>";    
            }    	
         }
    
    ?>

    Formulaire de connexion

    <form method="post" action="php/login_ac.php" name="registerform" class="registerform">
    <fieldset>
    
    <label>Connexion</label>
    <input type="text" name="email" id="email" placeholder="email"/>
    <input type="password" name="password" id="password" placeholder="mot de passe"/>	
    <input type="submit" name="register" class="register" value="Connexion" />
    
    </fieldset>
    </form>

    login_ac.php (vérifie la correspondance de l'email et du password à la database)

    <?php
    
    	include "connexion.php";
    	
    	$email = mysql_real_escape_string($_POST['email']);
        $password = md5(mysql_real_escape_string($_POST['password']));
        
    	$checklogin = mysql_query("SELECT * FROM users WHERE Email = '$email' AND Password = '$password'");
        
        if($checklogin == 1) {
        
        	$row = mysql_fetch_array($checklogin);
            $email = $row['Email'];
            
            $_SESSION['email'] = $email;
            $_SESSION['password'] = $password;
            
        	echo "<h1>Félicitations</h1>";
            echo "<p>Vous allez maintenant être redirigé vers votre espace membre !</p>";
            echo "<meta http-equiv='refresh' content='=2;index.php' />";
        }
        
        else {
        	echo "<h1>Erreur</h1>";
            echo "<p>Désolé, votre compte n'a pas pu être trouvé. Veuillez <a href=\"../login.php\">cliquer ici</a> pour réessayer.</p>";
        }
    ?>

    Lorsque j'essaie de me connecter, la page affiche l'erreur :

    Erreur

    Désolé, votre compte n'a pas pu être trouvé. Veuillez cliquer ici pour réessayer.

    Merci d'avance !




    • Partager sur Facebook
    • Partager sur Twitter
      4 juin 2013 à 11:06:58

      Salut.

      Tout d'abord, pas besoin de ton mysql_real_escape_string sur ton mot de passe vu que tu le hash par la suite.

      Ensuite, if($checklogin == 1) peut se remplacer simplement par if($checklogin).

      Sinon, si tu lance ta requête directement dans ton gestionnaire de bdd (phpmyadmin je suppose) ça fonctionne ?

      PS: tu dis que tu n'est pas très avancé en php, tant qu'a faire profite en pour lâcher mysql_* qui est désormais obsolète au profit de PDO (ou mysqli_*) ;)

      • Partager sur Facebook
      • Partager sur Twitter
        4 juin 2013 à 11:31:55

        Ça fonctionne ! Dire qu'il suffisait juste de retirer ça pour que ça marche... Merci beaucoup !

        Quand tu parle de PDO, tu parles du fichier qui établit la connexion à la bdd ? Car j'ai vu ça en cours, je comptais appliquer le PDO au fichier connexion.php par la suite.

        J'ai quelques modifications à apporter au fichier signup_ac.php, j'aimerais gérer les erreurs suivantes :

        - Vous avez entré deux mots de passe différents

        - L'adresse email n'est pas valide

        - Cet email est déjà enregistré chez nous

        Pour l'instant, seule l'erreur des deux mots de passe différents fonctionne. Tu peux voir que j'ai essayé :

        elseif($email == $emailcheck) {
        	     echo "<h1>Erreur</h1>";
        	     echo "<p>Cet email est déjà enregistré chez nous</p>";
             }

        Mais ça ne marche pas...

        Je ne sais pas trop comment organiser mes différents if/else, vu qu'il y a 3 erreurs à gérer :(

        • Partager sur Facebook
        • Partager sur Twitter
          4 juin 2013 à 11:39:47

          Pour mieux comprendre ce qu'est PDO, le mieux serait que tu lise la partie bdd du tuto officiel PHP du sdz.

          Pour la gestion des erreurs, tu souhaites que to script affiche seulement la première erreur rencontrées ou toutes les erreurs ?

          Sinon pour ton erreur, $emailcheck contient le résultat de ta requête, pas seulement l'email dans ta bdd.

          • Partager sur Facebook
          • Partager sur Twitter
            4 juin 2013 à 11:45:26

            Ce serait bien que toutes les erreurs soient affichées.

            Ce n'est pas ce que j'ai tenté de faire ? Au moyen de cette ligne :

             $emailcheck = mysql_query("SELECT * FROM users WHERE Email = '".$email."'");



            • Partager sur Facebook
            • Partager sur Twitter
              4 juin 2013 à 11:48:44

              Regarde ici pour voir ce que mysql_query retourne comme résultat : http://php.net/manual/fr/function.mysql-query.php

              Apparemment tu n'a pas très bien compris comment manipuler les bases de données, donc tant qu'a faire, lit le tuto que je t'ai donné dans mon message précédent et passe directement à PDO ;)

              • Partager sur Facebook
              • Partager sur Twitter
                4 juin 2013 à 11:58:29

                Merci pour les ressources, je vais me renseigner et tâcher de voir ce que je dois faire :)

                Encore merci !

                • Partager sur Facebook
                • Partager sur Twitter

                Inscription/connexion en PHP

                × 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