Probleme de connexion a la bdd

Anicet -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, cela fait 1 semaine que j'ai tapé ce code et 1 semaine qu'il m'affiche l'erreur "Erreur : SQLSTATE[HY000] [1045] Accès refusé pour l'utilisateur: 'root'@'@localhost' (mot de passe: OUI)"
Voici le code qui devrait permettre le connexion (pour info je suis sous windows et j'utilise wamp) :
<?php

if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
{

$pseudo = htmlspecialchars($_POST['pseudo']);
$email = htmlspecialchars($_POST['email']);
$password = htmlspecialchars($_POST['password']);
$password_retype = htmlspecialchars($_POST['password_retype']);

$check = $bdd->prepare('SELECT pseudo, email, password FROM users WHERE email = ?');
$check->execute(array($email));
$data = $check->fetch();
$row = $check->rowCount();

$email = strtolower($email);

if($row == 0){
if(strlen($pseudo) <= 100){
if(strlen($email) <= 100){
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
if($password == $password_retype){

$cost = ['cost' => 12];
$password = password_hash($password, PASSWORD_BCRYPT, $cost);

$ip = $_SERVER['REMOTE_ADDR'];

try
{
$bdd = new PDO('mysql:host=localhost;dbname=premiere;port=3306;charset=utf-8', 'root' , '' );
}
catch(PDOException $e)
{
die('Erreur : '.$e->getMessage());
}
$insert = $bdd->prepare('INSERT INTO user (pseudo, email, password, ip) VALUES (:pseudo, :email, :password, :ip)');
$insert->execute(array(
'pseudo' => $pseudo,
'email' => $email,
'password' => $password,
'ip' => $ip,
'token' => bin2hex(openssl_random_pseudo_bytes(64))
));

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=pseudo_length'); die();}
}else{ header('Location: inscription.php?reg_err=already'); die();}
}
?>
Pouvez vous m'aider ? mercii

10 réponses

  1. Anicet14 Messages postés 3 Statut Membre 1
     
    Ok c'est bon j'ai reglé le probleme, tout fonctionne correctement :)
    Mercii beaucoup en tout cas
    1
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Déjà... pour poster du code sur le forum, tu dois utiliser les BALISES DE CODE.
    Explications ( à lire entièrement ! ) disponibles ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Ensuite.. pourquoi ouvres tu ta connexion à la bdd ... après avoir déjà fait des requetes aux lignes de code précédentes ??

    Puis.. as tu un souci également pour accéder à phpmyadmin ?
    SI oui, le souci ne vient pas de ton code php ..

    0
  3. Anicet
     
    D'accord donc il faut que je supprime la ligne avec "SELECT ... FROM..... WHERE..... ?
    Et oui en fait j'ai fais un formulaire classique d'inscription et quand je le test, ça m'affiche cette erreur.
    <?php 
    
        if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
        {
            
            $pseudo = htmlspecialchars($_POST['pseudo']);
            $email = htmlspecialchars($_POST['email']);
            $password = htmlspecialchars($_POST['password']);
            $password_retype = htmlspecialchars($_POST['password_retype']);
    
    
            $check = $bdd->prepare('SELECT pseudo, email, password FROM users WHERE email = ?');
            $check->execute(array($email));
            $data = $check->fetch();
            $row = $check->rowCount();
    
            $email = strtolower($email); 
            
           
            if($row == 0){ 
                if(strlen($pseudo) <= 100){ 
                    if(strlen($email) <= 100){
                        if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
                            if($password == $password_retype){ 
    
                                $cost = ['cost' => 12];
                                $password = password_hash($password, PASSWORD_BCRYPT, $cost);
                                
                                $ip = $_SERVER['REMOTE_ADDR']; 
    
                                $insert = $bdd->prepare('INSERT INTO user (pseudo, email, password, ip, token) VALUES (:pseudo, :email, :password, :ip, :token)');
                                $insert->execute(array(
                                    'pseudo' => $pseudo,
                                    'email' => $email,
                                    'password' => $password,
                                    'ip' => $ip,
                                    'token' => bin2hex(openssl_random_pseudo_bytes(64))
                                ));
    
                                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=pseudo_length'); die();}
            }else{ header('Location: inscription.php?reg_err=already'); die();}
        }
    ?>
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      là maintenant.. tu n'as même plus de ligne de code permettant d'établir la connexion à ta bdd ..
      Je suppose donc que tu n'as plus le même message d'erreur....
      A moins que tu ne nous aies pas mis tout ton code et que, au dessus de ton if il y a la connexion à la bdd ???

      Quoi qu'il en soit, je t'ai demandé si tu avais le même souci avec phpmyadmin... alors ?
      0
  4. Anicet
     
    Alors au dessus du if j'ai :
    <?php
    try 
        {
            $bdd = new PDO("mysql:host=localhost;dbname=premiere;port=3306;charset=utf-8", 'root' , '' );
        }
        catch(PDOException $e)
        {
            die('Erreur : '.$e->getMessage());
        }
    ?>

    Avec ça ça ne marche toujours pas. Et pour phpMyAdmin, j'arrive a y accéder manuellement sans problemes.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Anicet
     
    Par curiosité j'ai essayé d'enlever la connexion a la bdd en premiere ligne donc plus aucune connexion a la bdd n'est dispo et lorsque j'execute mon code il me met toujours le message d'erreur du mot de passe [1045]. Du coup le probleme vient d'ailleurs mais je ne sais absolument pas d'ou. Pouvez vous m'aider ?
    Merci
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Il faudrait que tu nous montres l'intégralité de ton code....
      Sans oublier de nous montrer les fichiers qui sont inclus dans ton script ou qui incluent ton script
      ( en prenant soin de bien indiquer le nom de chaque fichier pour chaque code montré)

      Mais avant ça, histoire de voir si tu as un souci de lien entre le php et ta bdd, merci de créer un nouveau fichier php ( nommé par exemple : test.php )
      dans lequel tu colleras le code suivant
      <?php
      //Affichage des erreurs PHP
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      
      //connexion à la bdd avec activation des erreurs PDO
      try{
        $bdd =new PDO('mysql:host=localhost;dbname=premiere;charset=utf8', 'root', '');
        // Activation des erreurs PDO
         $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
        $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        
        echo " Connexion à la bdd OK !";
        
      } catch(PDOException $e) {
          die('Erreur : ' . $e->getMessage());
      }
      

      Et dis nous ce que ça t'affiche lorsque tu vas sur cette page depuis ton navigateur.
      0
  7. Anicet
     
    Il m'a mis "connexion a la bdd OK !"
    Je vous envoie l'intégralité du code tout de suite
    Mercii
    0
  8. Anicet
     
    1_ config.php :
    <?php
    try 
        {
            $bdd = new PDO('mysql:host=localhost;dbname=premiere;charset=utf8', 'root' , '' );
        }
        catch(PDOException $e)
        {
            die('Erreur : '.$e->getMessage());
        }
    ?>
    


    2_ index.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['login_err']))
                    {
                        $err = htmlspecialchars($_GET['login_err']);
    
                        switch($err)
                        {
                            case 'password':
                            ?>
                                <div class="alert alert-danger">
                                    <strong>Erreur</strong> mot de passe incorrect
                                </div>
                            <?php
                            break;
    
                            case 'email':
                            ?>
                                <div class="alert alert-danger">
                                    <strong>Erreur</strong> email incorrect
                                </div>
                            <?php
                            break;
    
                            case 'already':
                            ?>
                                <div class="alert alert-danger">
                                    <strong>Erreur</strong> compte non existant
                                </div>
                            <?php
                            break;
                        }
                    }
                    ?> 
                
                <form action="connexion.php" method="post">
                    <h2 class="text-center">Connexion</h2>       
                    <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="password" name="password" class="form-control" placeholder="Mot de passe" required="required" autocomplete="off">
                    </div>
                    <div class="form-group">
                        <button type="submit" class="btn btn-primary btn-block">Connexion</button>
                    </div>   
                </form>
                <p class="text-center"><a href="inscription.php">Inscription</a></p>
            </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>
    


    3_ inscription.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>Inscription</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 'pseudo_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="pseudo" class="form-control" placeholder="Pseudo" 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="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>
            </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>
    


    4_ inscription_traitement.php :
    <?php 
    
    require_once : 'config.php';
    
        if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype']))
        {
            $check = $bdd->prepare('SELECT pseudo, email, password FROM users WHERE email = ?');
            $check->execute(array($email));
            $data = $check->fetch();
            $row = $check->rowCount();
    
            $email = strtolower($email); 
            $pseudo = htmlspecialchars($_POST['pseudo']);
            $email = htmlspecialchars($_POST['email']);
            $password = htmlspecialchars($_POST['password']);
            $password_retype = htmlspecialchars($_POST['password_retype']);
            
           
            if($row == 0){ 
                if(strlen($pseudo) <= 100){ 
                    if(strlen($email) <= 100){
                        if(filter_var($email, FILTER_VALIDATE_EMAIL)){ 
                            if($password == $password_retype){ 
    
                                $cost = ['cost' => 12];
                                $password = password_hash($password, PASSWORD_BCRYPT, $cost);
                                
                                $ip = $_SERVER['REMOTE_ADDR']; 
    
                                $insert = $bdd->prepare('INSERT INTO user (pseudo, email, password, ip, token) VALUES (:pseudo, :email, :password, :ip, :token)');
                                $insert->execute(array(
                                    'pseudo' => $pseudo,
                                    'email' => $email,
                                    'password' => $password,
                                    'ip' => $ip,
                                    'token' => bin2hex(openssl_random_pseudo_bytes(64))
                                ));
    
                                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=pseudo_length'); die();}
            }else{ header('Location: inscription.php?reg_err=already'); die();}
        }
    ?>
    


    5_ connexion.php :
    <?php 
        session_start(); // Démarrage de la session
        
        require_once 'config.php';
    
        if(!empty($_POST['email']) && !empty($_POST['password'])) // Si il existe les champs email, password et qu'il sont pas vident
        {
            // Patch XSS
            $email = htmlspecialchars($_POST['email']); 
            $password = htmlspecialchars($_POST['password']);
            
            $email = strtolower($email); // email transformé en minuscule
            
            // On regarde si l'utilisateur est inscrit dans la table utilisateurs
            $check = $bdd->prepare('SELECT pseudo, email, password, token FROM user WHERE email = ?');
            $check->execute(array($email));
            $data = $check->fetch();
            $row = $check->rowCount();
            
            
    
            // Si > à 0 alors l'utilisateur existe
            if($row > 0)
            {
                // Si le mail est bon niveau format
                if(filter_var($email, FILTER_VALIDATE_EMAIL))
                {
                    // Si le mot de passe est le bon
                    if(password_verify($password, $data['password']))
                    {
                        // On créer la session et on redirige sur landing.php
                        $_SESSION['user'] = $data['token'];
                        header('Location: landing.php');
                        die();
                    }else{ header('Location: index.php?login_err=password'); die(); }
                }else{ header('Location: index.php?login_err=email'); die(); }
            }else{ header('Location: index.php?login_err=already'); die(); }
        }else{ header('Location: index.php'); die();} // si le formulaire est envoyé sans aucune données
    ?>


    6_ landing.php :
    <?php
    session_start();
    if(!isset($_SESSION['user']))
    header('Location:index.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>Bonjour</title>
            </head>
            <body>
                <h1> Bonjour ! <?php echo $_SESSION['user']; ?></h1>
                <a href = "deconnexion.php" class="btn btn-danger btn-lg">Deconnexion</a>
    </body>
    </html>
    
    


    7_ deconnexion.php :
    <?php 
        session_start(); 
        session_destroy();  
        header('Location:index.php'); 
        die();
    ?>
    0
  9. Anicet
     
    J'ai remplacé votre fichier dans mon config.php et mon VisualStudioCode est bien en UTF-8.
    Quand j'execute, toujours le meme message d'erreur.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Peu importe que ton visual studio soit en UTF-8 ce que je te demande c'est de t'assurer que les fichiers qui s'y trouvent sont bien, eux, encodes en UTF-8.

      Au pire, supprime ton fichier config.php puis recrée le via le code que je t'ai donné
      0
  10. Anicet14 Messages postés 3 Statut Membre 1
     
    Voici un screen de mon phpMyAdmin. Peut etre le probleme vient de la meme si je ne pense pas.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Bien sûr que non puisque mon fichier test fonctionne
      0
  11. Anicet14 Messages postés 3 Statut Membre 1
     
    Alors enfait je viens de m'en apercevoir. Avant j'avais MAMP, je l'ai supprimé mais les fichiers sont restés donc le code s'est aussi enregistré dans l'ancien dossier sous MAMP. Je les ai supprimés et voila le nouveau message d'erreur
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      Le message est clair la table que tu essayes d'interroger dans ta requête SQL n'existe pas
      0