Page 1 sur 2
problème connexion
Posté : 22 févr. 2021, 12:14
par nestor94
Bonjour,
Mon script de connexion est KO. je ne comprends pas le soucis
Undefined variable: postdat in C:\wamp64\www\connexion.php on line 22
Fatal error: Uncaught Error: Call to a member function execute() on null in C:\wamp64\www\connexion.php on line 22
Error: Call to a member function execute() on null in C:\wamp64\www\connexion.php on line 22
Code : Tout sélectionner
<?php
if( session_id()=='' )
{
session_start();
}
// connexion a la bdd
include_once 'config.php';
error_reporting(E_ALL);
ini_set("display-errors",1);
unset($_SESSION['islogged']);
unset($_SESSION['pseudo']);
// --------------
// 2- CONNEXION
$err_connexion = array();
if(isset($_POST['connexmembre']) )
{
if( !empty($_POST["pseudo"]) && !empty($_POST["password1"]) )
{
// requete : username existe ?
$pdostat = $bdd->prepare("SELECT pseudo, password1 FROM membres WHERE pseudo = :pseudo");
$pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR);
$postdat->execute(array($pseudo));
$pseudoexist = $postdat->fetchColumn();
if ($pseudoexist == 0)
{
$row = $pdostat->fetch();
// on compare le mot de passe entré avec celui enregistré en bdd
if( password_verify($_POST['password1'], $row['password1']) ) // pwd OK
{
// Mise en SESSION
$_SESSION['islogged'] = true;
$_SESSION['pseudo'] = $POST['pseudo'];
// ATTENTION ! ON NE MET JAMAIS LE MOT DE PASSE EN SESSION !!
// on redirige vers l'espace membre
header("Location: membre.php?id=".$_SESSION['id']);
exit();
} else{
$err_connexion[] = 'erreur : mot de passe : '.$_POST['password1'];
$err_connexion[] = 'Identifiant et/ou mot de passe incorrect.';
}
} else {
$err_connexion[] = 'rowCount : '.$pdostat->rowCount();
$err_connexion[] = 'erreur Identifiant : '.$_POST['pseudo'];
$err_connexion[] = 'Identifiant et/ou mot de passe incorrect.';
}
} else {
$err_connexion[] = 'Remplissez tous les champs obligatoires.';
}
}
?>
Re: problème connexion
Posté : 22 févr. 2021, 12:23
par Saian
Salut, le nom de la variable peut être ? $pdostat / $postdat
Re: problème connexion
Posté : 22 févr. 2021, 17:08
par nestor94
correction effectuée mais toujours meme message.
Re: problème connexion
Posté : 22 févr. 2021, 17:18
par or 1
il y a quoi dans config.php ?
Re: problème connexion
Posté : 22 févr. 2021, 17:47
par nestor94
Code : Tout sélectionner
<?php
# paramètres pour le hachage des mots de passe
//$password_options = [ 'algo' => PASSWORD_DEFAULT, 'options' => [ 'cost' => 12 ] ];
$dbname= 'xxxxx';
$user = 'root';
$password = '';
$host = '127.0.0.1';
try {
$bdd = new PDO('mysql:host='.$host .';dbname='.$dbname, $user, $password );
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->exec("SET CHARACTER SET utf8");
} catch (PDOException $e) {
echo "<p>Erreur : " . $e->getMessage() . "</p>";
exit();
}
?>
Re: problème connexion
Posté : 22 févr. 2021, 17:53
par or 1
correction effectuée mais toujours meme message.
ce n'est pas possible, si le nom est le bon, que le message d'erreur soit le même. il faut vérifier que le fichier corrigé correspondant bien au fichier ouvert dans le navigateur.
Re: problème connexion
Posté : 22 févr. 2021, 18:14
par nestor94
voici mon code corrigé?
Code : Tout sélectionner
<?php
if( session_id()=='' )
{
session_start();
}
// connexion a la bdd
include_once 'config.php';
error_reporting(E_ALL);
ini_set("display-errors",1);
unset($_SESSION['islogged']);
unset($_SESSION['pseudo']);
// --------------
// 2- CONNEXION
$err_connexion = array();
if(isset($_POST['connexmembre']) )
{
if( !empty($_POST["pseudo"]) && !empty($_POST["password1"]) ) {
// requete : username existe ?
$pdostat = $bdd->prepare("SELECT pseudo, password1 FROM membres WHERE pseudo = :pseudo");
$pdostat->bindvalue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT ),PDO::PARAM_STR);
$pdostat->execute(array(
'pseudo' => $pseudo,
'password1' => $password1));
$resultat = $pdostat->fetch();
// on compare le mot de passe entré avec celui enregistré en bdd
if( password_verify($_POST['password1'], $row['password1']) ) // pwd OK
{
// Mise en SESSION
$_SESSION['islogged'] = true;
$_SESSION['pseudo'] = $POST['pseudo'];
// ATTENTION ! ON NE MET JAMAIS LE MOT DE PASSE EN SESSION !!
// on redirige vers l'espace membre
header("Location: membre.php?id=" . $_SESSION['id']);
}
} else
{
$err_connexion[] = 'Identifiant et/ou mot de passe incorrect.';
}
else {
$err_connexion[] = 'Remplissez tous les champs obligatoires.';
}
}
?>
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\wamp64\www\connexion_pb.php on line 42
Re: problème connexion
Posté : 22 févr. 2021, 19:10
par nestor94
J'ai viré un else (le dernier) et maintenant j'ai:
Notice: Undefined variable: pseudo in C:\wamp64\www\connexion_pb.php on line 23
Notice: Undefined variable: password1 in C:\wamp64\www\connexion_pb.php on line 24
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\connexion_pb.php on line 24
Re: problème connexion
Posté : 22 févr. 2021, 19:22
par or 1
$pdostat->bindvalue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$pdostat->bindvalue(':password1',password_hash($_POST["password1"],PASSWORD_DEFAULT ),PDO::PARAM_STR);
$pdostat->execute(array(
'pseudo' => $pseudo,
'password1' => $password1));
il faudrait comprendre son code.
Re: problème connexion
Posté : 26 févr. 2021, 22:07
par nestor94
Désolé! J'ai remodifié le script de cette façon:
Code : Tout sélectionner
<?php
if( session_id()=='' )
{
session_start();
}
// connexion a la bdd
include_once 'config.php';
error_reporting(E_ALL);
ini_set("display-errors",1);
unset($_SESSION['islogged']);
unset($_SESSION['pseudo']);
// --------------
//Connexion
if(isset($_POST['connexmembre']) )
{
if (!empty($pseudo) && !empty($password1)) {
$pseudo = $_POST['pseudo'];
$password1 = $_POST['password1'];
$req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
$req->execute(array($pseudo));
$insertion = $req->fetch();
if ($insertion && password_verify($password1, $insertion['password1'])) {
session_start();
$_SESSION['id'] = $insertion['id'];
$_SESSION['pseudo'] = $pseudo;
header("Location: page_test.html?");
}
else {
echo '<div class="error-login">IDENTIFICATION KO !</div>';
}
}
}
?>
il ne se passe rien...
Re: problème connexion
Posté : 27 févr. 2021, 10:42
par nestor94
J'ai remodifié mon script et il fonctionne à présent, en espérant qu'il soit propre.
Code : Tout sélectionner
<?php
if( session_id()=='' )
{
session_start();
}
// connexion a la bdd
require_once 'config.php';
// --------------
// 2- CONNEXION
$err_connexion = array();
if(isset($_POST['connexmembre']) )
{
if( !empty($_POST["pseudo"]) && !empty($_POST["password1"]) )
{
// requete : username existe ?
$pdostat = $bdd->prepare("SELECT pseudo, password1 FROM membres WHERE pseudo = :pseudo");
$pdostat->bindvalue(':pseudo',$_POST['pseudo'],PDO::PARAM_STR);
$pdostat->execute();
if( $pdostat->rowCount()>0 ) // username OK
{
$row = $pdostat->fetch();
// on compare le mot de passe entré avec celui enregistré en bdd
if( password_verify($_POST['password1'], $row['password1']) ) // pwd OK
{
// Mise en SESSION
// $_SESSION['islogged'] = true;
$_SESSION['id'] = true;
$_SESSION['pseudo'] = $POST['pseudo'];
// ATTENTION ! ON NE MET JAMAIS LE MOT DE PASSE EN SESSION !!
// on redirige vers l'espace membre
header('Location:page_test.html');
exit();
} else{
$err_connexion = 'Identifiant et/ou mot de passe incorrect.';
}
}
}
}
?>
Re: problème connexion
Posté : 27 févr. 2021, 14:35
par two3d
Salut
if( session_id()=='' )
{
session_start();
}
//inutile si tu include pas cette page, tu na pas besoin de vérifier si session_start() existe:
session_start();//directement et seulement
$err_connexion = array();//créer un tableau pour ensuite afficher une chaine ne sert à rien
//fait plutôt:
$err_connexion = '';
$_SESSION['id'] = true;//je recommande de mettre l'id de ton utilisateur plutôt que "true", tu pourra le rechercher dans la base de données avec cet ID plutôt que le pseudo (les deux fonctionnent ceci dit), c'est mon avis
Re: problème connexion
Posté : 27 févr. 2021, 17:37
par nestor94
Merci Two3d pour les correctifs. Pour la session?
Re: [RESOLU] problème connexion
Posté : 27 févr. 2021, 18:53
par two3d
$id ? par magie ??

non il te faut d'abord le "SELECT" dans ta requête pour ensuite l'avoir dans ton tableau $row pui ça sera quelque chose comme session = $row['nom de l'id']
info supplémentaire: le exit peut être utilisé sans "()" si tu met rien à l'intérieur:
exit();
devient:
exit;
Re: [RESOLU] problème connexion
Posté : 27 févr. 2021, 22:05
par nestor94
C'est cohérent cela?
Code : Tout sélectionner
// Récupération de l'utilisateur pour mise en session
$req = $bdd->prepare('SELECT id FROM membres WHERE pseudo = :pseudo');
$req->execute(array(
'pseudo' => $pseudo));
$resultat = $req->fetch();
if (!$resultat)
{
echo 'PROBLEME PSEUDO !';
}
else
{
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
header('Location:membre.php');
exit();