как обрабатывать ошибки в форме Использование класса pdo - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в php, в будущем стану супер-кодером :) Я пытаюсь узнать, как использовать классы, я скачал пользовательский класс, используя его:

loginform.php - > login.php -> validate.php -> user.class.php 

Мне нужно создать 3 страницы, чтобы войти в систему. Таким образом, я легко изменил это в login.php. Но я не могу обрабатывать ошибки в форме, ошибки, отображаемые на пустой странице, я хочу показать ошибки принадлежат входному значению. Я знаю, как обрабатывать их в запросах, но не могу понять, как обрабатывать их с помощью функций.

пример:

   <input type="text" name="username" id="username" class="form-control">
   <span class="help-block">Errors here</span>

Вот мой php-код в login.php:

    require_once 'class/user.php';
    require_once 'config.php';


if($_SERVER["REQUEST_METHOD"] == "POST"){

    $email = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_EMAIL);
    $password = filter_input(INPUT_POST, 'password', FILTER_DEFAULT);

Проверить, если имя пользователя пусто

if(empty(trim($_POST["username"]))){
    $username_err = 'Please enter username.';
} else{
    $username = trim($_POST["username"]);
}

Проверить, если пароль пуст

if(empty(trim($_POST['password']))){
    $password_err = 'Please enter your password.';
} else{
    $password = trim($_POST['password']);
}

Проверка учетных данных

  if(empty($username_err) && empty($password_err)){

Использование функций, вызов функции входа в систему

if($user->login($email, $password)) {
    header("location: user.php");
} else {
    $user->printMsg();
    die;
}
}

}

И Hmtl часть в login.php

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
    <div class="form-group">
        <label>Password</label><label>Username</label>
        <input type="text" name="username" id="username" class="form-control">
        <span class="help-block">Errors Here</span>
    </div>    
    <div class="form-group">
        <label>Password</label>
        <input type="password" name="password" class="form-control">
        <span class="help-block">Errors Here</span>
    </div>
    <div class="form-group">
        <input type="submit" name="submit" class="btn btn-primary" value="submit">
    </div>
    <p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
</form>

Мой user.class.php

class User{
    /** @var object $pdo Copy of PDO connection */
    private $pdo;
    /** @var object of the logged in user */
    private $user;
    /** @var string error msg */
    private $msg;
    /** @var int number of permitted wrong login attemps */
    private $permitedAttemps = 5;

    /**
    * Connection init function
    * @param string $conString DB connection string.
    * @param string $user DB user.
    * @param string $pass DB password.
    *
    * @return bool Returns connection success.
    */
    public function dbConnect($conString, $user, $pass){
        if(session_status() === PHP_SESSION_ACTIVE){
            try {
                $pdo = new PDO($conString, $user, $pass);
                $this->pdo = $pdo;
                return true;
            }catch(PDOException $e) { 
                $this->msg = 'Connection did not work out!';
                return false;
            }
        }else{
            $this->msg = 'Session did not start.';
            return false;
        }
    }

    /**
    * Return the logged in user.
    * @return user array data
    */
    public function getUser(){
        return $this->user;
    }

    /**
    * Login function
    * @param string $email User email.
    * @param string $password User password.
    *
    * @return bool Returns login success.
    */
    public function login($email,$password){
        if(is_null($this->pdo)){
            $this->msg = 'Connection did not work out!';
            return false;
        }else{
            $pdo = $this->pdo;
            $stmt = $pdo->prepare('SELECT id, fname, lname, email, wrong_logins, password, user_role FROM users WHERE email = ? and confirmed = 1 limit 1');
            $stmt->execute([$email]);
            $user = $stmt->fetch();

            if(password_verify($password,$user['password'])){
                if($user['wrong_logins'] <= $this->permitedAttemps){
                    $this->user = $user;
                    session_regenerate_id();
                    $_SESSION['user']['id'] = $user['id'];
                    $_SESSION['user']['fname'] = $user['fname'];
                    $_SESSION['user']['lname'] = $user['lname'];
                    $_SESSION['user']['email'] = $user['email'];
                    $_SESSION['user']['user_role'] = $user['user_role'];
                    return true;
                }else{
                    $this->msg = 'This user account is blocked, please contact our support department.';
                    return false;
                }
            }else{
                $this->registerWrongLoginAttemp($email);
                $this->msg = 'Invalid login information or the account is not activated.';
                return false;
            } 
        }
    }
}

Вот мой connect.php

session_start();
define('conString', 'mysql:host=localhost;dbname=test2');
define('dbUser', 'root');
define('dbPass', '');


define('userfile', 'user.php');
define('loginfile', 'validate.php');
define('activatefile', 'activate.php');
define('registerfile', 'register.php');


//template files
define('indexHead', 'themes/indexhead.htm');
define('indexTop', 'themes/indextop.htm');
define('loginForm', 'themes/loginform.php');
define('activationForm', 'themes/activationform.php');
define('indexMiddle', 'themes/indexmiddle.htm');
define('registerForm', 'themes/registerform.php');
define('indexFooter', 'themes/indexfooter.htm');
define('userPage', 'themes/userpage.php');

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$user = new User();
$user->dbConnect(conString, dbUser, dbPass);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...