espace membres connexion

Ce topic a été résolu
leaemile

leaemile Le 19 décembre 2016 à 20:30 (Édité le 25 janvier 2019 à 17:52)

Bonjour,
J'ai suivi le Tuto pour créer et utiliser un espace membres. Tout va bien jusqu'au moment d'établir la connexion. En effet le test sur l'existence ou non des variables email et mdp fonctionne à l'envers !!!
Et pourtant j'ai bien vérifié l'existence de ces paramètres grâce à un echo.
Voici mon bout de code :
<?php$bdd = new PDO('mysql:host=127.0.0.1; dbname=espace_membres', 'root', '');
session_start();

if(isset($_POST['formconnexion']))
  {
    $mailconnect = $_POST['mailconnect'];
    $mdpconnect = $_POST['mdpconnect'];
    if(!empty($mailconnect) AND !empty($mdpconnect))
    {
      $mailconnect = htmlspecialchars($_POST['mailconnect']);
      $mdpconnect = sha1($_POST['mdpconnect']);
        echo $mdpconnect; echo $mailconnect;
       $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND mdp = ? ");
       $requser->execute(array($mailconnect, $mdpconnect));


       $userexist = $requser->rowCount();
        if($userexist == 1)
        {
           $userinfo = $requser->fetch();
           $_SESSION['id'] = $userinfo['id'];
           $_SESSION['pseudo'] = $userinfo['pseudo'];
           $_SESSION['mail'] = $userinfo['mail'];
           header("Location: profil.php?id=".$_SESSION['id']);
          }
        else
         {
          $erreur = "Mauvais mail ou mot de passe incorrect !";
        }
    }
    else
    {
      $erreur = "Tous les champs doivent être complétés !";
    }
  }?>
Où se trouve ma bêtise ?
Merci.
leaemile

leaemile Le 20 décembre 2016 à 12:18

Bonjour,
Je reprends mon post car j'ai approfondi mes recherches.
Le code se plante dès le comptage de lignes dans ma base :
        if($userexist == 1)
En effet si je demande de me donner la valeur de $userexist je suppose que je devrait avoir le nombre de lignes dans la base, or j'obtiens "0" ?. De plus je ne comprends pas très bien la méthode qui consiste à voir si le membre qui vient de me donner son email ET son mdp exist bien et comment je le récupère pour la suite ...
Merci
Codeur61

Codeur61 Le 20 décembre 2016 à 22:28 (Édité le 20 décembre 2016 à 22:29)

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['formconnexion'])) {
   $mailconnect = htmlspecialchars($_POST['mailconnect']);
   $mdpconnect = sha1($_POST['mdpconnect']);
   if(!empty($mailconnect) AND !empty($mdpconnect)) {
      $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND motdepasse = ?");
      $requser->execute(array($mailconnect, $mdpconnect));
      $userexist = $requser->rowCount();
      if($userexist == 1) {
         $userinfo = $requser->fetch();
         $_SESSION['id'] = $userinfo['id'];
         $_SESSION['pseudo'] = $userinfo['pseudo'];
         $_SESSION['mail'] = $userinfo['mail'];
         header("Location: profil.php?id=".$_SESSION['id']);
      } else {
         $erreur = "Mauvais mail ou mot de passe !";
      }
   } else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
?>



Je crois que tu as fais une petite erreur dans ton code ou se sont mes yeux qui me joue des tours. En effet je suis débutant en la matière mais je crois avoir vue quelque chose je ne te dis rien par peur de me tromper mais je te laisse faire la différence entre ton code et le mien. 😄 Salut 
TheOldNoob

TheOldNoob Le 21 décembre 2016 à 00:01

Salut a tout les deux,

moi de ce que je vois, c'est que les lignes 10 et 11 devrais être a la place des lignes 6 et 7 qui n'ont pas de vérification. 

Pour afficher le contenu d'une variable utilise le var_dump tu aura un meilleur retour 
leaemile

leaemile Le 21 décembre 2016 à 09:42


leaemile

leaemile Le 21 décembre 2016 à 10:03


Codeur61

Codeur61 Le 21 décembre 2016 à 10:06

C'est se que je croyais avoir vue ???? @TheOldNoob
TheOldNoob

TheOldNoob Le 21 décembre 2016 à 10:17

Il me semble, en tout cas, après lecture de ton code oui ça me parait être ça. J'ai pas testé, donc si toi ça fonctionne, ça devrais fonctionner pour Leaemile
leaemile

leaemile Le 21 décembre 2016 à 10:44 (Édité le 21 décembre 2016 à 10:47)

Bonjour à tous les deux,
Je ne sais pas ce qui se passe mes réponses précédentes sont restées vides !!!
De plus avant de poursuivre ce post, pourriez vous me dire s'il m'est possible de supprimer les deux posts précédents indésirables.
Merci
TheOldNoob

TheOldNoob Le 21 décembre 2016 à 13:16

Non, je ne crois pas, mais c'est pas très grave 😀

Ton code fonctionne au final?
Codeur61

Codeur61 Le 21 décembre 2016 à 13:38

@TheOldNoob oui moi sa fonctionne parfaitement ! 😄
TheOldNoob

TheOldNoob Le 21 décembre 2016 à 14:45

toi oui, mais toi tu n'a pas de problème 😋

Lea?
leaemile

leaemile Le 21 décembre 2016 à 15:11

Je reviens vers vous
1) j'ai déplacé les deux lignes comme vous me le préconisiez
2) le test sur
if(isset($_POST['formconnexion']))
fonctionne maintenant.
De plus j'avais fait une énorme bourde les noms de variable testée et crée étaient différents !!!!!
3) je me heurte maintenant à un autre problème :
    if(!empty($mailconnect) AND !empty($mdpconnect))
     {
   echo "c'est vide";   
   }
   else{
    echo "parfait";
   }


