Problème formulaire connection php

Résolu/Fermé
Signaler
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019
-
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019
-
Bonjour, je suis en train de coder un site et ca fait très longtemps que je n'avais pas programmer, je faisait donc ma requete pdo pour me connecter car l'inscription marchais sans problème, mais j'ai toujours le $err = "Pseudo ou mot de passe incorrect";
Vu que je n'ai pas d'erreur ca doit etre car ma fonction est toujours fausse, voila mon code :
				<form method="post">
				<br>
					<label for="pseudo">Pseudo :</label>
					<br>
					<input type="text" name="pseudo_connect" id="pseudo">
					<br><br>
					<label for="password">Mot de passe :</label>
					<br>
					<input type="password" name="password_connect" id="password">
					<br><br>
					<input type="submit" name="submit_connect" value="Se connecter">
					<br><br>
					<a href="register.php">Pas encore de compte ?</a>
					<br>
					<a href="">Mot de passe oublié ?</a>
				</form>

<?php
if(isset($_POST['submit_connect']))
{
	$pseudo = htmlspecialchars($_POST['pseudo_connect']);
	$password = sha1($_POST['password_connect']);
	if(!empty($pseudo) && !empty($password))
	{
		$requser = $bdd->prepare('SELECT * FROM users WHERE pseudo = ? AND password = ?');
		$requser->execute(array($pseudo, $password));
		$userExist = $requser->rowCount();
		if($userExist == 1)
		{
			header('Location: index.php');
		}
		else
		{
			$err = "Pseudo ou mot de passe incorrect";
		}
	}
	else
	{
		$err = "Veuillez remplir tous les champs";
	}
}
?>





2 réponses

Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
3 867
Bonjour,
L'utilisation du rowCount est fortement déconseillée..
(voir la notice de php)

A la place, fais un FETCHALL du résultat de ta requête et un COUNT dessus.
Pour intercepter les éventuelles erreur php, il faut également penser à utiliser des bloc TRY/CATCH pour tes requêtes.

par exemple :
$sql = 'SELECT * FROM users WHERE pseudo = ? AND password = ?';
$datas = array($pseudo, $password);
try{
  $requser = $bdd->prepare($sql);
  $requser->execute($datas);
  $array_result = $requser->fetchAll();
}catch(Exception $e){
  echo "Erreur dans la requete. ".$e->getMessage();
}

$nb = count($array_result);

if($nb == 1 ){ //etc...



Et mettre en première ligne de tes pages php (pour afficher les erreurs php):
error_reporting(E_ALL);



NB : Par défaut, les erreurs PDO ne sont pas activées.
Dans le code de connexion à ta BDD tu dois ajouter ceci :

   $bdd= new PDO( /*...... */); //le code de connexion à ta bdd
   $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //options pour l'affichage des erreurs PDO

Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019

ok merci beaucoup j'essaie tout ca apres mais pourquoi le rowCount est déconseillé ?
Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
3 867 >
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019

Ben... il suffit de lire la doc ....
Tu y lira :

Pour la plupart des bases de données, PDOStatement::rowCount() ne retourne pas le nombre de lignes affectées par une requête SELECT
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019
>
Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021

j'ai fait ce que tu m'as dit, j'ai demarrer la session dans le header.php que j'ai include, j'ai creer les variables de session, et quand a l'acceuil je fais echo $_SESSION['pseudo'] il n'y a rien... :/
merci bcp
Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
3 867
Tu me montres ton code complet.
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019

login.php:
	<?php include('includes/header.php') ?>
<?php include('php/php_bdd.php') ?>
<?php include('php/php_login.php') ?>
<?php include('includes/infos.php') ?>
<div class="content">
<div class="wrapper" style="background-color: #fff; padding-left: 5px;padding-right: 5px; padding-bottom: 20px;">
<div style="text-align: center">
<br>
<?php
if(isset($err))
{
?>
<div class="alert" style="padding: 10px; background-color: #46a2d9;">
<h2 style="color: #fff; font-weight: 400; text-transform: uppercase;"><?php echo $err ?></h2>
</div>
<?php
}
?>

<form method="post">
<br>
<label for="pseudo">Pseudo :</label>
<br>
<input type="text" name="pseudo_connect" id="pseudo">
<br><br>
<label for="password">Mot de passe :</label>
<br>
<input type="password" name="password_connect" id="password">
<br><br>
<input type="submit" name="submit_connect" value="Se connecter">
<br><br>
<a href="register.php">Pas encore de compte ?</a>
<br>
<a href="">Mot de passe oublié ?</a>
</form>
</div>
</div>
</div>
<?php include('includes/footer.php') ?>


login.php php:
<?php
if(isset($_POST['submit_connect']))
{
$pseudo = htmlspecialchars($_POST['pseudo_connect']);
$password = sha1($_POST['password_connect']);
$sql = 'SELECT * FROM users WHERE pseudo = ? AND password = ?';
$datas = array($pseudo, $password);
try
{
$requser = $bdd->prepare($sql);
$requser->execute($datas);
$array_result = $requser->fetchAll();
$userinfo = $requser->fetch();
}
catch(Exception $e)
{
echo "Erreur dans la requete. ".$e->getMessage();
}

$nb = count($array_result);

if($nb == 1 )
{
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['password'] = $userinfo['password'];
$_SESSION['lastname'] = $userinfo['lastname'];
$_SESSION['firstname'] = $userinfo['firstname'];
$_SESSION['mail'] = $userinfo['mail'];
$_SESSION['grade'] = $userinfo['grade'];
$_SESSION['accept_mail'] = $userinfo['accept_mail'];
$_SESSION['date'] = $userinfo['date'];
header('Location: index.php');
}
else
{
$err = "Mauvais pseudo ou mot passe";
}
}
?>

bdd.php
<?php
try
{
$bdd = new PDO('mysql:host=127.0.0.1;dbname=zeelox', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021
3 867
Tu as bien mis le démarrage des session également dans ton fichier index.php ? (ou du moins ton header.php y est chargé également ? )

Tu peux ajouter un
print_r($_SESSION);
au début de ton fichier index.php ?

Ajoutes également la ligne :
error_reporting(E_ALL);

au début de tes pages php. cela permet d'afficher les erreurs php.

Il faudrait aussi, avant le if nb==1 que tu ajoutes un petit
 print_r($array_result);

Histoire de voire ce que te retournes ta requête. ( penses à désactiver la redirection
header('Location: index.php');
pour pouvoir le voir à l'écran. )
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019
>
Messages postés
34260
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 décembre 2021

alors j'espere avoir fait tout comme il fallait, j'ai deux messages :
-> Array ( )
-> des données sur mon compte un peu comme ca : Array ( [0] => Array ( [id] => 2 [0] =>

ca m'énerve d'être bloqué sur un simple formulaire de connexion...
Messages postés
119
Date d'inscription
samedi 30 mai 2015
Statut
Membre
Dernière intervention
8 mars 2019

Array ( [id] => [pseudo] => [password] => [lastname] => [firstname] => [mail] => [grade] => [accept_mail] => [date] => ) quand je quitte la page