Я новичок в 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);