[RESOLU] Problème d'inscription

Petit nouveau ! | 3 Messages

13 juil. 2021, 09:19

bonjour à tous et à toute

je viens vous demander de l'aide car je n'arrive pas a réglé mon problème

j'ai un formulaire d'inscription il marche bien quand je rentre toute les informations nécessaire pour l'inscription et il me renvois come prévue un message de sucées mais quand je vais voir ma BDD il n'y a rien j'ai beau vérifier encore et encore la requête je ne vois pas se qu'il coince pouvez vous m'aiguiller ?


voici le code d'inscription html/php
<!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <meta name="author" content="NoS1gnal"/>

            <link href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css" rel="stylesheet" />
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
            <title>Connexion</title>
        </head>
        <body>
        <div class="login-form">
            <?php 
                if(isset($_GET['reg_err']))
                {
                    $err = htmlspecialchars($_GET['reg_err']);

                    switch($err)
                    {
                        case 'success':
                        ?>
                            <div class="alert alert-success">
                                <strong>Succès</strong> inscription réussie !
                            </div>
                        <?php
                        break;

                        case 'password':
                        ?>
                            <div class="alert alert-danger">
                                <strong>Erreur</strong> mot de passe différent
                            </div>
                        <?php
                        break;

                        case 'email':
                        ?>
                            <div class="alert alert-danger">
                                <strong>Erreur</strong> email non valide
                            </div>
                        <?php
                        break;

                        case 'email_length':
                        ?>
                            <div class="alert alert-danger">
                                <strong>Erreur</strong> email trop long
                            </div>
                        <?php 
                        break;

                        case 'nom_length':
                        ?>
                            <div class="alert alert-danger">
                                <strong>Erreur</strong> pseudo trop long
                            </div>
                        <?php 
                        case 'already':
                        ?>
                            <div class="alert alert-danger">
                                <strong>Erreur</strong> compte deja existant
                            </div>
                        <?php 

                    }
                }
                ?>
            
            <form action="inscription_traitement.php" method="post">
                <h2 class="text-center">Inscription</h2>       
                <div class="form-group">
                    <input type="text" name="nom" class="form-control" placeholder="Nom" required="required" autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="text" name="prenom" class="form-control" placeholder="Prenom" required="required" 
                      autocomplete="off">
                </div>
                <div class="form-group">
                    Date de Naissance<br>
                    <input type="date" name="naissance" class="form-control">
                </div>
                <div class="form-group">
                    <input type="text" name="genre" class="form-control" placeholder="Homme, Femme ou Autre" required="required" 
                      autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="text" name="ville" class="form-control" placeholder="Ville" required="required" autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="email" name="email" class="form-control" placeholder="Email" required="required" 
                      autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="text" name="loisir" class="form-control" placeholder="Loisir" required="required" autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="password" name="password" class="form-control" placeholder="Mot de passe" required="required" 
                      autocomplete="off">
                </div>
                <div class="form-group">
                    <input type="password" name="password_retype" class="form-control" placeholder="Re-tapez le mot de passe" 
                      required="required" autocomplete="off">
                </div>
                <div class="form-group">
                    <button type="submit" class="btn btn-primary btn-block">Inscription</button>
                </div> 
            </form>
            <?php
                print_r($_POST);
            ?>
        </div>
        <style>
            .login-form {
                width: 340px;
                margin: 50px auto;
            }
            .login-form form {
                margin-bottom: 15px;
                background: #f7f7f7;
                box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
                padding: 30px;
            }
            .login-form h2 {
                margin: 0 0 15px;
            }
            .form-control, .btn {
                min-height: 38px;
                border-radius: 2px;
            }
            .btn {        
                font-size: 15px;
                font-weight: bold;
            }
        </style>
        </body>
