Besoin d une correction pour la page d inscription

Fermé
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 - 10 mars 2021 à 12:00
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 - 10 mars 2021 à 22:50
bonjour
n'étant pas un spécialiste de php
j'essaye de me débrouiller

que pensez vous de ma page d'inscription
pouvez vous me dire ce que je dois modifier merci

<!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 '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>







la page de traitement

<?php 
    require_once 'config.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 utilisateurs WHERE email = ?');
        $check->execute(array($email));
        $data = $check->fetch();
        $row = $check->rowCount();

        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 utilisateurs(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(24))
                            ));
                            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();}
    }
	
	
A voir également:

23 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 12:15
Bonjour,

Tu sembles utiliser PDO .. donc
- Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
- L'instruction rowCount, en PDO, ne doit jamais s'utiliser sur une requête SELECT...
A la place, fait un FETCHALL du résultat de ta requête et un COUNT dessus.

- L'instruction htmlspecialchars ne doit jamais s'utiliser pour l'insertion des données en BDD.. elle ne doit servir que pour l'affichage des données sur une page .

Et pour finir, je t'invite à appliquer également les conseils donnés ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.

0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 12:29
bonjour

Merci pour la réponse

donc je dois insérer le code pour les erreurs dans mon fichier confi.sys
puisque la connexion a ma base ce trouve dans ce fichier
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 12:59
Oui mais pas que.
Il faudra également ajouter des try catch autour de chaque requête
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 13:40
merci pour les renseignements de cette facon alors

try{
$check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?');
       // 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);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 14:02
Relis bien le contenu du lien que je t'ai donné.
d'une part tu dois activer les erreurs PDO dans la connexion à ta base de données.
Et d'autre part tu dois exécuter des requêtes chacune dans un bloc try catch
Si tu regardes les exemples de code qui se trouve dans le lien tu verras que ce que tu as écrit n'est pas la même chose...
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 14:24
merci pour le rappel

donc si je reprends l exemple
c est comme ceci

//Execution de la requete
try{
//Execution de la requete
try{
   $check = $bdd->prepare('SELECT pseudo, email, password FROM utilisateurs WHERE email = ?');
        $check->execute(array($email));
        $data = $check->fetch();
        $row = $check->rowCount();
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " email : " ;
  print_r($email);
}
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 14:58
Toujours pas....
Essaye ça
$sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
$datas = array($email);
//Execution de la requete
try{
  $prep = $bdd->prepare($sql);
  $prep->execute($datas);
  $row = $check->fetch();
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " datas : " ;
  print_r($datas);
}

A noter que le ROWCOUNT ne s'utilise PAS sur une requête SELECT !
En plus, vu que tu ne cherches à récupérer qu'une seule ligne.. ça serait, de toutes façons, inutile.

Si tu veux juste vérifier si ta requête a retournée un résultat, il suffit de regarder si $row n'est pas vide
if(!empty($row)){
  // ici.. $row contient les données issues de ta requête
}else{
  // ici.. ben.. ta requête n'a rien retourné
}

0

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

Posez votre question
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 15:59
Merci pour la solution , je vais essayer le tout par la suite

je tente la deuxième requete
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 10 mars 2021 à 16:04
Visiblement... tu vois presque bien... mais pas tout à fait ...


// la requête SQL a executer :
$sql = 'INSERT INTO utilisateurs
                       (pseudo, email, password, ip, token) 
               VALUES(:pseudo, :email, :password, :ip, :token)';

//les données qu'il faut passer en paramètres de la requêtes
$datas = array(    'pseudo' => $pseudo,
                     'email' => $email,
                     'password' => $password,
                     'ip' => $ip,
                     'token' =>  bin2hex(openssl_random_pseudo_bytes(24))
                 );
// L'exécution de la requete DANS un try/catch
try{
 $prep = $bdd->prepare($sql);
 $prep->execute($datas);      
}catch(Exception $e){
    // en cas d'erreur :
     echo " Erreur ! ".$e->getMessage();
     echo " Les paramètres envoyés à la requete : " ;
    print_r($datas);
}



J'espère qu'avec les commentaires ça sera plus clair ....
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 16:14
ouppsss
je venais juste de m apercevoir que j avais pas bon
j'ai été pris de court

j'étais en train de corriger

voici ce que je voulais poster

			$sql =		'INSERT INTO utilisateurs(pseudo, email, password, ip, token) VALUES(:pseudo, :email, :password, :ip, :token)';	
		
		 $datas = (array(
                                'pseudo' => $pseudo,
                                'email' => $email,
                                'password' => $password,
                                'ip' => $ip,
                                'token' =>  bin2hex(openssl_random_pseudo_bytes(24))
                            ));
				//Execution de la requete
try{
  $prep = $bdd -> prepare($sql) ;
  $prep->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}	
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 16:18
et donc sauf erreur le code ressemble a ceci au final

<?php
require_once 'config.php';
if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) {
    $pseudo = ($_POST['pseudo']);
    $email = ($_POST['email']);
    $password = ($_POST['password']);
    $password_retype = ($_POST['password_retype']);
    $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
    $datas = array($email);
    //Execution de la requete
    try {
        $prep = $bdd->prepare($sql);
        $prep->execute($datas);
        $row = $check->fetch();
    }
    catch(Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " datas : ";
        print_r($datas);
    }
    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'];
                        // la requête SQL a executer :
                        $sql = 'INSERT INTO utilisateurs
                       (pseudo, email, password, ip, token) 
               VALUES(:pseudo, :email, :password, :ip, :token)';
                        //les données qu'il faut passer en paramètres de la requêtes
                        $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)));
                        // L'exécution de la requete DANS un try/catch
                        try {
                            $prep = $bdd->prepare($sql);
                            $prep->execute($datas);
                        }
                        catch(Exception $e) {
                            // en cas d'erreur :
                            echo " Erreur ! " . $e->getMessage();
                            echo " Les paramètres envoyés à la requete : ";
                            print_r($datas);
                        }
                        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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 16:20
