Я разрабатываю скрипт регистрации и входа, и я моделировал свои сценарии на основе руководства quickpro Ларри Уллана (вместе с руководством по php и другими ссылками). Мой скрипт регистрации работает хорошо, но я столкнулся с проблемой, когда я попробую сценарий входа в систему. Я делаю запрос к БД, как, например:Ошибка входа в систему вызывает ошибку несоответствия
$q = "SELECT user_id, first_name FROM registration WHERE email='$ue' AND pass=SHA1('$p')";
Я получаю сообщение об ошибке:
The email address and password entered do not match those on file
Если удалить AND pass=SHA1('$p')
как этот
$q = "SELECT user_id, first_name FROM registration WHERE email='$ue'";
Сценарий направляет меня на зарегистрированную страницу, как следует.
Я уже переписывал скрипт регистрации и скрипт функции входа в систему, пытаясь найти отключение, и я просто не вижу его. Вот отрывок из моей регистрации сценария:
//Check for a password and match against the confirmed password:
if (!empty($_POST['pass1'])) {
if ($_POST['pass1'] != $_POST['pass2']) {
$errors[] = 'Your password did not match the confirmed password.';
}else{
$p = mysqli_real_escape_string($dbc, trim($_POST['pass1']));
}
}else{
$errors[] = 'You forgot to enter your password.';
}
//////////////////////////////////////////////////// password parameters
if(strlen($p) < 8) {
$errors[]= "Password too short! ";
}
if(strlen($p) > 15) {
$errors[]= "Password too long! ";
}
if(!preg_match("#[0-9]+#", $p) {
$errors[]= "Password must include at least one number! ";
}
if(!preg_match("#[a-z]+#", $p)) {
$errors[]= "Password must include at least one letter! ";
}
if(!preg_match("#[A-Z]+#", $p)) {
$errors[]= "Password must include at least one CAPS! ";
}
if(!preg_match("#\W+#", $p)) {
$errors[]= "Password must include at least one symbol! ";
}
////////////////////////////////////////////////////
А вот мой код функции Логин сценария:
function check_login($dbc, $email ='', $pass='') {
$errors = array(); // Initialize error array.
//validate email
if (empty($email)) {
$errors[]='You forgot to enter your email address.';
}else{
$ue = mysqli_real_escape_string($dbc, trim($email));
}
//validate password
if (empty($pass)) {
$errors[]='You forgot to enter your password.';
}else{
$p = mysqli_real_escape_string($dbc, trim($pass));
}
if (empty($errors)) { // if passed validation
//call to DB at beginning of login script
//retrieve user id and first name for that email/password combo
$q = "SELECT user_id, first_name FROM registration WHERE email='$ue' AND pass=SHA1('$p')";
$r = mysqli_query ($dbc, $q);
//check results
if (mysqli_num_rows($r) == 1) {
//fetch the record
$row = mysqli_fetch_array ($r, MYSQLI_ASSOC);
return array(true, $row);
}else{ // not a match
$errors[]= 'The email address and password entered do not match those on file';
}
} // End of empty ($errors) IF
//return false and the errors:
return array(false, $errors);
} //End of check_login() function
Я пробовал все способы отладки, что я могу думать или найти поиск в Интернете (не означает, что я ничего не пропустил). Я искал этот сайт и не видел ответа на мою проблему. Надеюсь, у кого-то есть ответ, потому что я действительно не знаю, куда идти отсюда. Я обошел оба сценария по строкам. Что мне не хватает?
Вы случайно сохранили пароль в виде обычного текста? – castis
Вы пытались повторить то, что находится в вашей базе данных в поле пароля, а также отобразить, что возвращает ваш пароль sha1 ($ password)? –
Эта новая вещь называется отступом вашего кода, который все классные дети делают сейчас днями. Вы должны попробовать ti. – developerwjk