2015-11-16 4 views
-1

Здравствуйте, я новичок в PHP, и я пытаюсь сделать простую функцию регистрации и регистрации для пользователя. После регистрации пользователей его данные будут добавлены в базу данных, чтобы он мог войти в систему. Но теперь, хотя его имя пользователя & pw верны, оно не входит в систему.пароль не соответствует с md5

Вот мой код:

<?php 
if(!empty($_POST['username']) && !empty($_POST['password'])) 
{ 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = md5(mysql_real_escape_string($_POST['password'])); 

    $checklogin = mysql_query("SELECT * FROM admin WHERE Username = '".$username."' AND Password = '".$password."'"); 

    if(mysql_num_rows($checklogin) == 1) 
    { 
      $row = mysql_fetch_array($checklogin); 
      $email = $row['Email_Address']; 

      $_SESSION['Username'] = $username; 
      $_SESSION['Email_Address'] = $email; 
      $_SESSION['LoggedIn'] = 1; 

      echo "<h1>Success</h1>"; 
      echo "<p>We are now redirecting you to the member area.</p>"; 
      echo "<meta http-equiv='refresh' content='=2;index2.php' />"; 
      header("Location: Home.php"); 
    } 
    else 
    { 
      echo "<h1>Error {$password}</h1>"; 
      echo "<p>Sorry, your account could not be found. Please <a href=\"index2.php\">click here to try again</a>.</p>"; 
    } 
} 
else 
{?> 
    <h1>Member Login</h1> 
    <p>Please either login below, or <a href="register2.php">click here to register</a>.</p> 
     <form method="post" action="index2.php" name="loginform" id="loginform"> 
     <fieldset> 
       <label for="username">Username:</label><input type="text" name="username" id="username" /><br /> 
       <label for="password">Password:</label><input type="password" name="password" id="password" /><br /> 
       <input type="submit" name="login" id="login" value="Login" /> 
     </fieldset> 
     </form> 
<?php }?> 

Любая помощь приветствуется

+3

Вы не должны использовать mysql_ * функции, и вы не должны использовать md5() для паролей. У нас есть это в стороне, как вы сохраняете этих пользователей? Вы уверены, что кодируете пароли таким же образом при их хранении в базе данных? – Andrius

+0

эхо ваш запрос, например 'echo SELECT * FROM admin WHERE Username = '". $ Username. "' AND Password = '". $ Password. "'"; Die' затем запустите файл и скопируйте запрос и проверьте его в mysql ..... дайте мне знать. –

+2

Я настоятельно рекомендую прочитать «[Окончательное руководство по аутентификации веб-сайта на основе форм» (https://stackoverflow.com/questions/549/the-definitive-guide-to-form- основанный на веб-сайте). – Hexaholic

ответ

0

Как было отмечено в комментарии вы действительно должны использовать либо MySQLi или PDO ~ в mysql расширения теперь осуждается и предлагают немного с точки зрения безопасности против ужасных атак sql injection. В приведенном ниже коде используется mysqli и был протестирован с использованием как обычного текстового пароля (как показано на рисунке), так и хешированной версии md5.

Если БД хранит пароль пользователя в виде предварительно хэшируются md5 затем установите $prehashed=true

<?php 
    session_start(); 
    $errors=array(); 
    $prehashed=false; 


    if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['username'], $_POST['password'])){ 

     /* Your db connection settings: change as appropriate */ 
     $host = 'localhost'; 
     $uname = 'xxx'; 
     $pwd = 'xxx'; 
     $db  = 'xxx'; 

     /* create mysqli object */ 
     $conn = new mysqli($host, $uname, $pwd, $db); 

     /* Create and prepare the sql */ 
     $sql = 'select `username`,`email` from `admin` where `username`=? and `password`=?'; 
     $stmt = $conn->prepare($sql); 

     /* Bind the placeholders to the desired fields */ 
     $stmt->bind_param('ss', $username, $password); 

     /* Populate the variables with POST data - with some minor filtering */ 
     $username = trim(strip_tags(filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING))); 
     $password = trim(strip_tags(filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING))); 

     /* Pre-hased MD5 password? */ 
     if($prehashed) $password = md5($password); 



     /* Execute the query */ 
     $result  = $stmt->execute(); 
     $stmt->bind_result($user, $email); 


     /* If there is a match, set session vars and redirect */ 
     if($result){ 
      /* Get the records */ 
      $stmt->fetch(); 

      /* success? */ 
      if(isset($user, $email)){ 

       $_SESSION['Username'] = $user; 
       $_SESSION['Email_Address'] = $email; 
       $_SESSION['LoggedIn'] = 1; 

       $conn->close(); 

       header('location: home.php?username='.$user.'&email='.$email); 
      } else { 
       $conn->close(); 
       $errors[]='<h1>Error</h1>'; 
       $errors[]='<p>Sorry, your account could not be found. Please try again.</p>'; 
      } 

     } else { 
      /* There was some sort of error, display results below form */ 
      $conn->close(); 
      $errors[]='<h1>Error</h1>'; 
      $errors[]='<p>Sorry, your account could not be found. Please try again.</p>'; 

     } 
    } 
?> 
<!doctype html> 
<html> 
    <head> 
     <title>Member login</title> 
     <style> 
      form{ 
       width:50%; 
       float:none; 
       margin:1rem auto; 
      } 
      label{ 
       display:block; 
       width:80%; 
       float:none; 
       clear:both; 
       margin:1rem auto; 
       box-sizing:content-box; 
       padding:1rem; 
      } 
      label:before{ 
       display:inline-block; 
       clear:none; 
       float:left; 
       width:20%; 

       content:attr(for)": "; 
      } 
      label > input{ 
       clear:none; 
       float:left; 
       display:block; 
      } 
     </style> 
    </head> 
    <body> 

     <form method="post" name="loginform" enctype='application/x-www-form-urlencoded'> 
      <h1>Member Login</h1> 
      <p>Please either login below, or <a href="register2.php">click here to register</a>.</p> 
      <fieldset> 
       <label for="Username"><input type="text" name="username" id="username" /></label> 
       <label for="Password"><input type="password" name="password" id="password" /></label> 
       <input type="submit" name="login" id="login" value="Login" /> 
      </fieldset> 
      <?php 
       if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['username'], $_POST['password'])){ 
        if(!empty($errors)) echo implode(PHP_EOL, $errors); 
       } 
      ?> 
     </form> 
    </body> 
</html> 
+0

спасибо, я понимаю, мне нужно сравнить мой пароль с хешированным паролем в моей базе данных. –

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