Fonctions login

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctions login

Re: Fonctions login

par or 1 » 07 avr. 2021, 17:32

https://www.php.net/manual/fr/language. ... .scope.php

la bonne manière de faire, c'est, lors de la première vérification du login/password, de récupérer le rôle, de mettre le tout en session, et ensuite, que les fonctions isLogAsPlayer retourne true ou false selon le rôle en session, ainsi il n'y a pas une requête sql superflue.

Re: Fonctions login

par Saian » 07 avr. 2021, 17:31

Salut, tu es dans une fonction et donc la variable $bdd est inconnue dans le scope de la fonction. Il faut la déclarer au début de la fonction avec un global $bdd;
https://www.php.net/manual/fr/language. ... .scope.php

Fonctions login

par XaaE » 07 avr. 2021, 17:23

Bonjour à tous !
J'essaye de faire plusieurs fonctions login qui me permettent de savoir quel est le rôle de l'utilisateur connecté, afin d'afficher ou de cacher certaines parties du site en fonction de son rôle. J'ai donc créer un fichier functionsLogin.php avec différentes fonctions:

Code : Tout sélectionner

<?php require_once 'BDD.php'; function isLogAsPlayer($username, $mdp) : bool{ //On récupère le champ role dans la BDD, on sait que l'utilisateur est un Joueur si son role = 0 $req = $bdd->prepare('SELECT role FROM utilisateur WHERE email = ? AND motdepasse = ?'); $req->execute(array( 'email'=>$username, 'motdepasse'=>password_hash($mdp, PASSWORD_DEFAULT) )); $role = $req->fect(); if (intval($role) == 0){ return true; } else return false; } function isLogAsCaptain() : bool{//On récupère le champ role dans la BDD, on sait que l'utilisateur est un Capitaine si son role = 1 $req=$bdd->prepare('SELECT role FROM utilisateur WHERE email = ? AND motdepasse = ?'); $req->execute(array( 'email'=>$username, 'motdepasse'=>$mdp )); $role = $req->fect(); if (intval($role) == 1){ return true; } else return false; } function isLogAsAdmin() : bool{//On récupère le champ role dans la BDD, on sait que l'utilisateur est un Admin si son role = 2 $req=$bdd->prepare('SELECT role FROM utilisateur WHERE email = ? AND motdepasse = ?'); $req->execute(array( 'email'=>$username, 'motdepasse'=>$mdp )); $role = $req->fect(); if (intval($role) == 2){ return true; } else return false; }
Et ma page d'accueil, dont je met seulement le morceau qui nous intéresse ici :

Code : Tout sélectionner

<body> <?php if ((!empty($_POST['username']))&&(!empty($_POST['password']))){ $username = $_POST['username']; $password = $_POST['password']; $req = $bdd->prepare('SELECT motdepasse FROM utilisateur WHERE email = :email'); //On récup l'email et le hash du MDP correspondant à l'utilisateur dans la BDD $req->execute(array( 'email'=>$username, )); $mdp = $req->fetch(); $mdp = $mdp["motdepasse"]; if(password_verify($password, $mdp)){ ?> <header> <h1>Présentation du site</h1> <p>Ce site a pour vocation de permettre à chaque équipes de s'inscrire pour le tournois de Football qui aura lieux en Juin 2021.<br /> L'organisateur du tournois peut créer le tournois dans la section "Créer un tournois".<br /> Les capitaines d'équipes doivent inscrire leur équipes au tournois dans la section "Inscrire une équipe".<br /> Chaque participants s'engage à lire la section "Règles des tournois" avant le début de la compétition. </p> <?php if(isLogAsPlayer($username, $password)){ echo "Vous ne pouvez rien voir de plus ! "; } } else{ echo "<p>Identifiant ou mot de passe incorrect</p>"; echo "<p>Retour à la page de <a href=\"PageConnexion.php\">connexion</a></p>"; } } else { ?> <p>Veuillez vous connecter pour accéder aux différentes informations.</p> <p>Rendez vous sur cette <a href="PageConnexion.php">page</a></p> <p>Si vous n'êtes pas inscrits, rendez vous <a href="Inscription.php"> ici </a> pour vous inscrire</p> <?php } ?> </body> </html>
Le problème est que l'appel a la fonction isLogAsPlayer dans la page d'accueil m'indique cette erreur : Uncaught Error: Call to a member function prepare() on null
Et je ne comprends pas pourquoi car j'ai bien mis le 'require BDD.php' qui est le fichier servant a connecter la base de données.
Merci d'avance pour votre aide ;)