@Allanian

Как улучшить код для входа пользователя?

Здравствуйте, возник вопрос, написал форму аутентификации для сайта, работает, данные приходят из формы html, передаются в обработчик на php, обрабатываются и если проходят условия, делается редирект на основную страницу. Так можно делать и где можно его улучшить?

<?php
header('Content-Type: text/html; charset=utf-8');
require_once 'connectDB.php'; //подключеник БД
session_start();

  if ($_POST) {
    $name = strip_tags($_POST['name']);
    $pass = strip_tags($_POST['password']);	
    $stmt = $pdo->prepare("SELECT name, password FROM users WHERE name = :name");
    $stmt->execute(array(':name' => $name));
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    $hash = $result['password'];
    /*
    while ($result = $stmt->fetch(PDO::FETCH_ASSOC)){
      $passBD=$result['password'];
    }*/
    if (password_verify($pass, $hash )) {
      echo "yes";
      $_SESSION["session_username"]=$result['name'];
      header('Location: index.php');
      exit();
    } else {
      die('Access denied! <br /> <a href="login.php">to Back</a>');
    }
  }
  else {
    die('Access denied! <br /> <a href="login.php">to Back</a>');
  }	
?>


<!DOCTYPE>
<html>
<head>
<title>Ajax</title>
</head>
<body>
         <!-- form start -->
         <form method="post" role="form" id="register-form" autocomplete="off" action='handler.php'>
       <div class="form-header">
        <h3 class="form-title"><i class="fa fa-user"></i><span class="glyphicon glyphicon-user"></span> Sign Up</h3>
       <div class="pull-right">
         <h3 class="form-title"><span class="glyphicon glyphicon-pencil"></span></h3>
       </div>
       </div>        
       <div class="form-body">
          <!-- json response will be here -->
          <div id="errorDiv"></div>
          <!-- json response will be here -->		  
          <div class="form-group">
             <div class="input-group">
             <div class="input-group-addon"><span class="glyphicon glyphicon-user"></span></div>
             <input name="name" type="text" class="form-control" placeholder="Name">
             </div>
             <span class="help-block" id="error"></span>
          </div>
          <div class="row">
             <div class="form-group col-lg-6">
              <div class="input-group">
              <div class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></div>
              <input name="password" id="password" type="password" class="form-control" placeholder="Password">
              </div>  
              <span class="help-block" id="error"></span>                    
             </div>
         </div>				
        </div>
        <div class="form-footer">
           <button type="submit" class="btn btn-info" id="btn-signup">
           <span class="glyphicon glyphicon-log-in"></span> Sign Me Up !
           </button>
        </div>
            </form>
    <div class="alert alert-info">
    </div>
</body>
</html>
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 2
politon
@politon
HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
Пользователя нужно перенаправлять на ту страницу, на которой он начал логиниться, а не на главную.
Ответ написан
Улучшить можно много где.

1)
$name = strip_tags($_POST['name']);
    $pass = strip_tags($_POST['password']);

Эти строки лишние, просто пишите:
$stmt->execute(array(':name' => $_POST['name']));

2)
$stmt = $pdo->prepare("SELECT name, password FROM users WHERE name = :name");

Зачем вы достаёте из базы name? Если $_POST['name'] неверный, то запрос в любом случае не найдёт ничего.

3) Конечный закрывающий php тег (?>) рекомендуется убирать, если файл не содержит больше кода

4) Если пользователь с именем $_POST['name'] не будет найден, вот этот код
$hash = $result['password'];
сгенерирует предупреждение, т.к. $result не будет содержать password
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы