У меня есть форма, в которой я беру имя пользователя и пароль от пользователя, и я конвертирую пароль в 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 возвращает неверную строку …