Connexion.php
Fermé
salut790
Messages postés
7
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
20 septembre 2017
-
Modifié le 17 juin 2017 à 01:22
jordane45 Messages postés 38269 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 novembre 2024 - 18 juin 2017 à 17:24
jordane45 Messages postés 38269 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 novembre 2024 - 18 juin 2017 à 17:24
5 réponses
Felice_
Messages postés
265
Date d'inscription
mardi 25 avril 2017
Statut
Membre
Dernière intervention
20 juillet 2017
11
17 juin 2017 à 02:00
17 juin 2017 à 02:00
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 :
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; }
jumulka
Messages postés
12157
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
9 août 2024
4 564
17 juin 2017 à 02:34
17 juin 2017 à 02:34
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.
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.
salut790
Messages postés
7
Date d'inscription
mardi 13 juin 2017
Statut
Membre
Dernière intervention
20 septembre 2017
17 juin 2017 à 21:40
17 juin 2017 à 21:40
Y a vraiment personnes ?
jumulka
Messages postés
12157
Date d'inscription
vendredi 14 décembre 2012
Statut
Membre
Dernière intervention
9 août 2024
4 564
18 juin 2017 à 01:54
18 juin 2017 à 01:54
heu tu as testé tous ce qu'on ta dit ?
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
Ambassadeur
1 551
Modifié le 17 juin 2017 à 22:52
Modifié le 17 juin 2017 à 22:52
je pense que tu n'utilises pas correctement les boutons radios dans ton formulaire html.
pour en être certain, ajoute
tu y verrais aussi plus clair si tu avais des messages plus précis:
je te suggère d'étudier l'utilisation des boutons radio en html, par exemple ici: https://www.xul.fr/html5/bouton-radio.php
pour en être certain, ajoute
print_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
jordane45
Messages postés
38269
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 novembre 2024
4 695
18 juin 2017 à 17:24
18 juin 2017 à 17:24
Bonjour,
Plusieurs choses :
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 )
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 :
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
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
17 juin 2017 à 02:30
Modifié le 17 juin 2017 à 09:22
T'es lignes ici peuvent être remplacer par :
Donc tu peux tout factoriser.
De plus, au passage, il ne faut pas utiliser le caractère « * » à moins que tu utilises tous les champs…