Bien le bonjour.

Je suis actuellement bloqué sur un de mes projet qui est de développé mon site.

Le problème est le suivant, quand j'entre mes informations "pseudo" "email" "pass", ces informations ne sont pas envoyé dans ma BDD.

Et donc, dès que je veut me connecté, mes informations ne sont pas reconnu puisqu'il ne sont pas dans la BDD.

Je ne trouve pas mon erreur, après plusieurs heures à réfléchir là dessus..

Pour l'html sur la page register.php

<!DOCTYPE html>
<html>

<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>INSPINIA | Register</title>

    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="font-awesome/css/font-awesome.css" rel="stylesheet">
    <link href="css/plugins/iCheck/custom.css" rel="stylesheet">
    <link href="css/animate.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">

</head>

<body class="gray-bg">

    <div class="middle-box text-center loginscreen   animated fadeInDown">
        <div>
            <div>

                <h1 class="logo-name">EM</h1>

            </div>
            <h3>Bienvenu chez EcoMam</h3>
            <p>Créez vous un compte</p>
            <form class="m-t" role="form" method="POST" action="login.php">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="pseudo" name="pseudo">
                </div>
                <div class="form-group">
                    <input type="email" class="form-control" placeholder="email" name="email">
                </div>
                <div class="form-group">
                    <input type="password" class="form-control" placeholder="pass" name="pass">
                </div>
                <div class="form-group">
                        <div class="checkbox i-checks"><label> <input type="checkbox"><i></i> J'accepte les termes</label></div>
                </div>
                <input type="submit" value="Envoyer" class="btn btn-primary block full-width m-b">Inscription>

                <p class="text-muted text-center"><small>Vous avez déjà un compte?</small></p>
                <a class="btn btn-sm btn-white btn-block" href="login.php">Login</a>
            </form>
            <p class="m-t"> <small> Crèche EcoMam - Hazebrouck &copy; 2018</small> </p>
        </div>
    </div>

    <!-- Mainly scripts -->
    <script src="js/jquery-2.1.1.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <!-- iCheck -->
    <script src="js/plugins/iCheck/icheck.min.js"></script>
    <script>
        $(document).ready(function(){
            $('.i-checks').iCheck({
                checkboxClass: 'icheckbox_square-green',
                radioClass: 'iradio_square-green',
            });
        });
    </script>
</body>

</html>

Et le PHP de la page register.php

<?php
//Connexion à la BDD
try
{
    $bdd = new PDO('mysql:host=vikatchedx796.mysql.db;dbname=vikatchedx796;charset=utf8', 'vikatchedx796', 'MDP');
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
// Hachage du mot de passe
$pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);

// Insertion
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array(
    'pseudo' => $pseudo,
    'pass' => $pass_hache,
    'email' => $email));

   ?>

3 réponses


Bonjour.
D'après le code PHP que tu nous montres, c'est normal, étant donné que tu utilises 2 variables pour ta requête SQL qui ne sont pas définies auparavant : $pseudo et $email.
Soit tu définies les variables auparavant, ou alors tu utilises via la variable $_POST, soit par exemple :

$pseudo = $_POST['pseudo'];
$email = $_POST['email'];
$req->execute(array(
    'pseudo' => $pseudo,
    'pass' => $pass_hache,
    'email' => $email
));
// ou
$req->execute(array(
    'pseudo' => $_POST['pseudo'],
    'pass' => $pass_hache,
    'email' => $_POST['email']
));

Par contre, je te conseillerais deux choses, la première c'est d'utiliser deux champs dans ton formulaire pour le mot de passe pour éviter que l'utilisateur se trompe en saisissant le mot de passe une seule fois et la seconde de faire des vérifications concernant les champs des inputs, car actuellement par exemple, des valeurs vides peuvent être soumises dans ta requête SQL, ce qui n'est pas du tout top et par conséquent une troisième chose est de vérifier que l'enregistrement s'est bien effectué en base de données.

Par contre, autre chose, tu dis que le traitement du formulaire est effectué sur la page register.php sauf que dans l'attribut action tu définis comme valeur login.php, ce qui signifie donc que tu envois le traitement du formulaire sur la mauvaise page.

Salut

+1 pour la réponse de @Lartak
Par contre si tu veux vraiment être moderne, tu n'es pas obligé de demander un mot de passe.

Lors de l'inscription, l'utilisateur entre son adresse email (qu'il faudra probablement verifier via un input de confirmation) et un e-mail lui est envoyé avec un token unique. (token suffisemment long et que tu enregistre dans bdd)

Sur l'e-mail il pourrait y avoir un lien du genre : http://mon-super-site.io/token/468DAioaMef0z46qfe8zATrfEf/

Ensuite, grace a un système de session et de cookie gardé la connexion active.