[RESOLU] problème connexion

Eléphant du PHP | 345 Messages

22 févr. 2021, 12:14

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.'; } } ?>

Avatar du membre
Mammouth du PHP | 1609 Messages

22 févr. 2021, 12:23

Salut, le nom de la variable peut être ? $pdostat / $postdat
Développeur web depuis + de 20 ans

Eléphant du PHP | 345 Messages

22 févr. 2021, 17:08

correction effectuée mais toujours meme message.

Mammouth du PHP | 2703 Messages

22 févr. 2021, 17:18

il y a quoi dans config.php ?

Eléphant du PHP | 345 Messages

22 févr. 2021, 17:47

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(); } ?>

Mammouth du PHP | 2703 Messages

22 févr. 2021, 17:53

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.

Eléphant du PHP | 345 Messages

22 févr. 2021, 18:14

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

Eléphant du PHP | 345 Messages

22 févr. 2021, 19:10

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

Mammouth du PHP | 2703 Messages

22 févr. 2021, 19:22

$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.

Eléphant du PHP | 345 Messages

26 févr. 2021, 22:07

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...

Eléphant du PHP | 345 Messages

27 févr. 2021, 10:42

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.'; } } } } ?>

Avatar du membre
Mammouth du PHP | 1564 Messages

27 févr. 2021, 14:35

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

Eléphant du PHP | 345 Messages

27 févr. 2021, 17:37

Merci Two3d pour les correctifs. Pour la session?

Code : Tout sélectionner

$_SESSION['id'] = $id;

Avatar du membre
Mammouth du PHP | 1564 Messages

27 févr. 2021, 18:53

$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;

Eléphant du PHP | 345 Messages

27 févr. 2021, 22:05

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();