Problème Connexion espace membre

hunomina
Invité n'ayant pas de compte PHPfrance

18 juil. 2014, 20:09

Bonjour à tous, je sollicite votre aide car j'ai mis au point un espace membre en PDO sur mon site cependant je rencontre un problème. Lors de l'identification, pour pouvoir accéder au site, il faut naturellement rentrer ses identifiants qui ont été ajouté dans ma base de donnée. Néanmoins le probleme est qu'il n'est pas neccesaire de rentrer des identifiant correct. L'acces est autorisé à tout utilisateur meme non enregistré dans la bdd. Le code source est le suivant :
<?php
session_start();
try{
$cnx =new PDO('mysql:host=mysql.hostinger.fr;dbname=***********', '**********', '*************');
}
 catch(PDOException $e)
{
	exit('Problème de connexion à la base de donnée');
}
?>
<?php
	if(!empty($_POST)){
		$email=$_POST['email'];
		$password=sha1($_POST['password']);
		$q=array('email'=>$email,'password'=>$password);
		$sql='SELECT email,password FROM phpmembre WHERE email = :email AND password = :password';
		$req = $cnx->prepare($sql);
		$req->execute($q);
		$count=$req->rowCount($sql);
			if($count == 1){
			//verif si utilisateur actif
				$sql='SELECT email,password FROM phpmembre WHERE email = :email AND password = :password AND activer=1';
				$req = $cnx->prepare($sql);
				$req->execute($q);
				$actif = $count=$req->rowCount($sql);
					if($actif == 1){
						$_SESSION['Auth'] = array (
						'email'=> $email,
						'password'=> $password
						);
						header('Location: Page d\'accueil.php');
					}
					else{
						$error_actif = 'Votre compte n\'est pas actif. Verifier vos mails pour activer votre compte !';
					}
			// si utilisateur inconnu
			}else{
				$error_unknow ='Utilisateur inexistant !';
			}

	}
?>
<!Doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Portail Geek</title>
		<link type="text/css" rel="stylesheet" href="index.css"/>
		<link type="text/css" rel="stylesheet" href="Universelle.css"/>
		<link rel="icon" type="image/x-icon" href="favicon.ico" />
		<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
		</head>
	<body>
	<div class="texte">
		<div class="logo"><h1 class="h1">Entrée serveur</h1></div>
		<div class="form">
		<form action="Page d'accueil.php" method="post">
			<p class="entrez">E-mail</p><br/><input name="email" placeholder="E-mail" required/><br/>
			<p class="entrez">Mot de passe</p><br/><input name="password" type="password" placeholder="Mot de passe" required/><br/>
			<input type="submit" value="Se connecter" name="submit"/>
		</form>
		<a href='register.php' class='entrez'>Vous n'avez pas de compte ?</a>
		</div>
		<?php if(isset($error_actif)){echo $error_actif;} ?>
		<?php if(isset($error_unknow)){echo $error_unknow;} ?>
		<h1 style="color:yellow";> Vous devez vous créer un compte si vous souhaitez accéder au site</h1>
		</div>
	</div>
	</body>
</html>
J'ai beau chercher l'erreur je ne la trouve pas. Je vous demande donc votre aide pour la résoudre. Merci d'avance et bonne continuation :D

ViPHP
xTG
ViPHP | 7331 Messages

18 juil. 2014, 20:15

Comment vérifies-tu qu'un utilisateur est connecté ?

De plus pas besoin de faire deux requêtes, il suffit de récupérer le champs activer pour n'en avoir besoin que d'une seule. ;)
Enfin stocker le mot de passe en session... Pour quelle utilité ?
L'email est censé être unique de toute façon. (mais le mieux serait encore d'utiliser un ID numérique)

hunomina2
Invité n'ayant pas de compte PHPfrance

18 juil. 2014, 20:21

En fait on ne vérifie pas si il est connecté vu que c'est pour ce connecter =/ ensuite il accède dessuite au site
Pour le mot de passe c'est une faute de ma part c'est vrai merci de me l'avoir fait remarqué mais je n'est pas très bien compris pour l'histoire des requêtes ???

hunomina3
Invité n'ayant pas de compte PHPfrance

18 juil. 2014, 20:50

J'ai modifié le code pour qu'une seule requete soit fait mais ça ne marche pas :
<?php
session_start();
try{
$cnx =new PDO('mysql:host=mysql.hostinger.fr;dbname=***', '***', '***');
}
 catch(PDOException $e)
{
	exit('Problème de connexion à la base de donnée');
}
?>
<?php
	if(!empty($_POST)){
		$email=$_POST['email'];
		$password=sha1($_POST['password']);
		$q=array('email'=>$email,'password'=>$password);
		$sql='SELECT email,password FROM phpmembre WHERE email = :email AND password = :password AND activer=1';
		$req = $cnx->prepare($sql);
		$req->execute($q);
		$count=$req->rowCount($sql);
			if($count == 1){
				$_SESSION['Auth'] = 'email'=> $email;
				header('Location: Page d\'accueil.php');
			}
			else{
				$error_unknow ='Utilisateur inexistant ou votre compte n\'est pas actif. Verifier vos mails pour activer votre compte !';
			}

	}
	else{
	header('Location: index.php');
	}
