Page 1 sur 1

Probleme page connexion en php

Posté : 01 févr. 2015, 12:59
par benW94
Salut à tous! :)

Je souhaite faire un espace membre assez simple sur mon site, j'ai réussi à faire la page d'inscription, page sur laquelle le visiteur doit rentrer ses infos perso et surtout son pseudo et mot de passe. La page marche nikel, les infos rentrent bien dans la base de donnée etc.

Par contre j'essaye de faire la page connexion en reprenant exactement la même syntaxe que pour la page inscription, et ça ne marche pas..

Voila le code de la page de connexion (en html):
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8"/>
		<title>Connexion | Sweetch</title>
		<link rel="stylesheet" href="CSS/style.css"/>
		<link rel="shortcut icon" href="Images/sweetch-rond.png"/>
	</head>

	<body>
		<?php include("Controleur/header.php"); ?>
		<section class="section-connexion">
			<?php include("Controleur/phrase-inscrit.php"); ?>
			<div class="connexion-container">
				<form method="POST" action="Controleur/connexion.php">
					<h1 class="connexion-titre">Se connecter :</h1>
					<p class="connexion-paragraphe">Connectez-vous pour accéder à votre compte, vos annonces, laisser un message sur le forum ou bien plus encore.</p>
					<?php include("Controleur/connexion-erreur.php"); ?>
					<label class="connexion-label">Votre pseudo : </label><input class="connexion-input" type="text" name="pseudo" placeholder="Ex : Steve1976"/>
					<label class="connexion-label">Votre mot de passe : </label><input class="connexion-input" type="password" name="mdp" placeholder="Ex : ******"/>
					<p class="connexion-oubli"><a href="">Mot de passe oublié?</a></p><p class="connexion-pas-inscrit">Pas encore inscrit? <a href="index.php?page=inscription">Inscrivez-vous</a></p>
					<input class="connexion-submit" type="submit" value="Connexion"/>
				</form>
			</div>
			
		</section>
		<?php include("Vues/footer.php"); ?>
	</body>
</html>
(Le php pour la phrase inscrit ou connexion-erreur sont des petites phrases qui s'affichent dans certains cas, elles marchent bien il n'y a aucun problèmes.)

Voici le php pour le traitement de la page connexion:
<?php 

//On renomme toutes les variables pour faciliter l'écriture du code.
$pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];

//On vérifie que le formulaire a été entièrement rempli.
if (isset($pseudo) AND !empty($pseudo) AND isset($mdp) AND !empty($mdp))
{
	//Le formulaire a été rempli, on vérifie alors que le pseudo existe et que le mot de passe associé est correct

	//On se connecte à la base de données
	include("../Modele/connexion-bdd.php");

	//On fait la requête pour trouver le pseudo et le mot de passe
	$req = $bdd->prepare('SELECT * FROM membre WHERE pseudo = :pseudo');
	$req->execute(array('pseudo' => $pseudo));
	$reponse = $req->fetch();
	if (!$reponse)
	{
		$reponse->closeCursor();
		header('Location: ../index.php?page=connexion&erreur=vide');
	}
	elseif(($reponse['pseudo'] == $pseudo) AND ($reponse['mdp'] == $mdp))
	{
		$reponse->closeCursor();
		header('Location: ../index.php?page=connexion&erreur=mdp')
	}
	elseif ($reponse['role'] == 'admin')
	{
		session_start();
		$_SESSION['id_membre'] = $reponse['id_membre'];
		$_SESSION['pseudo'] = $reponse['pseudo'];
		$_SESSION['nom'] = $reponse['nom'];
		$_SESSION['prenom'] = $reponse['prenom'];
		$_SESSION['role'] = $reponse['role'];
		$reponse->closeCursor();
		header('Location: ../index.php?page=accueil&connecte=oui');
	}
	elseif ($reponse['role'] == 'user')
	{
		session_start();
		$_SESSION['id_membre'] = $reponse['id_membre'];
		$_SESSION['pseudo'] = $reponse['pseudo'];
		$_SESSION['nom'] = $reponse['nom'];
		$_SESSION['prenom'] = $reponse['prenom'];
		$_SESSION['role'] = $reponse['role'];
		$reponse->closeCursor();
		header('Location: ../index.php?page=accueil&connecte=oui');
	}
else
{
	header('Location: ../index.php?page=connexion&erreur=remplir');
}

?>
Quand j'execute les fichiers, après envoi du formulaire, une page blanche s'affiche, rien ne se passe. J'ai testé les $pseudo et $mdp, en les affichant tout simplement, ça marche, c'est au niveau de la condition if/elseif etc ou ca merde completement.
Voila, je ne vois pas pourquoi ça ne fonctionne pas, je suis débutant en php, peut-être que je me trompe complètement, dans ce cas, faites le moi savoir :)

