2015-03-09 2 views
-1

Я разрабатываю скрипт регистрации и входа, и я моделировал свои сценарии на основе руководства 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 

Я пробовал все способы отладки, что я могу думать или найти поиск в Интернете (не означает, что я ничего не пропустил). Я искал этот сайт и не видел ответа на мою проблему. Надеюсь, у кого-то есть ответ, потому что я действительно не знаю, куда идти отсюда. Я обошел оба сценария по строкам. Что мне не хватает?

+0

Вы случайно сохранили пароль в виде обычного текста? – castis

+0

Вы пытались повторить то, что находится в вашей базе данных в поле пароля, а также отобразить, что возвращает ваш пароль sha1 ($ password)? –

+1

Эта новая вещь называется отступом вашего кода, который все классные дети делают сейчас днями. Вы должны попробовать ti. – developerwjk

ответ

0

My oh My! Я нашел свою проблему, и ответ был неловким, если не сказать больше. Я хотел бы поделиться этим, чтобы он мог сэкономить еще несколько часов отладки. Я не предлагаю никаких оправданий относительно того, почему я это сделал, но я установил ширину столбца для «pass» на 20 вместо требуемого 40 символов для SHA1. Мне действительно не нравится падать на собственный меч, но, надеюсь, это спасет кого-то еще от агонии.

Смежные вопросы