восстановление пароля md5 - PullRequest
0 голосов
/ 03 января 2012

я сделал регистрационную форму и форму входа.

Сначала я использовал trim(), а затем md5() для хранения пароля в базе данных.

Я использовал то же самое для проверки пароля в базе данных в форме входа в систему, но по какой-то неизвестной причине я не могу сопоставить пароль md5 из формы входа в систему.

Все, что я хочу, это восстановить пароль из базы данных.

Проблема в том, что когда я сохраняю его в базе данных и проверяю его в php myadmin, пароль md5 выглядит примерно так: 123456789, и когда я отображаю его в форме входа, он дает мне 1234567890. ноль в конце, ноль создает проблему, в противном случае весь пароль md5 совпадает. моя сортировка базы данных latin_1_swedish_ci.

есть ли проблемы с сопоставлением?

Я использовал varchar-значение 255, затем текст и т. Д., Но не нашел решения.

есть ли проблема в формате или структуре?

, пожалуйста, помогите мне правильно восстановить пароль md5, удаляя нежелательный ноль.

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;
                    }


            }
        }
    }

и

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();}

                        }
                }
        }
    }

Ответы [ 2 ]

4 голосов
/ 03 января 2012

Проблема, с которой я столкнулся, заключается в том, что у вас в начале кода для входа есть что-то вроде: echo $password; и через несколько строк вы получите echo $check_pass_2;, что приведет к строкебраузер, похожий на 0, появится позже.Это потому, что $check_pass_2 просто подсчитывает, сколько строк было возвращено из вашего запроса MySQL, это 0, поскольку нет пользователя с таким же именем пользователя, как пароль.Таким образом, ваша настоящая проблема - это mysql-запрос, он проверяет, есть ли пользователь с тем же именем пользователя, что и введенный пароль, что странно.Попробуйте изменить свой последний запрос в login.php на:

 $check_pass = mysql_query("SELECT * FROM users WHERE password = '".$password."'") 
 or die(mysql_error());

Обратите внимание, что username = '".$password."' было изменено на password = '".$password."'.Во-вторых, вы должны понимать, что если вы делаете что-то вроде:

$pass = trim($_POST['pass']);
$pass = md5($_POST['pass']);

, тогда переменная $ pass будет просто md5'd без эффектов обрезки, для достижения этой цели вы должны сделать:

$pass = trim($_POST['pass']);
$pass = md5($pass);

Но вы не должны урезать свои пароли, поскольку это просто странно и неудобно, на самом деле это ничего не добавляет.

Строка, где вы делаете это:

if($mysql_check_user 
   = mysql_query("SELECT * FROM  `users` WHERE  `username` LIKE  '$username' "))

Это if-выражение является излишним, так как вы просто делаете присваивание, вы можете удалить if и просто оставить переменную такой, какая она есть.Т.е.:

$mysql_check_user = mysql_query("SELECT * FROM `users` WHERE `username` LIKE '$username'");

Кроме того, старайтесь придерживаться какого-то стиля при кодировании, это значительно облегчает чтение вашего кода.Большинство редакторов кода имеют эту функцию по умолчанию, возможно, вам нужно нажимать клавишу TAB на каждой новой строке, чтобы правильно сделать отступ, хотя это очень помогает.Пример того, как это может выглядеть:

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();
            }
        }
    }
}
2 голосов
/ 03 января 2012

На самом деле нет возможности расшифровать символы MD5.Если вы хотите сравнить, вы должны преобразовать ввод в строку MD5, тогда вы можете легко сравнить с сохраненными значениями в дБ.

...