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?

Code : Tout sélectionner

$_SESSION['id'] = $id;

Re: [RESOLU] problème connexion

Posté : 27 févr. 2021, 18:53
par two3d
$id ? par magie ?? :mrgreen: 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();