?>
<!Doctype html>
<html>
	<head> 
		<meta charset="utf-8">
		<title>Portail Geek</title>
		<link type="text/css" rel="stylesheet" href="index.css"/>
		<link type="text/css" rel="stylesheet" href="Universelle.css"/>
		<link rel="icon" type="image/x-icon" href="favicon.ico" />
		<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
		</head>
	<body>
	<div class="texte">
		<div class="logo"><h1 class="h1">Entrée serveur</h1></div>
		<div class="form">
		<form action="Page d'accueil.php" method="post">
			<p class="entrez">E-mail</p><br/><input name="email" placeholder="E-mail" required/><br/>
			<p class="entrez">Mot de passe</p><br/><input name="password" type="password" placeholder="Mot de passe" required/><br/>
			<input type="submit" value="Se connecter" name="submit"/>
		</form>
		<a href='register.php' class='entrez'>Vous n'avez pas de compte ?</a>
		</div>
		<?php if(isset($error_unknow)){echo $error_unknow;} ?>
		<h1 style="color:yellow";> Vous devez vous créer un compte si vous souhaitez accéder au site</h1>
		</div>
	</div>
	</body>
</html>
A l'aide s'il vous plait =)

Mammouth du PHP | 1339 Messages

18 juil. 2014, 21:18

 $req->rowCount($sql);
$_SESSION['Auth'] = 'email'=> $email;
header('Location: Page d\'accueil.php');
Serieux ?

Déjà une apostrophe dans un nom de fichier je dis non ...
Pour le reste
$_SESSION['Auth'] = array('email' => $email);
Je ferais :
$_SESSION['Auth'] = $q;
rowCount n'a pas de variable a préciser ... rowCount();

Encore une fois, developpeur c'est un métier et comme tout métier, il faut apprendre avant d'exercer ...
Bon sinon tu me fais un message privé et on se fait un TeamViewer

hunomina4
Invité n'ayant pas de compte PHPfrance

18 juil. 2014, 22:49

Merci pour les conseils. Pas besoin de s'enerver, j'ai oublier de preciser mais c'est pour tester et aider des amis (trop long a expliquer). J'essaye et je vous dit si ça fonctionne :)

hunomina5
Invité n'ayant pas de compte PHPfrance

18 juil. 2014, 23:01

Encore merci pour les conseils mais tu ne résouds pas mon problème...: Il n'est pas nécessaire de rentrer des identifiant correct. L’accès est autorisé à tout utilisateur même non enregistré dans la bdd. Même après les modifications que tu me propose. A tu ou avez vous une autre idée pour résoudre mon problème ???

PS : Je rajoute +1 à mon pseudo à chaque message car je me suis inscrit mais le mail de vérification n'arrive même après relance via la connexion

ViPHP
xTG
ViPHP | 7331 Messages

19 juil. 2014, 11:19

Si tu remplaces ton header par un echo le vois-tu ?
Je ne vois pas en quoi ce code te permettrai de te connecter avec un mauvais mot de passe ou une mauvaise adresse email.

Eléphant du PHP | 88 Messages

19 juil. 2014, 12:01

Le header n'est pas là pour "afficher" quelque chose : il est la pour rediriger vers la page 'Page d\'accueil.php'.
Si tu veut voir en pratique va le site que je t'ai envoyé en pv je ne peut pas le mettre dans le message ça ne veut pas(c'est le site en question) et tu verra que tu peut te connecter avec n'importe quel identifiant mais je ne trouve pas pourquoi... AU SECOURS ;(
Le temps donne sa légitimité à l'existence...

Eléphant du PHP | 88 Messages

19 juil. 2014, 12:13

