преобразовать в md5 неправильно в php

У меня есть форма, в которой я беру имя пользователя и пароль от пользователя, и я конвертирую пароль в md5. Затем я вставляю его в базу данных. В форме входа в систему я беру пароль и конвертирую его в md5. Затем я сравниваю оба пароля. Он соответствует некоторому условию, но не работает, если пароль = p@$$w0rd . В чем проблема ? И каково решение этой проблемы?

От моей формы к паролю базы данных p@$$w0rd до md5 находится b7463760284fd06773ac2a48e29b0acf а из формы входа – e22bb24ca616331cb92a48b712034bc3

Код из регистрационной формы

 $password = trim($_POST['password']); $dpassword = md5($password); 

И из формы входа $passwd = md5($password);

 $sql = mysql_query("select * from create_dealer where (dealer_email='$user' && password='$passwd')"); 

Проблема связана с кавычками.

 echo md5('p@$$w0rd');// echoes b7463760284fd06773ac2a48e29b0acf echo md5("p@$$w0rd");// echoes e22bb24ca616331cb92a48b712034bc3 

Когда вы используете двойные кавычки, $w0rd рассматривается как неопределенная переменная и заменяется пустой строкой.

 echo md5("p@$");// echoes e22bb24ca616331cb92a48b712034bc3 

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

Вы также можете просто удалить вызов md5 для тестирования и посмотреть, соответствуют ли простые текстовые пароли, я уверен, что нет. Возможно, именно ваш SQL возвращает неверную строку …