Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur PHP MySQL

Aidez-moi à trouver le problème dans ce code source PHP S.V.P!

Sujet résolu
    17 août 2022 à 1:04:50

    Bonjour, j'ai fait un formulaire d'inscription, et dès qu'on s'inscrit, ça m'indique "successful registration !" alors que au final rien est rentrer dans la bdd.

    Voila le PHP:

    <?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['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
        {
            // Patch XSS
            $pseudo = htmlspecialchars($_POST['pseudo']);
            $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 pseudo, 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 Foo@gmail.com et foo@gmail.com soient deux compte différents ..
            
            // Si la requete renvoie un 0 alors l'utilisateur n'existe pas 
            if($row == 0){ 
                if(strlen($pseudo) <= 30){ // On verifie que la longueur du pseudo <= 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(pseudo, email, password, ip, wallet, emailpaypal) VALUES(:pseudo, :email, :password, :ip, :wallet, :emailpaypal)');
                                $insert->execute(array(
                                    'pseudo' => $pseudo,
                                    'email' => $email,
                                    'password' => $password,
                                    'ip' => $ip,
                                    'wallet' => "3",
                                    'emailpaypal' => ""
    
                                ));
                                // On redirige avec le message de succès
                                header('Location:signup.php?reg_err=success');
                                die();
                            }else{ header('Location: signup.php?reg_err=password'); die();}
                        }else{ header('Location: signup.php?reg_err=email'); die();}
                    }else{ header('Location: signup.php?reg_err=email_length'); die();}
                }else{ header('Location: signup.php?reg_err=pseudo_length'); die();}
            }else{ header('Location: signup.php?reg_err=already'); die();}
        }
    ?> 
       

    Et voila le code HTML du formulaire:

    <?php 
      session_start();
      if(isset($_SESSION['user'])){
        header("location: /interface");
      }
    ?>
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <script
          src="https://kit.fontawesome.com/64d58efce2.js"
          crossorigin="anonymous"
        ></script>
        <link rel="stylesheet" href="style.css" />
        <title>Sign in & Sign up Form</title>
       <style type="text/css">
         .alert-alert-danger{
          padding: 10px;
          background-color: #ff594d;
          border-radius: 2vh;
          width:250px;
          height: 48px;
          position: absolute;
          top: 20px;
          right: 10px;
          color: white;
          z-index: 100000000;
         }
         
         .alert-alert-success{
          padding: 10px;
          background-color: #4dff6e;
          border-radius: 2vh;
          width:250px;
          height: 48px;
          position: absolute;
          top: 20px;
          right: 10px;
          color: #21262f;
          z-index: 100000000;
         }
      
       </style>
      </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><i style="color: #64b373;" class="fas fa-check-double"></i></strong> successful registration !
                                </div>
                            <?php
                            break;
    
                            case 'password':
                            ?>
                                <div class="alert-alert-danger">
                                    <strong><i class="fas fa-exclamation-triangle"></i></strong> different password
                                </div>
                            <?php
                            break;
    
                            case 'email':
                            ?>
                                <div class="alert-alert-danger">
                                    <strong><i class="fas fa-exclamation-triangle"></i></strong> invalid email
                                </div>
                            <?php
                            break;
    
                            case 'email_length':
                            ?>
                                <div class="alert-alert-danger">
                                    <strong><i class="fas fa-exclamation-triangle"></i></strong> e-mail too long
                                </div>
                            <?php 
                            break;
    
                            case 'pseudo_length':
                            ?>
                                <div class="alert-alert-danger">
                                    <strong><i class="fas fa-exclamation-triangle"></i></strong> username too long
                                </div>
                            <?php 
                            case 'already':
                            ?>
                                <div class="alert-alert-danger">
                                    <strong><i class="fas fa-exclamation-triangle"></i></strong> already existing account
                                </div>
                            <?php 
    
                        }
                    }
                    ?>
                 
        <div class="container">
          <div class="forms-container">
            <div class="signin-signup">
                   <form action="inscription_traitement.php" method="post" class="sign-in-form">
                <h2 style="color: white;" class="title">Sign up</h2>
                <div class="input-field">
                  <i class="fas fa-user"></i>
                  <input  type="text" placeholder="@username" name="pseudo" id="ps"  required="required" autocomplete="off">
                </div>
                <div class="input-field">
                  <i class="fas fa-envelope"></i>
                  <input name="email" placeholder="E-mail" type="email" id="email" autocomplete="off"  required=""/>
                </div>
                <div class="input-field">
                  <i class="fas fa-lock"></i>
                  
          <input name="password" placeholder="Password" type="password" id="password" autocomplete="off" required="" />
                </div>
                <div class="input-field">
                  <i class="fas fa-unlock"></i>
                <input style="" placeholder="Re-type password" type="password" id="pr" name="password_retype"   required="required" autocomplete="off">
              </div>
                <input style="color: #21262f; background-color:  #f5d658;" type="submit" class="btn" value="Sign up" />
                
               
              </form>
            </div>
          </div>
         
    
          <div class="panels-container">
            <div class="panel left-panel">
              <div class="content">
                <h3 style="color: #21262f;">One of us ?</h3>
                <p style="color: #21262f;">
                  Log in and access your wallet and start doing our tasks.
                </p>
                <a style="padding: 10px; outline: none; text-decoration: none; " href="login.php" class="btn transparent" id="sign-up-btn">
                  Sign In
                </a>
              </div>
              <img src="undraw_savings_re_eq4w.svg" class="image" alt="" />
            </div>
            
        </div>
    
       
        <div style="visibility: hidden;">
      </body>
    </html>

    AIDEZ MOI SVP ça fait 3 jours que je cherche le PROBLEME !!!!

    -
    Edité par MrLeak 22 août 2022 à 19:14:19

    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2022 à 2:17:37

      Salut,

      tu as probablement une erreur dans ton fichier config.php.

      Tu l'inclus, mais, comme on ne sait pas ce qu'il y a dedans. Si le nouvel utilisateur n'est pas ajouté dans la BDD c'est qu'il y a une couille entre le submit et la BDD.

      Dans ta précipitation, tu as oublié le fichier le plus important.

      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2022 à 2:45:49

        Salut mec, 

        je me suis dit la même chose mais nan puisque j’utilise exactement le même fichier pour le formulaire de connexion et le formulaire de connexion marche a merveille, je ne comprend pas, vraiment pas.

        merci quand même :)

        si tu veux que je te montre plus de fichier je suis là.

        • Partager sur Facebook
        • Partager sur Twitter
          19 août 2022 à 14:49:59

          Salut, 

          Ton code fonctionne chez moi, comme dis plus haut tu dois avoir une erreur lors de la requête (taille de colonne trop petite pour le password ? type incorrect de colonne ? ou autre...) 

          Dans ton fichier "config.php", tu as pensé à activer les erreurs PDO ?

          Depuis la doc : https://www.php.net/manual/fr/pdo.error-handling.php

          $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


          Par ailleurs, utiliser htmlspecialchars avant d'enregistrer des données n'est pas une bonne pratique. Plutôt utiliser cette fonction lors de l'affichage des données dans ton HTML

          -
          Edité par hippomssc 19 août 2022 à 15:04:36

          • Partager sur Facebook
          • Partager sur Twitter
            19 août 2022 à 15:17:42

            Salut hippomssc, oui j’ai mis les erreurs PDO dans le fichier config.php mais dit moi est ce que toi ça a marcher juste en copiant et en collant ou tu as modifié certaine chose ? Et non, aucun problème avec la base de donnée, puisque hier matin j’ai juste pris un autre HTML d’un autre formulaire d’inscription et ça a marcher mais comme le css netait pas très beau j’ai mis les input dans le formulaire que moi j’ai fait mais boom plus rien ne marche, donc je me suis dit tant pis et j’ai pris l’autre code mais ça marcher plus, a ce moment là jai vrillé, et Je me rappelle pas avoir changer quelque chose.

            hippomssc a écrit:

            Salut, 

            Ton code fonctionne chez moi, comme dis plus haut tu dois avoir une erreur lors de la requête (taille de colonne trop petite pour le password ? type incorrect de colonne ? ou autre...) 

            Dans ton fichier "config.php", tu as pensé à activer les erreurs PDO ?

            Depuis la doc : https://www.php.net/manual/fr/pdo.error-handling.php

            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


            Par ailleurs, utiliser htmlspecialchars avant d'enregistrer des données n'est pas une bonne pratique. Plutôt utiliser cette fonction lors de l'affichage des données dans ton HTML

            -
            Edité par hippomssc il y a 8 minutes



            -
            Edité par MrLeak 19 août 2022 à 15:22:39

            • Partager sur Facebook
            • Partager sur Twitter
              19 août 2022 à 16:04:02

              J'ai simplement dû faire quelques modifs sur ma base de données de test, mais je n'ai absolument pas modifié ton code.

              Est-ce que tu pourrais poster ton fichier de config ? Tu bosses en local ou tu envoies tes données vers une bdd hebergée ? 

              • Partager sur Facebook
              • Partager sur Twitter
                19 août 2022 à 16:20:05 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                  19 août 2022 à 16:53:19

                  Tu as corrigé assez rapidement, mais fais quand même attention avant de poster des infos aussi critiques (comme des identifiants de bdd ;)), surtout vu les données très sensibles que tu stockes en BDD... 

                  3 choses : 

                  - Si tu as une BDD hébergée (pas en local donc), il faut que tu modifies l'host lors de l'instanciation de la connexion avec la BDD -> ici tu as toujours "localhost", regarde sur le site web de ton hébergeur, normalement tu dois avoir l'host de renseigné avec les identifiants de connexion de la BDD.

                  $bdd = new PDO("mysql:host=A_MODIFIER;dbname=;charset=utf8;", "TON_IDENTIFIANT", "TON_PASSWORD");

                  -  Certains hébergeurs bloquent les connexions qui ne sont pas sur leurs serveurs, ce qui veut dire que si tu travaille en localhost tu ne pourras pas communiquer avec ta bdd hébergée. Il est donc possible qu'il faille d'abord que tu héberge ton site sur les serveurs de ton hébergeur pour pouvoir interagir avec la BDD. Le mieux serait que tu travailles avec une BDD en local avant de passer sur une BDD hébergée.

                  - Tu n'as pas activé les erreurs PDO : rajoute la ligne que je t'ai mis juste avant (en remplaçant la variable de l'exemple avec ta variable "bdd")

                  Commence déjà par activer les erreurs PDO, on verra la suite après :)

                  -
                  Edité par hippomssc 19 août 2022 à 17:02:48

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 août 2022 à 17:29:01

                    J'ai ajouter la lignes et ça me dit "Cette page ne fonctionne pas", et par ailleurs je pense que le fichier Config ne pose pas problème puisque dès que jessaie de mettre un compte existant bah ça m'indique ALREADY EXISTING ACCOUNT donc ça se connecte bien a la BDD.

                    hippomssc a écrit: 

                    Tu as corrigé assez rapidement, mais fais quand même attention avant de poster des infos aussi critiques (comme des identifiants de bdd ;)), surtout vu les données très sensibles que tu stockes en BDD... 

                    3 choses : 

                    - Si tu as une BDD hébergée (pas en local donc), il faut que tu modifies l'host lors de l'instanciation de la connexion avec la BDD -> ici tu as toujours "localhost", regarde sur le site web de ton hébergeur, normalement tu dois avoir l'host de renseigné avec les identifiants de connexion de la BDD.

                    $bdd = new PDO("mysql:host=A_MODIFIER;dbname=;charset=utf8;", "TON_IDENTIFIANT", "TON_PASSWORD");

                    -  Certains hébergeurs bloquent les connexions qui ne sont pas sur leurs serveurs, ce qui veut dire que si tu travaille en localhost tu ne pourras pas communiquer avec ta bdd hébergée. Il est donc possible qu'il faille d'abord que tu héberge ton site sur les serveurs de ton hébergeur pour pouvoir interagir avec la BDD. Le mieux serait que tu travailles avec une BDD en local avant de passer sur une BDD hébergée.

                    - Tu n'as pas activé les erreurs PDO : rajoute la ligne que je t'ai mis juste avant (en remplaçant la variable de l'exemple avec ta variable "bdd")

                    Commence déjà par activer les erreurs PDO, on verra la suite après :)

                    -
                    Edité par hippomssc il y a environ 8 heures

                    -
                    Edité par MrLeak 20 août 2022 à 1:34:43

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 août 2022 à 13:00:17

                      Bonjour,

                      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
                      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

                      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

                      Mauvais titre

                      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

                      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

                      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

                      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

                      Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

                      (titre originel : Trouvez le problème PHP)

                      • Partager sur Facebook
                      • Partager sur Twitter

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

                        21 août 2022 à 21:49:58

                        Bonjour, est-ce que tu peux peut-être dans un premier temps, supprimer où mettre en commentaire la ligne qui effectue la redirection lorsque l'inscription est effectué avec succès.

                                                    // On redirige avec le message de succès
                                                    header('Location:signup.php?reg_err=success');

                        Je me demande si PHP et/où MySQL n'ont pas logger une erreur qui a put être caché par la redirection.

                        En enlevant la redirection normalement si il n'y a pas d'erreur (logger) tu dois avoir une page complétement blanche.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        suggestion de présentation.

                          21 août 2022 à 23:58:46

                          Bonsoir, aucune erreur juste une page blanche, vraiment bizarre.


                          SamuelGaborieau3 a écrit:

                          Bonjour, est-ce que tu peux peut-être dans un premier temps, supprimer où mettre en commentaire la ligne qui effectue la redirection lorsque l'inscription est effectué avec succès.

                                                      // On redirige avec le message de succès
                                                      header('Location:signup.php?reg_err=success');

                          Je me demande si PHP et/où MySQL n'ont pas logger une erreur qui a put être caché par la redirection.

                          En enlevant la redirection normalement si il n'y a pas d'erreur (logger) tu dois avoir une page complétement blanche.



                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 août 2022 à 10:53:01

                            Hello, 

                            MrLeak a écrit:

                            J'ai ajouter la lignes et ça me dit "Cette page ne fonctionne pas"

                            -
                            Edité par MrLeak 20 août 2022 à 1:34:43


                            Ce message ressemble à celui par défaut de ton navigateur pour indiquer qu'il y a une erreur lors du traitement du code serveur (ton php), normalement tu devrais avoir le message d'erreur d'affiché pour te guider dans ton débogage. 

                            Est-ce que tu peux vérifier dans ton php.ini (fichier de configuration php) que l'option "display_errors" est bien sur "On". 

                            (Si tu utilises wamp, le fichier se trouve dans wamp64/bin/php/php.LA_VERSION_DE_PHP_QUE_TU_UTILISES/php.ini

                            Ou alors, tu rajoutes dans ton fichier "config.php" ces deux lignes pour activer les erreurs : 

                            <?php
                            ini_set( 'display_errors', 'on' );
                            error_reporting( E_ALL );


                            Et normalement tu dois avoir une erreur plus parlante qui s'affiche :) 

                            -
                            Edité par hippomssc 22 août 2022 à 16:09:06

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 août 2022 à 18:20:14

                              C'est bon, mon champs de l'ip etait de max 20 j'ai monter a 200 et ça marche, merci beaucoup hippomssc <3


                              hippomssc a écrit:

                              Hello, 

                              MrLeak a écrit:

                              J'ai ajouter la lignes et ça me dit "Cette page ne fonctionne pas"

                              -
                              Edité par MrLeak 20 août 2022 à 1:34:43


                              Ce message ressemble à celui par défaut de ton navigateur pour indiquer qu'il y a une erreur lors du traitement du code serveur (ton php), normalement tu devrais avoir le message d'erreur d'affiché pour te guider dans ton débogage. 

                              Est-ce que tu peux vérifier dans ton php.ini (fichier de configuration php) que l'option "display_errors" est bien sur "On". 

                              (Si tu utilises wamp, le fichier se trouve dans wamp64/bin/php/php.LA_VERSION_DE_PHP_QUE_TU_UTILISES/php.ini

                              Ou alors, tu rajoutes dans ton fichier "config.php" ces deux lignes pour activer les erreurs : 

                              <?php
                              ini_set( 'display_errors', 'on' );
                              error_reporting( E_ALL );


                              Et normalement tu dois avoir une erreur plus parlante qui s'affiche :) 

                              -
                              Edité par hippomssc il y a environ 3 heures

                              -
                              Edité par MrLeak 22 août 2022 à 19:28:35

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 août 2022 à 19:07:05

                                Bonjour,

                                mon message plus haut n'était pas là pour faire joli :) Merci de le (re)lire et d'agir en conséquence.

                                • Partager sur Facebook
                                • Partager sur Twitter

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

                                  22 août 2022 à 19:14:59

                                  Bonjour, est-ce bon?

                                  Lamecarlate a écrit:

                                  Bonjour,

                                  mon message plus haut n'était pas là pour faire joli :) Merci de le (re)lire et d'agir en conséquence.



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 août 2022 à 8:09:00

                                    Hélas non : c'est tout aussi vague… Essayez de résumer en une phrase le souci que vous rencontrez (pas la cause, puisque vous la cherchez).
                                    • Partager sur Facebook
                                    • Partager sur Twitter

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

                                    Erreur PHP MySQL

                                    × 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