Probleme de connexion a la bdd

Fermé
Anicet - 16 oct. 2021 à 10:13
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 - 17 oct. 2021 à 20:31
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

Anicet14 Messages postés 3 Date d'inscription dimanche 17 octobre 2021 Statut Membre Dernière intervention 17 octobre 2021 1
17 oct. 2021 à 20:02
Ok c'est bon j'ai reglé le probleme, tout fonctionne correctement :)
Mercii beaucoup en tout cas
1
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
16 oct. 2021 à 10:25
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
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
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
16 oct. 2021 à 10:48
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
Modifié le 17 oct. 2021 à 17:39
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
Il m'a mis "connexion a la bdd OK !"
Je vous envoie l'intégralité du code tout de suite
Mercii
0
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
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
17 oct. 2021 à 18:31
Remplace le contenu de ton fichier config par le code que je t'ai donné.
Assure-toi également que le fichier est encodé en UTF-8 sans bom
Voir chapitre 1 du lien suivant :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
0
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
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
17 oct. 2021 à 19:38
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
Anicet14 Messages postés 3 Date d'inscription dimanche 17 octobre 2021 Statut Membre Dernière intervention 17 octobre 2021 1
17 oct. 2021 à 19:08
Voici un screen de mon phpMyAdmin. Peut etre le probleme vient de la meme si je ne pense pas.
0
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
17 oct. 2021 à 19:36
Bien sûr que non puisque mon fichier test fonctionne
0
Anicet14 Messages postés 3 Date d'inscription dimanche 17 octobre 2021 Statut Membre Dernière intervention 17 octobre 2021 1
17 oct. 2021 à 19:51
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
jordane45 Messages postés 38340 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 décembre 2024 4 716
17 oct. 2021 à 20:31
Le message est clair la table que tu essayes d'interroger dans ta requête SQL n'existe pas
0