Connexion PHP

Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - Modifié par papyclic le 5/01/2016 à 12:26
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 8 janv. 2016 à 22:51
Bonjour
J'ai un fichier de connexion avec des SESSIONs pour la gestion du site.
Je viens de m'apercevoir de quelque chose de très bizarre.
Lorsque j'octroie une SESSION à un membre pour la gestion d'une responsabilité, donc c'est simplement des checkbox tout fonctionne bien à l'exception que ça modifie le mot de passe du membre auquel je lui est donné une permission, donc il ne peut plus se connecter, je ne sais pas si mes explication on été assez explicite.
Je vous remercie si vous pouvez me donner la main à résoudre ce malheureux problème qui me pourrit le site.
Voici mon fichiers des fonctions
Merci
<?php
class Connexion_class {
 
 private $pseudo;
 private $password;
 private $fin;
 
 private $bdd;
 
 public function __construct($pseudo, $password, $fin) {
  
  $password  = Security::hash($password);
   
  $this->pseudo = $pseudo;
  $this->password  = $password;
  $this->fin  = $fin;
  
  $this->bdd  = bdd();
 }
 
 private function ChampsVide() {
  return(empty($this->pseudo) || empty($this->password)) ? true : false;  
 }

 private function PseudoExist() {
  $sql = "SELECT *
    FROM  tb_adherent
    WHERE pseudo = :pseudo
    AND fin = 0";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $donnees = $requete->fetch();
  return ($donnees) ? $donnees['password'] : false;
 }

 private function Banni() {
  $sql = "SELECT *
    FROM  tb_adherent
    WHERE pseudo = :pseudo
    AND fin = 0";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $donnees = $requete->fetch();
  return($donnees['fin'] == 1) ? true : false;
 }
 
 private function Session() {
  $sql = "SELECT *
    FROM tb_gestion_site
    INNER JOIN tb_adherent
    ON tb_adherent.id_adherent = tb_gestion_site.rid_adherent
    WHERE pseudo = :pseudo
    AND fin = 0";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $donnees = $requete->fetch();
  $_SESSION['id_adherent']    = $donnees['id_adherent'];
  $_SESSION['prenom']     = $donnees['prenom'];
  $_SESSION['pseudo']     = $this->pseudo;
  $_SESSION['gestion_membre']   = $donnees['gestion_membre'];
  $_SESSION['gestion_repetition']  = $donnees['gestion_repetition'];
  $_SESSION['gestion_sortie']   = $donnees['gestion_sortie'];
  $_SESSION['gestion_calendrier']  = $donnees['gestion_calendrier'];
  $_SESSION['gestion_repertoire']  = $donnees['gestion_repertoire'];
  $_SESSION['gestion_responsable']  = $donnees['gestion_responsable'];
  $_SESSION['gestion_recompense']  = $donnees['gestion_recompense'];
  $_SESSION['effectif_sortie']   = $donnees['effectif_sortie'];
  $_SESSION['liste_membre']    = $donnees['liste_membre'];
 }
 
 public function VerifConnexion() {
  if($this->ChampsVide()) {
   $erreur = 'Veuillez remplir tous les champs';
   
  } else if($this->PseudoExist()) {
   if($this->password == $this->PseudoExist()) {
    if(!$this->Banni()) {
    
     $erreur = 'success';
     $this->Session();
     
    } else {
     $erreur = 'Ton compte a été supprimé';
    }
   } else {
    $erreur = 'Mauvais mot de passe...ou Mauvais login...Merci de recommencer.</br> Peut-être n\'êtes vous pas membre de la Clique ? Dans ce cas désolé...';
   }
  } else {
   $erreur = 'Ce compte n\'existe pas';
  }
  return $erreur;
 }
}
?>