PHPfrance ne veut pas que j'ecrive ou que j'envoie de lien dsl =(


edit : le lien : http://www.portail-geek.meximas.com/
Modifié en dernier par moogli le 19 juil. 2014, 21:13, modifié 1 fois.
Raison : ajout du lien
Le temps donne sa légitimité à l'existence...

ViPHP
xTG
ViPHP | 7331 Messages

19 juil. 2014, 14:47

Le but est de voir si tu passes bien dans cette condition.
Avoir l'url du site ne va pas aider des masses puisque le code intéressant se trouve côté serveur. ;)
Et le fait que tu ne puisses pas le poster vient de ton ancienneté sur le forum.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2014, 15:15

PHPfrance ne veut pas que j'ecrive ou que j'envoie de lien dsl =(

c'est parce que tu es "nouveau".
envoi moi le lien par mp je l'ajouterais au message (n'oublie pas le lien vers ce message sinon je vais pas savoir d'où ça vient ;))

sinon
- mettre les headers en commentaire cela permet de pouvoir debugguer ton script (il est aussi possible (et même mieux d'utiliser un IDE et Xdebug pour cela ;) )
- il faut tester chaque étape une a une avant de tester tout le code (chez microsoft ils ne tape 50 milliard de ligne de code avant de ce dire et dit donc il démarre l'os au moins ? ;) )
- on n'utilise pas d'espace ou d'apostrophe dans un nom de fichier. en fait il doit pouvoir être valider par [a-zA-Z0-9_-.] cela te permt d'être certain de ne pas avoir de problème ;)

sinon ton code est fonctionnel
<?php
session_start();
try {
    $cnx = new PDO('mysql:host=localhost;port=3307;dbname=test', 'root', '');
} catch (PDOException $e) {
    echo '<code>'.$e->getMessage().'<br />'.$e->getTraceAsString(),'</code>';
}
if (!empty($_POST)) {
    $email = $_POST['email'];
    $password = sha1($_POST['password']);
    $q = array('email' => $email, 'password' => $password);
    $sql = 'SELECT email,password,activer FROM phpmembre WHERE email = :email AND password = :password';
    $req = $cnx->prepare($sql);
    $req->execute($q);
    $data = $req->fetch(PDO::FETCH_ASSOC);
    $count = $req->rowCount($sql);
    if ($count == 1) {
        if ($data['activer'] == 1) {
            $_SESSION['Auth'] = array(
                'email' => $email,
            );
            echo 'ok';
//            header('Location: Page d\'accueil.php');
        } else {
            $error_actif = 'Votre compte n\'est pas actif. Verifier vos mails pour activer votre compte !';
        }
        // si utilisateur inconnu
    } else {
        $error_unknow = 'Utilisateur inexistant !';
    }

}
?>
<!Doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Portail Geek</title>
    <link type="text/css" rel="stylesheet" href="index.css"/>
    <link type="text/css" rel="stylesheet" href="Universelle.css"/>
    <link rel="icon" type="image/x-icon" href="favicon.ico"/>
    <!--[if IE]>
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/><![endif]-->
</head>
<body>
<div class="texte">
    <div class="logo"><h1 class="h1">Entrée serveur</h1></div>
    <div class="form">
        <form action="" method="post">
            <p class="entrez">E-mail</p><br/><input name="email" placeholder="E-mail" required/><br/>

            <p class="entrez">Mot de passe</p><br/><input name="password" type="password" placeholder="Mot de passe"
                                                          required/><br/>
            <input type="submit" value="Se connecter" name="submit"/>
        </form>
        <a href='register.php' class='entrez'>Vous n'avez pas de compte ?</a>
    </div>
    <?php if (isset($error_actif)) {
        echo $error_actif;
    } ?>
    <?php if (isset($error_unknow)) {
        echo $error_unknow;
    } ?>
    <h1 style="color:yellow";> Vous devez vous créer un compte si vous souhaitez accéder au site</h1>
</div>
</div>
</body>
</html>
Attention au copier coller cela ne fonctionnera pas XD
Il en faut peu pour être heureux ......

Eléphant du PHP | 88 Messages

19 juil. 2014, 18:13

Merci beaucoup pour les correction que tu as fait, j'essaie de mon coté et je t'ai envoyé en message l'URL du site merci =)
Le temps donne sa légitimité à l'existence...

Eléphant du PHP | 88 Messages

19 juil. 2014, 18:25

J'ai donc essayé et ça me met cette erreur :

SQLSTATE[28000] [1045] Access denied for user '********'@'10.2.1.42' (using password: YES)
#0 /home/*******/public_html/index.php(4): PDO->__construct('mysql:host=mysq...', '********', '***********') #1 {main}

J'ai bien sure remis la page d'avant pour que mes identifiant ne soit pas connue mais je ne comprend pas cette erreur. Que veut-elle dire et comment y remédier ??? Merci d'avance :)

J'ai aussi télécharger Xdebug mais je ne sais pas comment m'en servir, un petit coup de main s'il vous plait :)
Le temps donne sa légitimité à l'existence...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 juil. 2014, 21:12

pour xdebug
http://blog.pascal-martin.fr/post/xdebu ... emiers-pas
http://fr.openclassrooms.com/informatiq ... php-xdebug

Le message d'erreur est clair l'utilisateur que tu indique n'a pas le droit de se connecter.
En clair tu as merdé la conf de l'utilisateur XD
Vérifie qu'il soit bien configuré pour les accès distant (et donc pas de 127.0.0.1 ou localhost dans la conf
exemple de création d'utilisation qui ne peu se connecter que sur l'hôte local
[mysql]
CREATE USER 'toto'@'localhost' IDENTIFIED BY 'toto';
GRANT USAGE ON *.* TO 'toto'@'localhost';
[/mysql]

Par défaut les utilisateurs sont configuré ainsi.

Il est important d'afficher les erreurs lorsque l'on est en phase de développement sinon tu ne r'en sort pas.
Dans le style le die c'est très, mais très très moche.
Il y a toujours moyen de faire quelque chose de propre et de garder la mise en page du site laisse un message moisi avec une page blanche.

@+
Il en faut peu pour être heureux ......