2015-09-14 3 views
-1

Я пытаюсь создать систему входа в свой проект, но я не знаю, как проверить, правильно ли введен пароль.PHP- Login system

login.php

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
require_once("guest.php"); 
require_once("db.php"); 

$error = ""; 

global $tf_handle; 
$gb = new guest(); 

if(isset($_POST['login'])) 
{ 

    $u_email = mysqli_real_escape_string($tf_handle, $_POST['email']); 

    $u_password = mysqli_real_escape_string($tf_handle, $_POST['password']); 

    $check = $gb->email_exist($tf_handle,$u_email); // check if email exist in database 

    if($check) // if true 
    { 
    //check if the password is right 
    $chpassword = mysqli_query($tf_handle,"SELECT * FROM `users` WHERE `email` = '$u_email' AND `password` = '$u_password'"); 

    if($chpassword) 
    { 
     $error = "Thanks for loggin , you will be redirected..."; 
     header("refresh:3;url=index.php");  
    } 
    else 
    { 
     $error = "Email Doesn't Exist"; 
    } 

    } 
    else 
    { 

    $error = "Wrong information"; 

    } 
} 

?> 

<!doctype html> 
<html> 
    <head> 
    <title>Login Page</title> 
    <link rel="stylesheet" href="css/styles.css" /> 

    </head> 
    <body> 
    <div id="error" style="<?php if ($error !=""){?> display:block;<?php }?>"><?php echo $error;?></div> 
     <div id="wrapper"> 

     <div id="menu"> 
      <a href="Registration.php">Sign Up</a> 
      <a href="Login.php">Login</a> 
     </div> 
     <div id="formDiv"> 

      <form method="POST" action="Login.php"> 
       <label>Email:</label><br/> 
       <input type="text" name="email" class="inputFields" required /><br/><br/> 

       <label>Password:</label><br/> 
       <input type="password" name="password" class="inputFields" required /><br/><br/> 

       <input type="checkbox" name="keep" /> 
       <label>Keep me logged in</label><br/><br/> 


       <input type="submit" name="login" class="theButtons" value="Login!" /> 
      </form> 

     </div> 

     </div> 

    </body> 
</html> 

guest.php

<?php 

require_once('db.php'); 
class guest 
{ 

function email_exist($email,$con) 
{ 
    $result = mysqli_query($con,"SELECT * FROM `users` WHERE `email` = '$email'"); 
    if(mysqli_num_rows($result) == 1) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

}

Проблема заключается в строке ниже:

$chpassword = mysqli_query($tf_handle,"SELECT * FROM `users` WHERE `email` = '$u_email' AND `password` = '$u_password'"); 

или функции email_exist()

Это делает мой вход в систему, даже если пароль неверен.

+0

Вы действительно должны использовать РНР [встроенные функции] (http://jayblanchard.net/proper_password_hashing_with_PHP.html) в защитите пароли. Если вы используете версию PHP менее 5.5, вы можете использовать 'password_hash()' [пакет совместимости] (https://github.com/ircmaxell/password_compat). –

+1

[Ваш скрипт подвержен риску инъекций SQL.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) Узнайте о [подготовленном] (http: //en.wikipedia.org/wiki/Prepared_statement) [утверждения] (http://php.net/manual/en/pdo.prepared-statements.php). –

ответ

0

Вы использовали заявление if(). Вы просто объявляете переменную $chpassword и тем самым вызываете SQL-запрос. Это преуспевает, поэтому условие истинно. Он действительно не проверяет, совпадает ли это с паролем из базы данных.

Take a look here

Вы хотели бы что-то вроде этого:

$query = mysql_query("select * from login where password='$password' 
    AND username='$username'", $connection); 
$rows = mysql_num_rows($query); 
if ($rows == 1) { 
    ... 
} 
+0

Нет !! я попробовал, но это не проблема. Вы можете проверить функцию email_exist со мной. – smile

+0

Вы используете и неправильные. Посмотрите на операторы. Вы не должны использовать один '=', поскольку это просто говорит, если запрос преуспел. Он не получает никаких данных и не делает никакой проверки. –

+0

Ловкая фатальная ошибка: объект класса mysqli не может быть преобразован в строку в/var/www/html/guest/guest.php в строке 77, я получаю эту ошибку в этой строке $ result = mysqli_query ($ con, "SELECT FROM users WHERE email = '$ email'") – smile

0

Согласно man page, mysqli_query будет возвращать результат, даже если нет ни одной строки, вам нужно сделать что-то вроде следующего:

$chpassword = mysqli_query($tf_handle,"SELECT * FROM `users` WHERE `email` = '$u_email' AND `password` = '$u_password'"); 

if($chpassword->num_rows > 0) { 
     /* do your login stuff */ 
} else { 
    /* do not logged in stuff */ 
} 

Также как примечание стороны, я бы не хранил пароли в виде обычного текста, я бы использовал что-то вроде hash_pbkdf2 для хранения паролей в зашифрованном виде.

+0

Ловкая фатальная ошибка: объект класса mysqli не может быть преобразован в строку в /var/www/html/guest/guest.php в строке 77, я получаю эту ошибку сейчас в этой строке $ result = mysqli_query ($ con, «SELECT FROM users WHERE email = '$ email'"); – smile

+0

Вы можете проверить функцию электронной почты сначала, пожалуйста? :) – smile

+0

Не похоже, что вы устанавливаете $ tf_handle, вам нужно что-то вроде: $ tf_handle = mysqli_connect (......). Я предполагаю, что вы устанавливаете его в db.php, но это может быть проблемой. Также вы должны использовать bind_param как @Linesofcode, чтобы вы не были уязвимы для SQL-инъекций. – Severun

0

Создайте класс, который будет обрабатывать это для вас. Вы пишете слишком много кода.

class users 
{ 
    private $mysqli; 

    public function __construct() 
    { 
     $this->mysqli = new mysqli('localhost', 'root', '', 'yourDatabase'); 
     $this->mysqli->set_charset("utf8"); 
    } 

    public function isLoginValid($email, $password) 
    { 
     $query = $this->mysqli->prepare("SELECT email 
             FROM users 
             WHERE email = ? AND password = ?"); 
     $query->bind_param("ss", $email, $password); 
     $query->execute(); 
     $query->store_result(); 

     return ($query->num_rows >= 1 ? TRUE : FALSE); 
    } 
} 

Теперь единственное, что вам нужно сделать, это вызвать класс и функцию. Если (и я надеюсь, что так) используются файлы для разделения классов сделать следующее:

require_once('users.php'); 

$user = new users(); 

if($user->isLoginValid('[email protected]', '123456') == FALSE) 
{ 
    echo 'Hold on, there was a problem..'; 
    return; 
} 

/* 
* 1. Set the session 
* 2. Set the cookie 
* 3. Redirect the user 
*/ 
+0

Спасибо, но мне нужно добавить строки в мой класс, чтобы быть лучше ... мне нужно от помощи по моему коду – smile

+0

мы можем сделать чат? – smile