Problème de connexion en php
Fermé
Mimi
-
2 déc. 2019 à 13:11
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 2 déc. 2019 à 16:21
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 2 déc. 2019 à 16:21
A voir également:
- Problème de connexion en php
- Gmail connexion - Guide
- Hotmail connexion - Guide
- Facebook connexion - Guide
- Cette option de connexion est désactivée en raison des échecs des tentatives de connexion - Forum PC portable
- Problème de connexion - Guide
4 réponses
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
2 déc. 2019 à 13:47
2 déc. 2019 à 13:47
Bonjour,
Pour te fournir une solution ou des pistes adaptées à ton code, il serait très utile de nous le montrer.
Pour ce faire, copie-colle ton code source en réponse à ton message, sans oublier de le mettre entre les balises < code php></ code> qui permettront d'obtenir un formatage lisible. (Utilise le bouton <> à côté du bouton S)
Xavier
Pour te fournir une solution ou des pistes adaptées à ton code, il serait très utile de nous le montrer.
Pour ce faire, copie-colle ton code source en réponse à ton message, sans oublier de le mettre entre les balises < code php></ code> qui permettront d'obtenir un formatage lisible. (Utilise le bouton <> à côté du bouton S)
Xavier
Voici ma page register.php
<?php session_start(); include('filters/guest_filter.php'); require('config/database.php'); require('includes/functions.php'); require('includes/constants.php'); // si le formulaire a été soumis if (isset($_POST['register'])) { // si tous les champs ont été remplis if (not_empty(['name', 'pseudo', 'email', 'password', 'password_confirm'])) { $errors = []; // Contiendra toutes les erreurs, si il y'a erreurs extract($_POST); // Validation des données saisie par l'utilisateur if (mb_strlen($pseudo) < 3) { $errors[] = "Pseudo trop court minimum 3 cractères !"; } if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = "Votre adresse email invalide !"; } if (mb_strlen($password) < 6) { $errors[] = "Mot de passe trop court minimum 6 cractères !"; }else{ if($password != $password_confirm){ $errors[] = "Les deux mots de passe ne concorrdent pas !"; } } if (is_already_in_use('pseudo', $pseudo, 'users')) { $errors[] = "Pseudo déjà utilisé !"; } if (is_already_in_use('email', $email, 'users')) { $errors[] = "Adresse E-mail déjà utilisé !"; } //Tout en envoyant un mail d'activation à l'utilisateur if (count($errors) == 0) { //Generation des parametres pour l'envoyant de mail $to = $email; $subject = WEBSITE_NAME. " - ACTIVATION DE COMPTE"; $password = sha1($password); $token = sha1($pseudo.$email.$password); $headers = 'MINE-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Recuperation du mail deja formate ob_start(); require('templates/emails/activation.tmpl.php'); $content = ob_get_clean(); //Envoie de mail d'activation mail($to, $subject, $content, $headers); // Enregistrement des infos en base de données $q = $db->prepare('INSERT INTO users(name, pseudo, email, password) VALUES(:name, :pseudo, :email, :password)'); $q->execute([ 'name' => $name, 'pseudo' => $pseudo, 'email' => $email, 'password' => $password ]); // Nous informons l'utilisateur pour qu'il verifie sa boite //de reception afin d'activer son compte set_flash(" \r\n Mail d'activation envoye!", 'success'); retirect('index.php'); // }else{ save_input_data(); } }else{ $errors[] = "Veuillez remplir tous les champs !"; save_input_data(); // } } else{ clear_input_data(); // permet de supprimer tous les infos en session } /* if($array["isSuccess"]){ $headers = "From: {$array["firstname"]} {$array["name"]} <{$array["email"]}>\r\nReply-To: {$array["email"]}"; // Envoie l'email // echo "json_encode($array)"; */ ?> <?php require('views/register.view.php'); ?>
Celui-ci est ma page de connexion
login.php
login.php
<?php session_start(); include('filters/guest_filter.php'); require('config/database.php'); require('includes/functions.php'); require('includes/constants.php'); // si le formulaire a été soumis if (isset($_POST['login'])) { // si tous les champs ont été remplis if (not_empty(['identifiant', 'password'])) { extract($_POST); $q = $db->prepare("SELECT id, pseudo FROM users WHERE (pseudo = :identifiant OR email = :identifiant) AND password = :password AND active = '1'"); $q->execute([ 'identifiant' => $identifiant, 'password' => sha1($password) ]); $userHasBeenFound = $q->rowCount(); // rowCoun = permet d compter le nbre d resultat if($userHasBeenFound){ $user = $q->fetch(PDO::FETCH_OBJ); $_SESSION['user_id'] = $user->id; $_SESSION['pseudo'] = $user->pseudo; redirect('profile.php?id='.$user->id); } else{ set_flash('Combinaison Identifiant/Password incorrect!', 'danger'); save_input_data(); } } } else{ clear_input_data(); } ?> <?php require('views/login.view.php'); ?>
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
2 déc. 2019 à 16:03
2 déc. 2019 à 16:03
Bonjour,
Le problème vient de ton usage de $q->rowCount.
Cette valeur n'est PAS le nombre de lignes d'un SELECT. C'est le nombre de ligne impactées par un DELETE, INSERT ou UPDATE. (cf la doc : https://www.php.net/manual/fr/pdostatement.rowcount.php )
Pour le nombre de lignes du SELECT, il ne faut pas faire $q->execute mais $q->query, avec un SELECT COUNT(*), ou juste en vérifiant que $q->fetch() n'est pas FALSE. (cf exemple #2 du lien donné)
Xavier
Le problème vient de ton usage de $q->rowCount.
Cette valeur n'est PAS le nombre de lignes d'un SELECT. C'est le nombre de ligne impactées par un DELETE, INSERT ou UPDATE. (cf la doc : https://www.php.net/manual/fr/pdostatement.rowcount.php )
Pour le nombre de lignes du SELECT, il ne faut pas faire $q->execute mais $q->query, avec un SELECT COUNT(*), ou juste en vérifiant que $q->fetch() n'est pas FALSE. (cf exemple #2 du lien donné)
Xavier
jordane45
Messages postés
38145
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 avril 2024
4 650
2 déc. 2019 à 16:21
2 déc. 2019 à 16:21
Bonjour,
Vu que tu fais du PDO... il serait déjà bien de pouvoir voir les éventuelles erreurs dans les requêtes ou le code pdo lui même.
Pour ça, il faut activer l'affichage des erreurs PDO ET placer CHAQUE requête dans un bloc try/catch
=> voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite, histoire que ton code soit un peu plus propre, activer l'affichage des erreurs PHP , récupérer "proprement" les variables avant de les utiliser et même, découper en fonctions chaque parti de ton code : comme indiqué ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Je t'informe également que le SHA1 (ou le sha2 ou le md5 ) ne sont plus à utiliser pour gérer les password....
A la place, il faut te tourner vers la fonction php : password_hash https://www.php.net/manual/fr/function.password-hash.php
Et pour finir.... tu sembles vérifier que l'utilisateur est "actif" ( le champ active =1 ) lors de la connexion....
Mais je ne vois pas, lors de l'insert, la mise à "1" de cette valeur.
Est-ce une valeur par défaut, un oubli ?
Quoi qu'il en soit, si ce champ est à zéro lors de l'inscription... normal qu'il ne puisse pas se loguer ensuite.
Vu que tu fais du PDO... il serait déjà bien de pouvoir voir les éventuelles erreurs dans les requêtes ou le code pdo lui même.
Pour ça, il faut activer l'affichage des erreurs PDO ET placer CHAQUE requête dans un bloc try/catch
=> voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite, histoire que ton code soit un peu plus propre, activer l'affichage des erreurs PHP , récupérer "proprement" les variables avant de les utiliser et même, découper en fonctions chaque parti de ton code : comme indiqué ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Je t'informe également que le SHA1 (ou le sha2 ou le md5 ) ne sont plus à utiliser pour gérer les password....
A la place, il faut te tourner vers la fonction php : password_hash https://www.php.net/manual/fr/function.password-hash.php
Et pour finir.... tu sembles vérifier que l'utilisateur est "actif" ( le champ active =1 ) lors de la connexion....
Mais je ne vois pas, lors de l'insert, la mise à "1" de cette valeur.
Est-ce une valeur par défaut, un oubli ?
Quoi qu'il en soit, si ce champ est à zéro lors de l'inscription... normal qu'il ne puisse pas se loguer ensuite.