ça ce n'est pas bon
    if ($row == 0) {

Relis ce que je t'ai indiqué
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 16:26
ah oui j'avais oublie cela
j'en aurais appris des choses ce jour

donc voici alors


<?php
require_once 'config.php';
if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) {
    $pseudo = ($_POST['pseudo']);
    $email = ($_POST['email']);
    $password = ($_POST['password']);
    $password_retype = ($_POST['password_retype']);
    $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
    $datas = array($email);
    //Execution de la requete
    try {
        $prep = $bdd->prepare($sql);
        $prep->execute($datas);
        $row = $check->fetch();
    }
    catch(Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " datas : ";
        print_r($datas);
    }
    if(!empty($row)) {
        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'];
                        // la requête SQL a executer :
                        $sql = 'INSERT INTO utilisateurs
                       (pseudo, email, password, ip, token) 
               VALUES(:pseudo, :email, :password, :ip, :token)';
                        //les données qu'il faut passer en paramètres de la requêtes
                        $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)));
                        // L'exécution de la requete DANS un try/catch
                        try {
                            $prep = $bdd->prepare($sql);
                            $prep->execute($datas);
                        }
                        catch(Exception $e) {
                            // en cas d'erreur :
                            echo " Erreur ! " . $e->getMessage();
                            echo " Les paramètres envoyés à la requete : ";
                            print_r($datas);
                        }
                        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
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 16:32
je viens d'essayer ce nouveau code
mais j'ai une erreur qui est retournée
lors de la finalisation de l'inscription


Cette page ne fonctionne pasImpossible de traiter cette demande via accessible-preparat.000webhostapp.com à l'heure actuelle.
HTTP ERROR 500
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 16:34
Ligne 14. Erreur sur la variable utilisée
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 16:49
merci

$sql a la place de check

non ce n est pas ca ....
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 16:59
$prep. A la place de check
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 17:10
ah ben oui ...
merci encore une fois

tiens c'est bizarre il y a une erreur lorsque je rentre un nouvel utilisateur qui n'est pas encore inscrit
il me dit qu'il existe déjà

pourtant je ne vois pas ce qui cloche
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 17:30
Fais un print_r( $row); avant le if et regarde ce qu'il t'affiche
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 17:41
merci pour l'astuce

voila j'en ai mis deux de cette façon

mais rien ne s'affiche

