У меня есть форма регистрации, которая создает профиль и страницу «Редактировать профиль», которая позволяет пользователю изменять информацию до тех пор, пока они также вводят свой пароль.При проверке пароля он заботится только о первых 8 символах
Проблема заключается в том, что страница «Редактировать профиль» обеспечивает только совпадение первых 8 символов пароля. Или, на самом деле, я думаю, лучшее описание будет заключаться в том, что функция crypt() кодирует только первые 8 символов.
Вот мой код для формы регистрации:
$password = $_REQUEST['password'];
// Checks to make sure that the password isn't blank
if (!$password) {
handle_error("You have left the password field blank.", "Blank Password");
//handle_error() is a custom function
}
А вот мой код для вставки этого в базу данных MySQL:
$insert_sql = sprintf("INSERT INTO users (first_name, last_name, pen_name, website, password, email, user_bio, user_reason, hash, profile_pic) " .
"VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');",
mysql_real_escape_string($first_name),
mysql_real_escape_string($last_name),
mysql_real_escape_string($pen_name),
mysql_real_escape_string($website),
mysql_real_escape_string(crypt($password, $email)),
mysql_real_escape_string($email),
mysql_real_escape_string($bio),
mysql_real_escape_string($reason),
mysql_real_escape_string($hash),
mysql_real_escape_string($upload_filename));
Цель «хэш» переменной не имеет никакого отношения к паролю, поэтому игнорируйте это.
И вот код для кода «Редактировать профиль».
$password_query = "SELECT * FROM users WHERE user_id = " . $user_id;
$password_query_run = mysql_query($password_query);
$password_array = mysql_fetch_array($password_query_run);
$password_old_hash = $password_array['password'];
$password_new_hash = crypt($password, $email);
if(!($password_new_hash === $password_old_hash)) {
handle_error("The Password you entered does match what we have in our system.","Wrong Password.");
}
Я относительно новым для PHP, но я пишу все, что код сам, так что если кто-то нуждается в каких-либо разъяснений, я с удовольствием объясниться.
Как я уже сказал, проблема в том, что на моих страницах беспокоятся только первые 8 символов пароля. Когда я пытаюсь проверить «Редактировать профиль» с неправильным паролем, он дает ошибку. Если оставить пароль пустым, это приведет к ошибке. Но если я правильно набираю первые 8 символов, а затем кучу тарабарщины, он принимает пароль! Я не уверен, есть ли какая-то функция crypt() или строк, которые я не получаю.
О, и я делаю (! ($ String1 === $ string2)), но я попробовал функцию strcomp() и работал аналогичным образом.
Большое спасибо!
Вы пробовали печатать строки, чтобы вы знали, появилось ли всего 8 символов? Также каков тип поля пароля? –
PHP предоставляет функцию специально для хэширования паролей: password_hash() –
http://stackoverflow.com/a/29778421/ –