</html>
et voici le traitement des info
<?php 
    require_once 'config.php'; // On inclu la connexion à la bdd
    
    // Si les variables existent et qu'elles ne sont pas vides
    if(!empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['naissance']) && 
    !empty($_POST['genre']) &&!empty($_POST['ville']) && !empty($_POST['loisir']) && 
    !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
    {
        
        // Patch XSS
        $nom = htmlspecialchars($_POST['nom']);
        $prenom = htmlspecialchars($_POST['prenom']);
        $naissance = htmlspecialchars($_POST['naissance']);
        $genre = htmlspecialchars($_POST['genre']);
        $ville = htmlspecialchars($_POST['ville']);
        $loisir = htmlspecialchars($_POST['loisir']);
        $email = htmlspecialchars($_POST['email']);
        $password = htmlspecialchars($_POST['password']);
        $password_retype = htmlspecialchars($_POST['password_retype']);

        // On vérifie si l'utilisateur existe
        $check = $bdd->prepare('SELECT nom, email, password FROM utilisateurs WHERE email = ?');
        $check->execute(array($email));
        $data = $check->fetch();
        $row = $check->rowCount();

        $email = strtolower($email); // on transforme toute les lettres majuscule en minuscule pour éviter que [email protected] et [email protected] soient deux compte différents ..
        
        // Si la requete renvoie un 0 alors l'utilisateur n'existe pas 
        if($row == 0)
        { 
            if(strlen($nom) <= 100)// On verifie que la longueur du pseudo <= 100
            { 
                if(strlen($prenom) <= 100)
                {
                    if(checkdate($naissance = 1, 25, 2000))
                    {
                        if(strlen($genre) <= 100)
                        {
                            if(strlen($ville) <= 100)
                            {
                                if(strlen($loisir) <= 100)
                                {
                                    if(strlen($email) <= 100)// On verifie que la longueur du mail <= 100
                                    { 
                                         if(filter_var($email, FILTER_VALIDATE_EMAIL))// Si l'email est de la bonne forme
                                         { 
                                            if($password === $password_retype)// si les deux mdp saisis sont bon
                                            { 

                                                // On hash le mot de passe avec Bcrypt, via un coût de 12
                                                $cost = ['cost' => 12];
                                                $password = password_hash($password, PASSWORD_BCRYPT, $cost);
                            
                                                // On stock l'adresse IP
                                                $ip = $_SERVER['REMOTE_ADDR']; 

                                                // On insère dans la base de données
                                                $insert = $bdd->prepare('INSERT INTO utilisateurs(nom, prenom, 
                                                 naissance, genre, ville, loisir, email, 
                                                password, ip, token) 
                                                VALUES(:nom, :prenom, :naissance, 
                                                :genre, :ville, :loisir, :email, :password, :ip, :token)');
                                                $insert->execute(array(
                                                'nom' => $nom,
                                                'prenom' => $prenom,
                                                'naissance' => $naissance,
                                                'genre' => $genre,
                                                'ville' => $ville,
                                                'loisir' => $loisir,
                                                'email' => $email,
                                                'password' => $password,
                                                'ip' => $ip,
                                                'token' => bin2hex(openssl_random_pseudo_bytes(64))
                                                ));
                                            // On redirige avec le message de succès
                                            header('Location:inscription.php?reg_err=success');
                                            die();
                                            }
                                            else{ header('Location: inscription.php?reg_err=password'); die();}
                                        }
                                        else{ header('Location: inscription.php?reg_err=email'); die();}
                                    }
                                    else{ header('Location: inscription.php?reg_err=email_length'); die();}
                                }
                                else{ header('Location: inscription.php?reg_err=loisir_length'); die();}
                            }
                            else{header('Location: inscription.php?reg_err=ville_length'); die();}
                        }
                        else{header('Location: inscription.php?reg_err=genre_length'); die();}
                    }
                    else{ header('Location: inscription.php?reg_err=naissance_checkdate'); die();}
                }
                else{header('Location: inscription.php?reg_err=prenom_length'); die();}
            }
            else{ header('Location: inscription.php?reg_err=nom_length'); die();}
        }
        else{ header('Location: inscription.php?reg_err=already'); die();}
    }
?>    
merci d'avance à tous ceux qui m'aideront

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9104 Messages

13 juil. 2021, 16:18

As-tu activé les messages d'erreur de PDO sur PDO::ERRMODE_WARNING
https://www.php.net/manual/fr/pdo.error-handling.php

Ça permet de voir tout de suite si il y a une erreur de requête et donc de faciliter grandement le debugage.
Quand tout le reste a échoué, lisez le mode d'emploi...