<?php
require_once 'config.php';
print_r( $row);
if (!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password_retype'])) {
    $pseudo = ($_POST['pseudo']);
    $email = ($_POST['email']);
    $password = ($_POST['password']);
    $password_retype = ($_POST['password_retype']);
    $sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
    $datas = array($email);
    //Execution de la requete
    try {
        $prep = $bdd->prepare($sql);
        $prep->execute($datas);
        $row = $prep->fetch();
    }
    catch(Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " datas : ";
        print_r($datas);
    }
    print_r( $row);
    if(!empty($row)) {
        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'];
                        // la requête SQL a executer :
                        $sql = 'INSERT INTO utilisateurs
                       (pseudo, email, password, ip, token) 
               VALUES(:pseudo, :email, :password, :ip, :token)';
                        //les données qu'il faut passer en paramètres de la requêtes
                        $datas = array('pseudo' => $pseudo, 'email' => $email, 'password' => $password, 'ip' => $ip, 'token' => bin2hex(openssl_random_pseudo_bytes(24)));
                        // L'exécution de la requete DANS un try/catch
                        try {
                            $prep = $bdd->prepare($sql);
                            $prep->execute($datas);
                        }
                        catch(Exception $e) {
                            // en cas d'erreur :
                            echo " Erreur ! " . $e->getMessage();
                            echo " Les paramètres envoyés à la requete : ";
                            print_r($datas);
                        }
                        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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 17:50
Alors déjà .. le premier il ne sert à rien.... vu que ta variable $row n'est crée qu'à partir de la ligne 15

Ensuite...pour voir quelque chose... il faudrait retirer les redirections...
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 17:55
oui je me doutais bien que le premier ne servait a rien mais bon

j enlève donc cette partie

    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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 17:57
Enlève rien il suffit de mettre en commentaire chaque ligne qui sert de redirection
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 18:01
merci

voila je viens de refaire l'essai
j'ai une page blanche a présent
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 18:12
Je viens de voir ton erreur...

Je t'avais donné un code avec un IF et un ELSE....
Dans le cas qui te concerne tu dois vérifier que la variable Row est vide ....
La toi tu testes si elle n'est pas vide....

Comprends-tu le mot empty ?
Sais-tu à quoi sert le point d'exclamation ?
C'est un minimum à connaître quand on commence à coder en PHP...
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 18:19
on vérifie si elle n est pas vide
ah mince c est le ! qui fout le bazar
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 19:38
ah ben voila cela a fonctionner
un grand merci

pour la connexion c'est pareil avec la gestion des erreurs

<?php 
    session_start();
    require_once 'config.php';
 
    if(!empty($_POST['email']) && !empty($_POST['password']))
    {
        $email = htmlspecialchars($_POST['email']);
        $password = htmlspecialchars($_POST['password']);

     
$sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
$datas = array($email);
//Execution de la requete
try{
  $prep = $bdd->prepare($sql);
  $prep->execute($datas);
  $row = $check->fetch();
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " datas : " ;
  print_r($datas);
}
        if($row == 1)
        {
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                
                if(password_verify($password, $data['password']))
                {
                    $_SESSION['user'] = $data['email'];
                   
                    header('Location: accueil-.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(); }
    }


et donc est ok dans ce cas reste comme ca ou alors on fait cette fois un !empty
 if($row == 1)
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 19:41
Dans ma première réponse je t'ai indiqué
- L'instruction htmlspecialchars ne doit jamais s'utiliser pour l'insertion des données en BDD.. elle ne doit servir que pour l'affichage des données sur une page .


Tu as encore une erreur de variable à la ligne 17
A corriger par
 $prep = $bdd->prepare($sql);
  $prep->execute($datas);
  $row = $prep->fetch();


Et pour ton if, là c'est
   if(!empty($row ))
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 20:18
merci pour la correction
mais j'ai une erreur
il m'indique que le compte n existe pas
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 20:49
Montre ton code modifié...

Et vérifie bien dans la base de données que le compte existe
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
Modifié le 10 mars 2021 à 20:55
merci de la réaction

oui le membre est bien inscrit

voici le code

<?php 
    session_start();
    require_once 'config.php';
 
    if(!empty($_POST['email']) && !empty($_POST['password']))
    {
        $email = ($_POST['email']);
        $password = $_POST['password']);

     
$sql = 'SELECT pseudo, email, password FROM utilisateurs WHERE email = ?';
$datas = array($email);
//Execution de la requete
try{
  $prep = $bdd->prepare($sql);
  $prep->execute($datas);
  $row = $prep->fetch();
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " datas : " ;
  print_r($datas);
}
        if(!empty($row ))
        {
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                
                if(password_verify($password, $data['password']))
                {
                    $_SESSION['user'] = $data['email'];
                   
               header('Location: accueil.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(); }
    }
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 21:00
Tu ne te relis pas assez....



                if(password_verify($password, $data['password']

Ce n'est pas data... mais row..

Si tu penses à activer les erreurs PHP au début de tes script et que tu mets en commentaire les redirection pour vérifier ce qui se passe quand ça ne fonctionne pas tu n'aurais pas besoin que je te relise ton code.
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 21:10
en effet c'est vrai que je ne me relis pas assez
pourtant c est de la logique

faut absolument que je comprenne ces choses toutes simple

pour protéger mes pages de mon espace membre seul ceci suffit alors

<?php 
    session_start();
     if(!isset($_SESSION['user'])){
         header('Location:test.php');
         die();
    
    }
 ?>
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 21:30
Oui
0
53pierre Messages postés 32 Date d'inscription mercredi 10 mars 2021 Statut Membre Dernière intervention 29 janvier 2023 1
10 mars 2021 à 21:45
merci
car sur un forum j avais vu cela
<?php 
session_start();
if(!empty($_SESSION['id']) AND !empty($_SESSION['pseudo']) OR !empty($_COOKIE['passe']) AND !empty($_COOKIE['pseudo']))  {
	
}
else
{
	header('Location: index.php');  
	
exit(); 
}
?> 
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mars 2021 à 21:48
Avoir un IF vide pour n'utiliser que le else n'a aucun intérêt ça a encore été coder par un branque...
0