Ce code ne fonctionne pas correctement, si les 2 champs sont vides .. j'obtiens le message "vide", si le champ £mailconnect est vide (tout seul) ... j'obtiens le message "vide", mais si le champ $mdpconnect est vide(tout seul)  alors ... j'obtiens le message "parfait" ce qui signifie que le test est positif donc que les 2 champs ne sont pas vides alors que ce n'est pas le cas ????
Je bosse sur ce morceau de code depuis hier et j'en perds mon latin, d'autant plus que je ne comprends pas très bien la suite : comment cette suite fait elle pour reconnaître que les deux données mail et mdp sont bien dans ma bdd ?
Si vous en êtes d'accord on verra cela plus tard.
Encore un grand merci à vous deux
Jacques
TheOldNoob

TheOldNoob Le 21 décembre 2016 à 17:33

Alors, la façon dont le code est fait, c'est normal que tu est se genre d'erreur.

déjà, pour l'instant tu lui dit :

Si $mailconnect est pas vide et que mdpconnect est pas vide affiche moi "c'est vide" // ce qui n'est pas logique


je te propose de faire différemment :

if(!empty($mailconnect) AND isset($mailconnect) { // Si $mailconnect n'est pas vide et qu'il est rempli
   echo "Parfait" 
} else { // Sinon
   echo "C'est vide"
   }
If(!empty($mdpconnect] AND isset($mdpconnect) {
   echo "Parfait" 
} else {
   echo "c'est vide"}
leaemile

leaemile Le 21 décembre 2016 à 21:36

Bonsoir TheOldNoob,
J'ai bossé comme un dingue une grosse partie de la journée sur ce produit : inscriptions, validation de l'inscription, connexion à l'index du site et autorisation d'accès au site ....  ouf, c'est terminé et ça marche !
Certes il me reste quelques petits problèmes de présentation et quelques réglages comme ceux cités ci-dessus, mais on verra cela demain.
Un grand merci pour ton aide, ton efficacité,  ta patience et aussi pour la clarté dans tes explications.
Au plaisir de te retrouver au cours des posts de ce forum.
De nouveau joyeuses fêtes de Noël
Jacques
TheOldNoob

TheOldNoob Le 22 décembre 2016 à 07:43

ça fait plaisir 😀

Bonne fête a toi aussi
leaemile

leaemile Le 25 décembre 2016 à 19:04

//Bonjour,
Quand on pense que tout est terminé et que notre produit fonctionne ... et bien non, il y a toujours un grain de sable qui traîne quelque part.
Mais il est vrai que les voies de l'informatique sont parfois impénétrables  !

Donc, revenons à mon code : après avoir réussi à traiter les questions de tests imbriqués au niveau des champs il me faut pour gérer les données les comparées à celles que je possède dans ma base de données afin de savoir si la personne concernée existe bien dans ma base et de ce fait a bien l'autorisation d'ouvrir la page qui suit. Voici ce que j'ai écrit :
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1; dbname=espace_membres', 'root', '');
 if(isset($_POST['formconnexion']))
  {
   $mailconnect = htmlspecialchars($_POST['mailconnect']);
   echo $mailconnect;
   $mdpconnect = sha1($_POST['mdpconnect']);
   echo $mdpconnect;
   
   // test sur le contenu des input
   if(empty($_POST['mailconnect']) AND isset($_POST['mailconnect']) AND empty($_POST['mdpconnect'] AND isset($_POST['mdpconect']))) 
    $erreur = 'Vous devez renseigner les deux champs !';
     elseif((empty($_POST['mailconnect']) AND isset($_POST['mailconnect'])) OR (empty($_POST['mdpconnect'])) AND isset($_POST['mdpconnect']))
      $erreur = 'Vous devez renseigner les deux champs !';
       else {
          $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND mdp = ? ");
          $requser->execute(array($mailconnect, $mdpconnect));
          $userexist = $requser->rowCount();
          echo $userexist;
         if($userexist == 1)
         { $erreur = "bien !";
          $userinfo = $requser->fetch();
             $_SESSION['id'] = $userinfo['id'];
             $_SESSION['pseudo'] = $userinfo['pseudo'];
             $_SESSION['mail'] = $userinfo['mail'];
          //$erreur=" ";
             header("Location: profil.php?id=".$_SESSION['id']);
         }
         
         else
         {
          $erreur="Vos données sont incorrects !";
         }  
        }
  }
 ?>            

Selon ce code, si les données existent dans ma base, la variable '$userexist' doit prendre la valeur '1', sinon elle prend la valeur '0'. Or dans tous les cas elle prend la valeur '0', donc même si les données sont exactes l'utilisateur n'est pas reconnu et ne peut accéder à la suite ...
Je ne vois vraiment pas où se trouve ma coquille !
Merci pour votre aide.
Jacques
leaemile

leaemile Le 25 décembre 2016 à 21:40

Bonsoir,
Non, non les voies de l'informatique ne sont pas impénétrables, ce sont les bêtises des étourdis qui les perturbent.
Le code ne pouvait pas fonctionner car tout bêtement dans la ligne 19, là où je fais référence à ma table je n'ai pas utilisé le même nom que celui qui apparaît dans ma table  pour le champ "mot de passe" .... et oui ! (le bon nom est "motdepasse" et non pas mdp").
La prochaine fois je me relirai 7 fois avant d'envoyer un post.
Bonne soirée à tous
jacques
TheOldNoob

TheOldNoob Le 25 décembre 2016 à 23:54

haha il faut impérativement s habituer des le début au conventions actuel. Utilise des mots anglais tel que password name city... tu verra au final tu va vite t habituer et tu gagnera en lisibilité.
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte