2014-02-16 4 views
0

Я новичок в PHP, и у меня возникла проблема с моим сценарием входа в систему, на который я потратил часы, и не могу понять, где я ошибаюсь.Ошибка входа в систему PHP

Всякий раз, когда я пытаюсь войти в систему, меня приветствует: «Либо введенный адрес электронной почты, ни пароль не совпадают с инструкциями в файле или вы еще не активировали свою учетную запись» в соответствии с моим кодом ниже. Адрес электронной почты и пароль хранятся в базе данных и введены с использованием моего скрипта регистрации и активации, которые работают нормально, а также подключаются к моей базе данных через скрипт подключения MySQL, а также используют сценарий конфигурации.

Я действительно построил этот скрипт, основываясь на курсе, который я принимаю, который сейчас немного касается !!

Если у кого-нибудь есть совет, куда я иду не так, я был бы очень благодарен.

Большое спасибо заранее!

<?php # login.php 


    include ('./includes1/headerregistration.html'); 
    require_once ('./includes1/config.php'); 
$page_title = 'Login'; 

if (isset($_POST['submitted'])) { // Check if the form has been submitted. 
    require_once ('./mysql_connect.php'); 

    // Validate the email address. 
    if (!empty($_POST['email'])) { 
     $e = escape_data($_POST ['email']); 
    } 

    else { 
     echo '<p><font color="red"size="+1"> You forgot to enter your email address! 
     </font></p>'; 
     $e = FALSE; 
    } 

    // Validate the password. 
    if (!empty($_POST['pass'])) { 
     $p = escape_data($_POST ['pass']); 
    } 

    else { 
     $p = FALSE; 
     echo '<p><font color="red"size="+1"> You forgot to enter your password! 
     </font></p>'; 
    } 
if ($e && $p) { // If everything's OK. 
    // Query the database. 
    $query = "SELECT id, first_name FROM Jobseekers WHERE (email='$e' AND pass=SHA('$p')) AND active IS NULL"; 
    $result = mysql_query ($query) or trigger_error("Query: $query\n <br />MySQL Error: " . mysql_error()); 

if (@mysql_num_rows ($result) == 1) { // A match was made. 
     // Register the values & redirect. 
     $row = mysql_fetch_array ($result,MYSQL_NUM); 
     mysql_free_result($result); 
     mysql_close(); 
     $_SESSION['first_name'] = $row[1]; 
     $_SESSION['id'] = $row[0]; 

     // Start defining the URL. 
     $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

     // Check for a trailing slash. 
     if ((substr($url, -1) == '/') OR(substr($url, -1) == '\\')) { 
     $url = substr ($url, 0, -1); // Chop off the slash. 
     } 
     // Add the page. 
     $url .= '/indexregtest.php'; 
     ob_end_clean(); // Delete the buffer. 
     header("Location: $url"); 
     exit(); // Quit the script. 
} 
else { // No match was made. 
     echo '<p><font color="red"size="+1">Either the email address and password entered do not match those on file or you have not yet activated your account.</font></p>'; 
     } 
    } 
    else { 
     echo '<p><font color="red"size="+1">Please try again.</font></p>'; 
    } 
    mysql_close(); 
} // End of SUBMIT conditional. 
?> 

<h1>Login</h1> 
<p>Your browser must allow cookies in order to log in.</p> 
<form action="login.php"method="post"> 
    <fieldset> 
    <p><b>Email Address:</b> <input type="text" name="email" size="20" maxlength="40" value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>" /></p> 
    <p><b>Password:</b> <input type="password" name="pass" size="20" maxlength="20" /></p> 
    <div align="center"><input type="submit" name="submit" value="Login" /></div> 
    <input type="hidden" name="submitted" value="TRUE" /> 
    </fieldset> 
</form> 

<?php 
include ('./includes1/footerregistration.html'); 
?> 
+0

html теги 'font' и библиотека' mysql_ * 'устарели. Вы вообще шифруете данные при регистрации? Если это так, сравните зашифрованные значения при проверке. – julienhaversano

+0

@OP Вы уверены, что ваша база данных okey? У вас может быть двойная запись – Sanoob

+1

'И активная NULL'. Вы имели в виду 'AND active IS NOT NULL'? – Sasha

ответ

0
$result = mysql_query ($query) or trigger_error("Query: $query\n <br />MySQL Error: " . mysql_error()); 

Не делайте этого. Это не JavaScript. or и and Операторы всегда возвращаются строго true или false.

$result = mysql_query($query); 
if(!$result) trigger_error("Query: $query\n <br />MySQL Error: " . mysql_error()); 
else {...some code...} 
+0

Извините, я ошибся. Я забыл, что 'или' в PHP имеет более низкий приоритет, чем '='. Этот '$ var = somefunc (...) или somehandleerrorfunc (...)' будет работать. – Sasha

0

Я не знаю ваших databasefields, но в запросе вы просите строк, где поле «активный» устанавливается нулевое значение (.. AND active IS NULL). Вы уверены, что в активных учетных записях это поле null? Возможно, просмотрите, сколько строк вы получите по вашему запросу (echo mysql_num_rows ($result)) и проверьте, почему это не так.

+0

Ваше сомнение относительно правильности 'AND active IS NULL' очень правдоподобно. Однако его главная проблема заключается не в этом. См. Мой ответ. – Sasha

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