To moja pierwsza próba obiektowego rozwiązania rejestracji i logowania.
Chciałbym się dowiedzieć, czy działam dobrze, czy robi się to kompletnie inaczej?
if(!isset($_SESSION['zalogowano'])) {
echo '<form method="post" action="login.php">';
echo '<input type="text" name="login" placeholder="Login">';
echo '<input type="password" name="pass" placeholder="Hasło">';
echo '<input type="submit" name="zaloguj" value="Zaloguj">';
echo '</form>';
if(isset($_SESSION['l_error'])) {
echo '<pre>';
print_r($_SESSION['l_error']);
echo '</pre>';
}
echo '<br>';
echo '<a href="index.php?zar=true">Zarejestruj</a>';
echo '<br>';
if(isset($_GET['zar'])) {
echo '<form method="post" action="rejestracja.php">';
echo '<input type="text" name="login" placeholder="Login">';
echo '<input type="password" name="pass" placeholder="Hasło">';
echo '<input type="password" name="pass2" placeholder="Powtórz hasło">';
echo '<input type="email" name="email" placeholder="E-mail">';
echo '<input type="submit" name="zarejestruj" value="Zarejestruj">';
echo '</form>';
}
if(isset($_SESSION['r_error'])) {
echo '<pre>';
print_r($_SESSION['r_error']);
echo '</pre>';
}
}
plik login.php
session_start();
if(isset($_POST['zaloguj'])) {
require_once 'account.class.php';
$user = new Account;
$user->login($_POST['login'], $_POST['pass']);
header("Location: index.php");
}
i rejestracja.php
session_start();
if(isset($_POST['zarejestruj'])) {
require_once 'account.class.php';
require_once 'database.php';
$user = new Account;
$user->db($db);
$user->register($_POST['login'], $_POST['pass'], $_POST['pass2'], $_POST['email']);
header("Location: index.php");
}
no i sama klasa
class Account {
private $login, $haslo, $haslo2, $email, $kod, $data, $db, $noerror = true;
public function db($db) {
$this->db = $db;
}
public function hashPass($pass) {
$this->haslo = password_hash($pass, PASSWORD_DEFAULT);
echo $this->haslo;
}
private function checkLoginDate() {
if(empty($this->login)) {
$this->noerror = false;
$_SESSION['l_error'][1] = 'Proszę podać login';
} else {
unset($_SESSION['l_error'][1]);
}
if(empty($this->haslo)) {
$this->noerror = false;
$_SESSION['l_error'][2] = 'Proszę podać hasło';
} else {
unset($_SESSION['l_error'][2]);
}
}
private function isLogged() {
}
public function login($login, $haslo) {
$this->login = $login;
$this->haslo = $haslo;
$this->checkLoginDate();
if($this->noerror===true) {
$this->isLogged();
unset($_SESSION['l_error']);
}
}
private function checkRegisterDate() {
if(empty($this->login)) {
$this->noerror = false;
$_SESSION['r_error'][1] = 'Proszę podać login';
} else {
unset($_SESSION['r_error'][1]);
}
if(empty($this->email)) {
$this->noerror = false;
$_SESSION['r_error'][2] = 'Proszę podać e-mail';
} else {
unset($_SESSION['r_error'][2]);
}
if(empty($this->haslo)) {
$this->noerror = false;
$_SESSION['r_error'][3] = 'Proszę podać hasło';
} else {
unset($_SESSION['r_error'][3]);
}
if(empty($this->haslo2)) {
$this->noerror = false;
$_SESSION['r_error'][4] = 'Proszę powtórzyć hasło';
} else {
unset($_SESSION['r_error'][4]);
}
if($this->haslo !== $this->haslo2) {
$this->noerror = false;
$_SESSION['r_error'][5] = 'Hasła muszą być takie same';
} else {
unset($_SESSION['r_error'][5]);
}
}
private function createCode() {
$zakres = '1234567890qwertyuiopasdfghjklzxcvbnm';
$this->kod = '';
for ($i=0; $i<7; $i++)
{
$this->kod .= $zakres[mt_rand ()%(strlen($zakres))];
}
}
private function addUser() {
$this->db->query("INSERT INTO users (login, haslo, email, kod, data, aktywacja, uprawnienia) VALUES ('$this->login', '$this->haslo', '$this->email', '$this->kod', '$this->data', 1, 3)");
}
public function register($login, $haslo, $haslo2, $email) {
$this->login = $login;
$this->haslo = $haslo;
$this->haslo2 = $haslo2;
$this->email = $email;
$this->data = date('Y.m.d');
$this->checkRegisterDate();
if($this->noerror===true) {
$this->hashPass($this->haslo);
$this->createCode();
$this->addUser();
unset($_SESSION['r_error']);
}
}
}
Zaznaczam, że to nie jest skończone, np nie zajmowałem się sprawdzaniem czy istnieje użytkownik, sql injection itd, napisałem to aby zapytać, czy dobrze myślę jak to zrobić, czy mam złe podejście, i robi się to zupełnie inaczej?