php connexion
- Accueil
- Forum
- Programmation
- PHP
- php connexion
nanou Le 10 février 2018 à 23:02 (Édité le 25 janvier 2019 à 17:54)
mais je bloque depuis des heures à une partie de la connexion, j'ai essayé de suivre tout ce que primfx faisait pour toujours être au même niveau en enlevant juste les données que je n'avais pas besoin comme le mail ou le pseudo (C'est dans le cahier des charges, je dois mettre qu'un mot de passe). Mais au bout d'un moment, lorsqu'il faut appuyer sur le bouton et qu'il met "veuillez saisir du texte" ça ne marche pas, je me suis dis que ce n'était pas une étape forcément très importante donc je l'ai passé mais tout le reste ne marche pas non plus et je bloque dessus depuis un long moment donc si jamais quelqu'un a une solution...
PrimFX Le 10 février 2018 à 23:34 (Édité le 1 janvier 1970 à 01:00)
Pourrais-tu nous envoyer ton code dans un prochain message à l'aide du bouton prévu à cet effet dans l'éditeur du forum (histoire que le code apparaisse bien formaté et coloré) ainsi que quelques captures d'écran de ta base de données (ou du moins des tables de ta bdd qui sont en rapport avec le soucis que tu rencontres) ?
Cela nous permettrait de mieux cerner le problème pour y trouver une solution 😉
nanou Le 11 février 2018 à 11:30 (Édité le 1 janvier 1970 à 01:00)
<?php
$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', 'root');
if (isset($_POST['formco']))
{
$mdpconnect = sha1($_POST['mdpconnect']);
if (!empty($mdpconnect))
{
}
else
{
$erreur = "Saisir le mot de passe";
}
}
?>
<html>
<head>
<title>IHM login</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="index.css">
</head>
<body>
<div class="barre">
<a href="http://www.lycee-branly.fr/" target="_blank">
<img src="http://image-parcours.copainsdavant.com/image/750/1688574933/4193568.jpg" alt="BRANLY" width="15%" height="75%" border="0"/>
</a>
</div>
<div align="center">
<br /><br /><br />
<div class="login">
<form method="POST" action="">
<div class="txt">
<table>
<tr>
<td><font color="#fff">Mot de passe : </font></td>
</tr>
<tr>
<td>
<input type="password" placeholder=" Mot de passe" name="mdpconnect">
</td>
<br /><br />
<td>
<input type="submit" value="Connection" name="formco">
</td>
</table>
</div>
</form>
<?php
if (isset($erreur))
{
echo $erreur;
}
?>
</div>
</div>
</body>
nanou Le 11 février 2018 à 11:36 (Édité le 1 janvier 1970 à 01:00)
PrimFX Le 11 février 2018 à 12:48 (Édité le 1 janvier 1970 à 01:00)
Dans le cas de ton code en fait, il faut prendre un truc en compte : as-tu besoin d'un seul mot de passe valide pour accéder au site ? ou bien tu peux utiliser un nombre limité de mots de passe (comme 3, 4, 5 ou 6) ou bien ton code doit obligatoirement être lié à une base de données pour tenter de se connecter avec un des mots de passe disponibles dans ta table "membres" ?
Cela permettra de savoir si tu as effectivement besoin de passer obligatoirement par une base de données ou non (d'ailleurs est-ce que l'utilisation d'une bdd est obligatoire dans le cahier des charges de ton projet ?). Je m'explique : passer par une bdd est toujours une bonne solution quand il s'agit de récupérer des informations propres à un membre (qu'on identifiera généralement par un couple identifiant / mot de passe où l'identifiant peut par exemple être un pseudo unique ou bien son adresse mail). Dans le cas où tu as juste besoin d'un mot de passe, tu pourrais faire la vérification sans passer par une base de données mais juste en vérifiant si le mot de passe une fois haché correspond bien à celui indiqué dans ta condition directement dans le script PHP 😉
nanou Le 11 février 2018 à 13:11 (Édité le 1 janvier 1970 à 01:00)
Comme j'avais juste besoin de créer une page de connexion qui nous emmène au site principal j'avais commencé par regardé ta deuxième vidéo mais comme j'étais bloqué je me suis dis que j'allais créer une page d'inscription ou il n'y aurait que le mot de passe à mettre et ensuite j'allais supprimer la page une fois que le compte aurait été créé (tu dois peut être te dire que c'était inutile mais étant donné que la connexion ne marchait pas je pensais que tout les détails étaient fautifs y compris le fait que le mot de passe n'était pas en "sha1") au moins maintenant j'ai le mot de passe mieux protégé mais bon ça n'a pas arrangé mon problème. Tout à l'heure j'ai réessayé sur la page de connexion et j'ai l'impression que le problème vient du "else" ou du "!empty" y a toujours des problèmes sur ça.
PrimFX Le 11 février 2018 à 14:12 (Édité le 11 février 2018 à 15:13)
<?php
$bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', 'root');if (isset($_POST['formco'])) {
if (!empty($_POST['mdpconnect']))
{
$mdpconnect = sha1($_POST['mdpconnect']);
// On tente de récupérer le champ de la bdd où le mot de passe (déjà en sha1 dans la bdd) correspond bien au mot
// de passe entré dans le champ du formulaire
$req = $bdd->prepare('SELECT * FROM membre WHERE motdepasse = ?');
$req->execute(array($mdpconnect));
if ($req->rowCount()) // On effectue un rowCount() qui permet de voir si un (ou plusieurs) champ a bien été trouvé ou non avec ce mot de passe
{
// Ici le mot de passe est valide, tu peux donc effectuer ce que tu veux pour connecter l'utilisateur, comme créer une variable de session spécifique par exemple
}
else
{
// Si le rowCount() retourne 0, il est considéré comme false et donc cela signifie qu'aucun champ n'a été trouvé avec le mot de passe indiqué
$erreur = "Le mot de passe saisi est invalide";
}
}
else
{
$erreur = "Saisir le mot de passe";
}
?>
A noter que j'ai ici modifié dans ton traitement la vérification avec le !empty(). En effet, !empty() te permettra de vérifier si une chaîne contient bien quelque chose. Le problème est que lorsque tu fais un sha1() sur une chaîne de caractères même vide, sha1() te renverra toujours une chaîne de caractères de 32 bits (il me semble, en tout cas jamais une chaîne vide). Si tu veux vérifier que l'utilisateur a donc bien renseigné un mot de passe dans ton formulaire, tu seras donc obligé de faire un !empty() directement sur la variable poste et seulement ensuite de le hacher en sha1() (comme dans mon exemple ci-dessus).
Le fait de mettre le mot de passe en sha1 n'est pas censé changer quelque chose au fonctionnement du traitement, du moment que les mots de passe sont hachés de la même façon dans ta bdd. Par exemple si dans ta bdd tu insères un mot de passe du style "1234" sans hachage (en clair), tu pourras utiliser le même traitement sauf que $mdoconnect sera directement égal à ta variable POST, sans passer par du sha1. Dans le cas contraire, si tu utilises dans ton script de traitement du sha1, alors il faudra que le ou les mots de passe insérés dans ta bdd aient été auparavant hachés en sha1. D'ailleurs si jamais tu veux hacher une chaîne de caractères pour l'insérer comme mot de passe en sha1 dans ta bdd tu peux juste faire un mini script du style :
<?php echo sha1("tonmotdepasse"); ?>
Et tu auras ensuite juste à insérer l'affichage du echo dans ta table "membre", au lieu d'avoir à passer par tout un formulaire d'inscription.
Cela dit les mots de passe en clair sont normalement entièrement à bannir dans une bdd, en sha1 c'est très limite actuellement avec tous les dictionnaires de dé-hachage qui existent, bref la meilleure solution reste d'utiliser les fonctions password_hash et password_verify de PHP qui sont à ce jour très bien sécurisées. Cela dit tu es ici dans le cadre d'un TP de cours, possible donc que le fait que tes mots de passe soient en clair ou hachés de quelconque façon n'ait aucun impact... 😋
Voilà, en espérant avoir pu t'aider, dis-moi si c'est bien ce que tu voulais mettre en place 😉
nanou Le 11 février 2018 à 14:26 (Édité le 1 janvier 1970 à 01:00)
PrimFX Le 11 février 2018 à 14:34 (Édité le 1 janvier 1970 à 01:00)
PS : J'ai déplacé ton topic dans "Programmation" > "PHP" qui est plus approprié 😉
nanou Le 11 février 2018 à 15:11 (Édité le 1 janvier 1970 à 01:00)
Ca m'embête vraiment de te demander de m'aider dans tout ça je te prie de m'excuser..
PrimFX Le 11 février 2018 à 15:16 (Édité le 1 janvier 1970 à 01:00)
Pour le problème d'accolades, vérifie tous tes "if", "elseif" et "else", il doit y avoir une accolade qui manque quelque part 😉
Pour l'autre bug avec le $this->db c'est de ma faute, j'ai tapé mon message trop vite avec l'habitude de l'Orienté Objet. J'ai édité mon message plus haut, il faut que tu rempalces $this->db par $bdd
nanou Le 11 février 2018 à 15:22 (Édité le 1 janvier 1970 à 01:00)