Connexion.php
salut790
Messages postés
7
Statut
Membre
-
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30426 Date d'inscription Statut Modérateur Dernière intervention -
Salut à tous,
J'ai récemment commencé l'apprentissage du php et j'ai créé un espace membres.
Les membres sont inscrits dans une bdd qui possède deux tables (employes et experts)
J'ai fais un formulaire d'inscription pour les deux et elle a fonctionné vu que j'ai trouvé les infos saisies dans la bdd.
Mais ensuite pour l'authentification j'ai fait des bouton radio pour que l'utilisateur choisisse s'il veut s'inscrire en tant qu'expert ou bien en tant qu'employé. Pour l'employé ça marche mais pour l'expert ça me dit "mauvais pseudo ou mot de passe"
Je ne comprends pas du tout où est le problème vu que le code est quasiment le même selon qu'on choisisse employé ou bien expert, il n'y a que le nom de la table qui change.
Je ne sais vraiment plus quoi faire et j'aurais grandement besoin de votre aide.
Merci d'avance.
Voici ma page connexion.php
J'ai récemment commencé l'apprentissage du php et j'ai créé un espace membres.
Les membres sont inscrits dans une bdd qui possède deux tables (employes et experts)
J'ai fais un formulaire d'inscription pour les deux et elle a fonctionné vu que j'ai trouvé les infos saisies dans la bdd.
Mais ensuite pour l'authentification j'ai fait des bouton radio pour que l'utilisateur choisisse s'il veut s'inscrire en tant qu'expert ou bien en tant qu'employé. Pour l'employé ça marche mais pour l'expert ça me dit "mauvais pseudo ou mot de passe"
Je ne comprends pas du tout où est le problème vu que le code est quasiment le même selon qu'on choisisse employé ou bien expert, il n'y a que le nom de la table qui change.
Je ne sais vraiment plus quoi faire et j'aurais grandement besoin de votre aide.
Merci d'avance.
Voici ma page connexion.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1; dbname=bddsite', 'root', '');
if(isset($_POST['formconnexion']))
{
if(isset($_POST['employe']))
{
echo "ok";
$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
$mdpconnect = htmlspecialchars($_POST['mdpconnect']);
if(!empty($pseudoconnect) AND !empty($mdpconnect))
{
$requser = $bdd->prepare("SELECT * FROM employes WHERE login = ? AND pass_md5 = ?");
$requser->execute(array($pseudoconnect, $mdpconnect));
$userexiste = $requser->rowCount();
if($userexiste == 1)
{
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
header("Location: profil.php?id=". $_SESSION['id']);
}
else
{
echo "Mauvais pseudo ou mot de passe";
}
}
else
{
$erreur = "Tous les champs doivent être remplies";
}
}
if(isset($_POST['expert']))
{
echo "ok";
$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
$mdpconnect = htmlspecialchars($_POST['mdpconnect']);
if(!empty($pseudoconnect) AND !empty($mdpconnect))
{
$requser = $bdd->prepare("SELECT * FROM experts WHERE login = ? AND pass_md5 = ?");
$requser->execute(array($pseudoconnect, $mdpconnect));
$userexiste = $requser->rowCount();
if($userexiste == 1)
{
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
header("Location: profilExp.php?id=". $_SESSION['id']);
}
else
{
echo "Mauvais pseudo ou mot de passe";
}
}
else
{
$erreur = "Tous les champs doivent être remplies";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Connexion</title>
</head>
<body>
<div align="center">
<h2>Connexion</h2>
</br></br></br>
<form method="POST" action="">
<input type="text" name="pseudoconnect" placeholder="pseudo"/>
<input type="password" name="mdpconnect" placeholder="mot de passe"/>
<option>
Se connecter en tant qu'employé <input type="radio" name="employe" id="radio"/></br>
</option>
<option>
Se connecter en tant qu'expert <input type="radio" name="expert" id="radio"/>
</option>
</br>
<input type="submit" name="formconnexion" value="Se connecter"/>
<a href="inscription.php" rel="nofollow noopener noreferrer" target="_blank"> S'inscrire </a>
</form>
<?php
if(isset($erreur))
{
echo '<font color ="red">' . $erreur . '</font>';
}
?>
</body>
</html>
5 réponses
-
Bonjour salut790,
S'il n'y a que le nom de ta table qui change, ton code ne devrai avoir la condition qu'à ce niveau :
$table = ''; if(isset($_POST['employe'])) { $table = 'employes'; } else if(isset($_POST['expert'])) { $table = 'experts'; } else { exit; }-
SELECT * FROM employes WHERE login = ? AND pass_md5 = ? SELECT * FROM experts WHERE login = ? AND pass_md5 = ?
T'es lignes ici peuvent être remplacer par :SELECT * FROM $table WHERE login = ? AND pass_md5 = ?
Donc tu peux tout factoriser.
De plus, au passage, il ne faut pas utiliser le caractère « * » à moins que tu utilises tous les champs…
-
-
Bonjour,
je pense que c'est plus simple que ça, dans ta partie expert, tu appelle la table experts dans la base de données bddsite. vérifie bien que ce sont les même nom de table, et que les colonnes correspondent bien à "login" et "pass_md5". les espaces comptes donc vérifie bien que tu n'a pas mis d'espace avant ou après dans ta base de données.
ton code a fonctionner pour moi
par contre les 2 radio peuvent être sélectionné, je ne pense pas que ce soit voulue, je te conseil de leur mettre le même name, des valeurs différentes et comparer les valeurs. -
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
je pense que tu n'utilises pas correctement les boutons radios dans ton formulaire html.
pour en être certain, ajouteprint_r($_POST);
et analyse le résultat.
tu y verrais aussi plus clair si tu avais des messages plus précis:echo "Mauvais pseudo (employé ou expert?) ou mot de passe";
je te suggère d'étudier l'utilisation des boutons radio en html, par exemple ici: https://www.xul.fr/html5/bouton-radio.php -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Plusieurs choses :
Les membres sont inscrits dans une bdd qui possède deux tables (employes et experts)
Pourquoi avoir fait deux tables ???
Une seule suffit. et tu ajoutes un champ qui permet d'identifier le profil...
par exemple, une table "membres" ( id, nom, prenom, mail, pseudo, password, profil ... etc...)
Donc.. en fonction du User/password utilisé pour se connecter.. l'utilisateur sera reconnu en tant qu'expert ou employé (si son compte existe dans la bdd avec l'un des profils...)
Déjà on commence par placer le code de connexion à la bdd dans un fichier
à part qu'on aura qu'à inclure dans nos différentes pages.
AU passage... on y active la gestion des erreurs PDO (voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs )
<?php //Fichier : cnxbdd.php // connexion à la bdd try{ $bdd =new PDO('mysql:host=localhost;dbname=bddsite; charset=utf8', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Ensuite...
- en PDO.. on n'utilise pas rowCount !
Comme le dit la documentation... à la place on fera plutôt un count sur le fetchAll
- htmlspecialchars ne s'utilise que pour AFFICHER ... pas pour faire des requêtes ou l'insertion de données en bdd !
Donc voici à quoi ressemble le reste de ton code :
<?php //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); //Démarrage des sessions: session_start(); //connexion à la bdd : require_once 'cnxbdd.php'; // réupération PROPRE des variables AVANT de les utiliser $pseudoconnect = !empty($_POST['pseudoconnect']) ? $_POST['pseudoconnect'] : NULL; $mdpconnect = !empty($_POST['mdpconnect']) ? $_POST['mdpconnect'] : NULL; //traitement du submit : if(isset($_POST['formconnexion'])) { if($pseudoconnect && $mdpconnect){ $sql = "SELECT * FROM employes WHERE login = ? AND pass_md5 = ?"; $datas = array($pseudoconnect, $mdpconnect); try{ $requser = $bdd->prepare($sql); $requser->execute($datas); $resultat = $requser->fetchAll(); //on stocke les données dans un array }catch(PDOException $e) { $erreur = 'Erreur : ' . $e->getMessage(); } $nbresult = !empty($resultat) ? count($resultat) : 0 ; if($nbresult == 1){ $userinfo = $resultat[0]; $_SESSION['id'] = $userinfo['id']; $_SESSION['pseudo'] = $userinfo['pseudo']; $_SESSION['profil'] = $userinfo['profil']; $urlTogo = $userinfo['profil'] == "employe" ? "profil" : ($userinfo['profil'] == "expert" ? "profilExp" : NULL); if($urlTogo){ header("Location: profil.php"); exit(); // toujours faire un exit après une redirection }else{ $erreur = "Profil de l'utilisateur inconnu !"; } }else{ $erreur = "Mauvais pseudo ou mot de passe"; } }else{ $erreur = "Tous les champs doivent être remplies"; } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Connexion</title> </head> <body> <div align="center"> <h2>Connexion</h2> </br></br></br> <form method="POST" action=""> <input type="text" name="pseudoconnect" placeholder="pseudo"/> <input type="password" name="mdpconnect" placeholder="mot de passe"/> </br> <input type="submit" name="formconnexion" value="Se connecter"/> <a href="inscription.php" rel="nofollow noopener noreferrer" target="_blank"> S'inscrire </a> </form> <?php if(!empty($erreur)){ echo '<font color ="red">' . $erreur . '</font>'; } ?> </body> </html>
Par contre .. en regardant ton code... il semble que tu n'as pas crypté le password.
A minima tu pourrais faire du SHA1 ...
Mais désormais il est conseillé d'utiliser la fonction password_verify : https://www.php.net/manual/fr/function.password-verify.php
Comme ici par exemple :
https://forums.commentcamarche.net/forum/affich-34340900-login-password-php#7