voici mon fichier qui appel les fonctions
<?php
if(isset($_POST['pseudo']) && isset($_POST['password'])) {

	$pseudo   	= isset($_POST['pseudo']) ? Security::clean($_POST['pseudo']) : '';
	$password	= isset($_POST['password']) ? Security::clean($_POST['password']) : '';
	$fin			= isset($_POST['fin']) ? $_POST['fin'] : '';

	$Connexion = new Connexion_class($pseudo, $password, $fin);
	$VerifConnexion = $Connexion->VerifConnexion();
	    
	if($VerifConnexion == 'success') {
		
		redir("./index.php?body=compte_profil&type=compte");
	
	} else {
		$erreur_info[] = $VerifConnexion;
	}
}

if (isset($erreur_info)) {
	echo erreurs($erreur_info);
}
?>
A voir également:

5 réponses

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
5 janv. 2016 à 14:42
Bonjour,

Je ne vois pas la partie avec les checkbox ....
De plus... quelle est la partie du code, selon toi, qui pose problème ?
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
5 janv. 2016 à 17:23
Bonjour
En fait je suis dessus toute l'après midi et je viens de m'apercevoir que j'ai fait une grosse boulette, manque d'attention j'ai rectifié mon erreur et tout fonctionne normalement pour la connexion.
Mais quelque chose de moins grave mais que j'aimerai quand même pouvoir résoudre. En fait j'ai 4 conditions pour pouvoir se connecter.
1 Veuillez remplir tous les champs
2 Ton compte a été supprimé (pour les membres démissionnaires)
3 Mauvais mot de passe...ou Mauvais login
4 Ce compte n\'existe pas

Pour un membre qui quitte l'association il y a la fonction "Banni" c'est à dire que son compte a été supprimé, mais cette condition ne fonctionne pas. Pourtant pour les membres démissionnaires je retourne bien "fin == 1". cela concerne la fonction Banni je devrais rentrer dans cette condition si le membre est banni
S'il te plait tu peux jeter un œil sur les conditions et me dire ce que tu en penses.
Je te remercie
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 6/01/2016 à 17:06
Salut,

Ta requête dans la fonction Banni n'est pas correcte :
SELECT * FROM  tb_adherent WHERE pseudo = :pseudo AND fin = 0

tu récupères les infos du pseudo spécifié pour lequel le champ fin est égal à 0, donc ta fonction ne te retournera jamais de résultat si le pseudo spécifié a un champ fin égal à 1.

Ta requête devrait plutôt s'écrire :
SELECT fin FROM  tb_adherent WHERE pseudo = :pseudo


Bonne journée,
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
7 janv. 2016 à 19:53
Bonjour
Merci pour ta réponse malheureusement je n'entre toujours pas dans la condition si fin d'un pseudo est égal 1.
en faisant comme ça je ne comprends pas pourquoi ça ne marche pas
Ca rentre dans cette condition Ce compte n'existe pas au lieu de Ton compte a été supprimé
 private function Banni() {
  $sql = "SELECT *
    FROM  tb_adherent
    WHERE pseudo = :pseudo
    AND fin = 1";
  $requete = $this->bdd->prepare($sql);
  $requete->execute(array('pseudo' => $this->pseudo));
  $donnees = $requete->fetch();
  return($donnees['fin'] == 1) ? true : false;
 }

Merci de ton aide
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
8 janv. 2016 à 09:35
Comme pour mon message précédent : si ton utilisateur en bdd a le champ fin égal à 1, la requête utilisé par la fonction PseudoExist() ne vas donc retourné aucun résultat puisque cette requête contient la condition (clause where) fin = 0, d'où ce message.
0

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

Posez votre question
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
8 janv. 2016 à 22:51
Bonjour
Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas
	private function Banni() {
		$sql = "SELECT fin FROM tb_adherent WHERE pseudo = :pseudo";
		$requete = $this->bdd->prepare($sql);
		$requete->execute(array('pseudo' => $this->pseudo));
		$donnees = $requete->fetch();
		return($donnees['fin'] == 1) ? true : false;
	}

Merci pour ton aide
0