md5 récupération de mot de passe
j'ai fait un formulaire d'inscription et un formulaire de connexion.
j'ai utilisé d'abord utilisé trim()
et puis md5()
pour stocker le mot de passe dans la base de données.
j'ai utilisé le même pour vérifier le mot de passe dans la base de données dans le formulaire de connexion, mais pour une raison inconnue, je ne peux pas correspondre au mot de passe md5 à partir du formulaire de connexion.
Tout ce que je veux, c'est récupérer le mot de passe de la base de données.
Le problème est quand je le stocker dans la base de données et vérifier dans le php myadmin le md5 du mot de passe est quelque chose comme 123456789
et quand je reprends l'avais dans le formulaire de connexion, il me donne cette 1234567890
. un zéro à la fin tht zéro est la création du problème sinon, tout le md5 du mot de passe est mis en correspondance. mon classement de base de données est latin_1_swedish_ci
.
est-il un classement problème ?
je hv utilisé valeur varchar 255 texte etc. mais pas de solution.
est-il un problème dans le format ou la structure ?
merci de m'aider à récupérer le mot de passe md5 correctement éliminer les indésirables zéro .
function login()
{
if(isset($_POST['login']))
{
if(!$_POST['username'] || !$_POST['password'])
{die (mysql_error());}
else
{
$username = trim($_POST['username']);
$username = addslashes($_POST['username']);
$password = trim($_POST['password']);
$password = md5($_POST['password']);
echo $password;
$check_username = mysql_query("SELECT * FROM users WHERE username = '".$username."'")or die(mysql_error());
$check_username2 = mysql_num_rows($check_username);
if ($check_username2 == 0)
{die ("Username and password doesnt exist");}
else
{
$check_pass = mysql_query("SELECT * FROM users WHERE username = '".$password."'")or die(mysql_error());
$check_pass2 = mysql_num_rows($check_pass);
echo $check_pass2;
}
}
}
}
et
function register()
{
if(isset($_POST['submit']))
{
if(!$_POST['first_name'] || !$_POST['last_name'] || !$_POST['username'] || !$_POST['password'])
{header ("Location:user_registration.php");}
else
{
$firstname = trim($_POST['first_name']);
$firstname = addslashes($_POST['first_name']);
$lastname = trim($_POST['last_name']);
$lastname = addslashes($_POST['last_name']);
$username = trim($_POST['username']);
$username = addslashes($_POST['username']);
$password = trim($_POST['password']);
$password = md5($_POST['password']);
connect();
if($mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username' "))
{
$check_row = mysql_num_rows($mysql_check_user);
if($check_row > 0)
die ("username Exist");
else
{
$store = mysql_query
("INSERT INTO `project_upload`.`users`
(`id`, `fname`, `lname`, `username`, `password`)
VALUES (NULL, '$firstname', '$lastname', '$username', '$password')");
}
if ($store)
{echo "You have regstered succesfully. please go to <a href = 'uploads_login.php'>login page</a>"; }
else {echo mysql_error();}
}
}
}
}
- Pourquoi sur la Terre avez-vous utilisé
trim()
sur un mot de passe? - Pourriez-vous s'il vous plaît poster le code que vous utilisez pour la récupération et le stockage des mots de passe?
- Êtes-vous sûr que le zéro sort à partir de la base de données et n'est pas repris par d'autre chose dans votre code?
- Si c'est juste un Zéro, pourquoi ne pas le couper et match ?
- Sans les exemples de code, nous ne pouvons que deviner ce qui ne va pas, plutôt que de fournir une solution à votre problème. Pourriez-vous poster une partie de votre code avec la question?
- Le
trim()
résultat se jette pas, donc ce n'est pas le problème. La deuxièmeSELECT
déclaration danslogin()
est à la recherche d'un utilisateur dont le nom estmd5($_POST['password'])
, ce qui semble mauvais pour moi. Aussi, MD5 ne retourne jamais un 9 ou 10 caractères chaîne de caractères. En bref - c'est impossible de voir ce qui se passe ici... - "récupérer le mot de passe de la base de données" n'est pas une bonne façon de décrire ce que vous faites. Juste pour dire.
- Le problème, c'est votre mysql-query, vérifier ma réponse.
Vous devez vous connecter pour publier un commentaire.
Le problème que vous rencontrez que je peux voir, c'est que vous dans le début du code pour se connecter à quelque chose comme:
echo $password;
et quelques lignes après que vous avezecho $check_pass_2;
qui aurait pour résultat une chaîne de caractères pour le navigateur à la recherche comme un 0 est-il par la suite. C'est parce que$check_pass_2
a juste un décompte du nombre de lignes a été renvoyé de votre requête mysql, c'est 0 car il n'y a pas d'utilisateur avec le même nom d'utilisateur comme mot de passe. Si votre problème réel est le mysql-query, il vérifie si il y a un utilisateur avec le même nom d'utilisateur que le mot de passe de quelqu'un est entré, ce qui est étrange. Essayez de changer votre dernière requête en login.php pour:Avis que
username = '".$password."'
a été changé pourpassword = '".$password."'
.Deuxièmement, vous devez comprendre que si vous faites quelque chose comme:
Puis l' $pass variable sera juste md5 avais sans avoir la garniture effets sur elle, pour atteindre ce que vous devez faire:
Mais vous ne devriez pas couper vos mots de passe car c'est juste étrange et gênant, il n'a pas vraiment d'ajouter quoi que ce soit.
La ligne, où vous faire:
Que si l'instruction est superflue, puisque vous êtes juste de faire une mission, vous pouvez supprimer le si et laissez la variable tel qu'il est. C'est à dire:
Aussi, essayez de garder une sorte de style de codage, cela le rend beaucoup plus facile à lire votre code. La plupart des éditeurs de code ont cette fonctionnalité par défaut, vous devrez peut-être appuyer sur la touche TAB sur chaque retour à la ligne pour indenter correctement, c'est un énorme aider à bien le faire. Exemple de la façon dont il pourrait ressembler:
En fait il n'y a pas d'option pour décrypter le MD5 caractères. Si vous voulez comparer, vous devez convertir l'entrée en MD5 de la chaîne, alors vous pouvez facilement comparer avec les valeurs stockées dans la bd.