#24 Kit
Děkuji ti mockrát za rady.
Jen se tě ještě zeptám ma jednu věc.
Momentálně mam systém napsaný tak, že mam složku, kde jsou třídy a dělají vkládání do DB a připojují se k db, vypisují hodnoty apod. a pak mam klasické soubory u indexu, kde mam třeba funkce jako isset po kliknutí. Dám sem zase příklad.
User.php
class User extends Database {
public function createNewUser($username, $password, $email) {
$hashed_password = $this->hash($password, ['cost' => 12]);
$query = "INSERT INTO users (username,password,email,role) VALUES('$username','$hashed_password','$email','guest')";
$result = $this->run($query);
return $result;
}
public function hash($password, array $options = []) {
if (isset($options['cost']) && ($options['cost'] < 4 || $options['cost'] > 31)) {
throw "Cost must be in range 4-31, $options[cost] given.";
}
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
if ($hash === FALSE || strlen($hash) < 60) {
throw 'Hash computed by password_hash is invalid.';
}
return $hash;
}
public function checkUsernameExist($username) {
$query = $this->run("SELECT username FROM users WHERE username = '$username'");
$result = mysqli_num_rows($query);
if($result > 0) {
return FALSE;
}
return TRUE;
}
public function checkEmailExist($email) {
$query = $this->run("SELECT email FROM users WHERE email = '$email'");
$result = mysqli_num_rows($query);
if ($result > 0) {
return FALSE;
}
return TRUE;
}
public function login($username, $password) {
$query = $this->run("SELECT * FROM users WHERE username = '$username'");
$result = mysqli_fetch_array($query);
$count = mysqli_num_rows($query);
if ($count == 1) {
if(password_verify($password, $result['password'])) {
$_SESSION['id'] = $result['id'];
$_SESSION['username'] = $result['username'];
$_SESSION['email'] = $result['email'];
$_SESSION['role'] = $result['role'];
return TRUE;
} else {
echo "<center><p>Nesprávné heslo.</p></center>";
}
} else {
echo "<center><p>Nesprávné uživatelské jméno.</p></center>";
}
}
public function is_loggin() {
if(isset($_SESSION['username'])) {
return TRUE;
} else {
return FALSE;
}
}
public function redirect($url) {
header("location: index.php");
}
public function logout() {
session_unset();
session_destroy();
header('Location:'.$url->diradmin.'login.php');
return true;
}
public function passwordVerify($id,$password){
$query = $this->run("SELECT * FROM users WHERE id = '$id'");
$result = mysqli_fetch_array($query);
if(password_verify($password, $result['password'])) {
return TRUE;
} else {
return FALSE;
}
}
public function changePassword($id,$newPassword) {
$hashed_password = $this->hash($newPassword, ['cost' => 12]);
$hash = $this->run("UPDATE users SET password = '$hashed_password' WHERE id = '$id'");
return $hash;
}
}
A pak mam soubory, kde to vkládám jako funkce přes objekty.
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/CMS/vendor/autoload.php';
session_start();
$url = new url;
$formValid = new Security;
$user= new User;
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scal=1">
<meta name="description" content="">
<meta name="author" content="">
<title>| Anywhere.cz</title>
<link rel="stylesheet" href="../admin/css/admin.css">
<script src="../admin/js/tinymce/tinymce.js"></script>
<script src="../admin/js/tinymce/init-tinymce.js"></script>
</head>
<body>
<div id="main" class="layout-column-main">
<div class="admin-bar clearfix">
<a class="logo-wrapper" href="<?php echo $url->diradmin; ?>admin.php" title="Anywhere System"><span class="logo-system"></span></a>
<ul class="admin-bar-ul">
<li class="admin-bar-list-li">
<a href="login.php" class="admin-bar-list-inside">Přihlášení</a>
</li>
<li class="admin-bar-list-li">
<a href="register.php" class="admin-bar-list-inside">Registrace</a>
</li>
<li class="admin-bar-list-li">
<a class="admin-bar-list-inside" href="<?php echo $url->dir; ?>index.php">Hlávní stránka</a>
</li>
</ul>
</div>
<div class="flex-column">
<?php include_once 'templates/content.php'; ?>
<?php
if(isset($_POST['login'])) {
$username = $formValid->validForm($_POST['username']);
$password = $formValid->validForm($_POST['password']);
$user = $user->login($username, $password);
if($user) {
header('location:'.$url->diradmin.'admin.php');
}
}
?>
<form class="form_align" method="post" action="">
<input class="input-login-reg" type="text" name="username" placeholder=" Uživatelské jméno" required />
<input class="input-login-reg" type="password" name="password" placeholder=" Zadejte vaše heslo" required />
<button class="btn-login-reg" type="submit" name="login">Přihlásit se</button>
</form>
<?php include_once 'templates/footer.php'; ?>
Je tento postup správný ? Nebo to jde nějak ještě lépe, aby i v budoucnu jsem měl kód přehlednější a upravenější. Jinak toho MySQLi si nevšímej, ještě to musim předělat :D
Díky moc