Bonjour !
Impossible de se connecter à la bdd et AUCUN message d'erreur ce qui me laisse vraiment très perplexe.
a écrit :

?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 = Smiley langue seudo");
$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['pseudo'] = $POST['pseudo'];
// ATTENTION ! ON NE MET JAMAIS LE MOT DE PASSE EN SESSION !!
// on redirige vers l'espace membre
header('location:membre.php');
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.';
}

}
?>

Modifié par nestor94 (20 Feb 2021 - 20:58)
Modérateur
Et l'eau,

1. peux tu rééditer ton code stp (utilisation bbcode code et indentation de celui ci) ?
2. peux tu mettre sur le forum le code qui permet de se connecter à la bdd ?
3. J'ai bien vu que tu utilises error_reporting et display error. Mais est ce que tu utilises try catch et que via pdo, tu envoies tes erreurs via pdo::exception ?

edit :
Là en lisant ton code, il y a encore 2 choses qui me choquent (voir même 3) :
- include_once à remplacer par require_once
- les instructions error_reporting / display_error qui ne sont pas tout en haut du fichier
- C'est quoi ce fichier ? index.php ??
Modifié par niuxe (26 Feb 2021 - 21:27)
hello, mon script inscription est OK à présent. c'est le script de login qui ne fonctionne pas.
(c'est pour cela que j'ai créé un nouveau topic).
voici le contenu de config.php

<?php
$dbname= 'mondeideal';
$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();
}
?>


et voici le script d'authentification (login) qui ne donne rien. (rien ne se passe la page se rafraichit)

<?php
error_reporting(E_ALL);
ini_set("display-errors",1);
if( session_id()=='' )
{
session_start();
}
// connexion a la bdd
require_once 'config.php';
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>';    
        }
}
}
?>
Modérateur
1. Dans le fichier, code cette fonction :

function dd($x){
    echo '<pre>';
    print_r($x);
    echo '</pre>';
}

2. commente la ligne header("Location: page_test.html?");, et met pour le moment à la place :

//header("Location: page_test.html?");
echo '<h1>connected</h1>'; die;

Tant que ton souci n'est pas résolu, tu laisses ce bout de code. Par la même occasion, vire le "?" puisque tu n'envoies pas de querystring.

3. je ne sais pas sous quel environnement tu codes (Linux / Window / Mac) ? Là, où je veux en venir, c'est regarder les logs apache et/ou php.

4. Je n’ai pas fait attention, mais tu as une erreur (display_errors) :

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL);


5. au-dessus du isset($_POST['connexmembre']), fait ceci (et dis moi ce que ça te retourne lorsque tu soumets le <form>):

dd($_POST);

6. peux-tu mettre sur le forum, le html du formulaire de connexion stp ?
7. Si tu fais un dd($insertion), ça donne quoi ? (juste en dessous de)

$insertion = $req->fetch();
dd($insertion);

8. peux-tu mettre sur le forum, le code de la fonction password_verify($password1, $insertion['password1']) stp ?

function  password_verify($password1, $password2){
.....
}


9. présente mieux ton code stp. Parce que là, c'est un peu n'importe nawak (accolade à la ligne, indentation anarchique, etc.) Si tu ne sais pas comment présenter ton code, je te convie à regarder la PSR1 et PSR2.
Modifié par niuxe (27 Feb 2021 - 00:24)
Ca y est Niuxe, j'ai encore rebidouillé le script et cette fois il fonctionne.



<?php
if( session_id()=='' )
{
session_start();
 }
require_once 'config.php';
$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 = [langue]seudo");
		$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['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.';
			}
		} 
	} 
	}

?>
Meilleure solution