Merci pour l'aide

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 14:29
par xTG
Dans un premier temps ajoutes des affichages dans chacun des conditions pour savoir ce que le script déroule.
Penses aussi à activer les erreurs et warning php car tu as peut être le cas d'un header qui ne peut fonctionner car il y a eu un affichage avant.

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 14:53
par yann18
bonjour,

certaines de tes conditions font le contraire de ce qui est attendu.Par exemple:
         elseif(($reponse['pseudo'] == $pseudo) AND ($reponse['mdp'] == $mdp))
        {
                $reponse->closeCursor();
                header('Location: ../index.php?page=connexion&erreur=mdp')
        }
cette condition stipule qu'un utilisateur ayant fourni un login valide et un mot de passe valide sera redirigé vers la page d'erreur(index.php?page=connexion&erreur=mdp) ce qui contraire au but recherché.
        elseif ($reponse['role'] == 'admin')
        {
                session_start();
                $_SESSION['id_membre'] = $reponse['id_membre'];
                $_SESSION['pseudo'] = $reponse['pseudo'];
                $_SESSION['nom'] = $reponse['nom'];
                $_SESSION['prenom'] = $reponse['prenom'];
                $_SESSION['role'] = $reponse['role'];
                $reponse->closeCursor();
                header('Location: ../index.php?page=accueil&connecte=oui');
        }
        elseif ($reponse['role'] == 'user')
        {
                session_start();
                $_SESSION['id_membre'] = $reponse['id_membre'];
                $_SESSION['pseudo'] = $reponse['pseudo'];
                $_SESSION['nom'] = $reponse['nom'];
                $_SESSION['prenom'] = $reponse['prenom'];
                $_SESSION['role'] = $reponse['role'];
                $reponse->closeCursor();
                header('Location: ../index.php?page=accueil&connecte=oui');
        }
ces 2 dernières conditions permettent à l'utilisateur ayant renseigné un login valide et qu'importe la validité du mot de passe à pouvoir se connecter.
Essaies de simplifier les conditions en allant à l'essentiel .Ta requête sql effectue déjà un teste sur la validité du login.Tout ce te qui te reste à faire c'est de tester si le mot de passe est valide et dans ce cas mettre les données de l'utilisateur en session puis déterminer son rôle(admin,...) pour pouvoir le rediriger vers la page dediée à son profil.
Dans tous les cas si le résultat de la requête ne renvoie rien c'est que le login n'est pas valide et dans ce cas tu demandes à ton utilisateur de renseigner un login/et ou un mot de passe valide.
 if (!$reponse)
        {
       // login non valide, possible redirection vers la page d'erreur
       }else
        {
            if( $reponse['mdp'] == $mdp ){//bon mdp et bon login, 
              //mise en session
               if($reponse['role'] == 'admin'){
                        $_SESSION['role'] = $reponse['role'];/sauvegarde en session de son rôle
                    //redirection vers la page admin
            }
             if($reponse['role'] == 'user'){
                        $_SESSION['role'] = $reponse['role'];/sauvegarde en session de son rôle
                    //redirection vers la page user
            }
        }
     }


Re: Probleme page connexion en php

Posté : 01 févr. 2015, 16:06
par benW94
Merci pour les réponses, je vais modifier mon code, corriger les contradictions, et espérer que ça marche :)
Mais je trouve ça bizarre parce que dans le cas où il manque une partie du formulaire (login ou mot de passe manquant), dans le code je fais une simple redirection (je ne crois pas qu'il y ait d'erreur d'écriture, il n'y a qu'une ligne de code), et quand je teste en oubliant de renseigner le mot de passe par exemple, rien ne se passe, page blanche :/

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 16:25
par benW94
Ca ne marche toujours pas, j'ai modifié les erreurs pourtant, enfin j'ai peut etre oublié quelque chose encore :/
Voila le nouveau code :
<?php 

//On renomme toutes les variables pour faciliter l'écriture du code.
$pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];

//On vérifie que le formulaire a été entièrement rempli.
if (empty($_POST['pseudo']))
{
	//Le formulaire n'a pas été entièrement rempli
	header('Location: ../index.php?page=connexion&erreur=remplir');
}
elseif (empty($_POST['mdp'])) 
{
	//Le formulaire n'a pas été entièrement rempli
	header('Location: ../index.php?page=connexion&erreur=remplir');
}
else
{
	//Le formulaire a été rempli, on vérifie alors que le pseudo existe et que le mot de passe associé est correct

	//On se connecte à la base de données
	include("../Modele/connexion-bdd.php");

	//On fait la requête pour trouver le pseudo et le mot de passe
	$req = $bdd->prepare('SELECT * FROM membre WHERE pseudo = :pseudo');
	$req->execute(array('pseudo' => $pseudo));
	$reponse = $req->fetch();
	if (!$reponse)
	{
		//Le pseudo n'existe pas
		$reponse->closeCursor();
		header('Location: ../index.php?page=connexion&erreur=vide');
	}
	elseif (($reponse['pseudo'] == $pseudo) AND ($reponse['mdp'] != $mdp))
	{
		//Le pseudo existe mais le mot de passe n'est pas correct
		$reponse->closeCursor();
		header('Location: ../index.php?page=connexion&erreur=mdp')
	}
	elseif (($reponse['pseudo'] == $pseudo) AND ($reponse['mdp'] == $mdp))
	{
		//Dans ce cas, le login/mot de passe sont corrects, on test le rôle de l'utilisateur avant de lancer la session

		if ($reponse['role'] == 'admin')
		{
			//Connexion en tant qu'administrateur
			session_start();
			$_SESSION['id_membre'] = $reponse['id_membre'];
			$_SESSION['pseudo'] = $reponse['pseudo'];
			$_SESSION['nom'] = $reponse['nom'];
			$_SESSION['prenom'] = $reponse['prenom'];
			$_SESSION['role'] = $reponse['role'];
			$reponse->closeCursor();
			header('Location: ../index.php?page=accueil&connecte=oui');
		}
		elseif ($reponse['role'] == 'user')
		{
			//Connexion en tant qu'utilisateur
			session_start();
			$_SESSION['id_membre'] = $reponse['id_membre'];
			$_SESSION['pseudo'] = $reponse['pseudo'];
			$_SESSION['nom'] = $reponse['nom'];
			$_SESSION['prenom'] = $reponse['prenom'];
			$_SESSION['role'] = $reponse['role'];
			$reponse->closeCursor();
			header('Location: ../index.php?page=accueil&connecte=oui');
		}
	}
}

?>
Que dois-je modifier pour que ca marche?

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 16:50
par xTG
Penses aussi à activer les erreurs et warning php car tu as peut être le cas d'un header qui ne peut fonctionner car il y a eu un affichage avant.

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 16:58
par benW94
Désolé je comprends pas ce que signifie "activer les erreurs et warnings php", j'ai toujours pas vu ça :/
Je vais quand meme chercher sur google :)

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 17:39
par benW94
Ca y est j'ai activé les erreurs en moifiant le fichier php.ini :)
maintenant la page n'est plus blanche il y a écrit : "Parse error: syntax error, unexpected '}' in /Users/aurelien/Documents/Sweetch/Controleur/connexion.php on line 45"... Du coup si je me gourre pas dans la traduction de cette ligne, je vais m'attendre à voir une accolade fermée en trop à la ligne 45, mais cette accolade sert à fermer la condition du elseif, je dois faire quoi?

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 17:43
par tof73
ajouter un ; à la fin de
header('Location: ../index.php?page=connexion&erreur=mdp')

Re: Probleme page connexion en php

Posté : 01 févr. 2015, 17:44
par benW94
ENFIN!!!! j'ai résolu le probleme, il manquait un point virgule à une ligne et la fonction closeCursor() était de trop :)

Merci pour l'aide les gars :D