site ecommerce php mvc & pdo الجزء السابع
فهاد الجزء السابع من site ecommerce php mvc & pdo غادي نزيدو système ديال login و logout غادي نزيدو ل controller الخاص بل users لي فيه ل fonctions ديال التسجيل وتسجيل الدخول ومنبعد غادي نزيدو الفورم لي غادي تمكنا من تفعيل login و logout.
نظرة سريعة بالفيديو
1- إضافة ل User model
ف dossier models غادي تزيد fichier جديد سميه User.php لي فيه les fonctions :
- login لي مسؤولة على استقبال ل username لي به غادي يدخل المستخدم.
- createUser لي كتمكن المستخدم من التسجيل منبعد مكتستقبل المعلومات الخاصة به وكتزيدها فقاعدة البيانات.
الكود ديال الملف هو :
<?php
class User{
static public function login($data){
$username = $data["username"];
try {
$query = "SELECT * FROM users WHERE username = :username";
$stmt = DB::connect()->prepare($query);
$stmt->execute(array(":username"=>$username));
$user = $stmt->fetch(PDO::FETCH_OBJ);
return $user;
} catch (PDOException $ex) {
echo "error : ".$ex.getMessage();
}
}
static public function createUser($data){
$stmt = DB::connect()->prepare('INSERT INTO users (fullname
,username,email,password)
VALUES (:fullname,:username,:email,:password)');
$stmt->bindParam(':fullname',$data['fullname']);
$stmt->bindParam(':username',$data['username']);
$stmt->bindParam(':email',$data['email']);
$stmt->bindParam(':password',$data['password']);
if($stmt->execute()){
return 'ok';
}else{
return 'error';
}
$stmt->close();
$stmt = null;
}
}
2- إضافة ل UsersController
ف dossier controllers غادي تزيد fichier جديد سميه UsersController.php لي فيه les fonctions :
- auth لي غادي ترسل المعلومات الخاصة بالمستخدم لي جات من الفورم ديال login لل fonction login لي زدنا فل model User يلا كانت المعلومات صحيحة غادي نزيدوه ف session مكانتش غادي نعرضوا رسالة تنبيه أن المعلومات ماشي صحيحة.
- register لي كنسجل بها مستخدم جديد أول حاجة كن crypter ل mot de passe وكنرسل المعلومات لي جاوني من الفورم register ل fonction createUser لي زدنا فل model User.
- logout لي كتمكن المستخدم باش ي déconnecta.
الكود ديال الملف هو :
<?php
class UsersController{
public function auth(){
if(isset($_POST["submit"])){
$data["username"] = $_POST["username"];
$result = User::login($data);
if($result->username === $_POST["username"] && password_verify($_POST["password"],$result->password)){
$_SESSION["logged"] = true;
$_SESSION["username"] = $result->username;
$_SESSION["fullname"] = $result->fullname;
$_SESSION["admin"] = $result->admin;
Redirect::to("home");
}else{
Session::set("error","Pseudo ou mot de passe est incorrect");
Redirect::to("login");
}
}
}
public function register(){
$options = [
"cost" => 12
];
$password = password_hash($_POST["password"],PASSWORD_BCRYPT,$options);
$data = array(
"fullname" => $_POST["fullname"],
"username" => $_POST["username"],
"email" => $_POST["email"],
"password" => $password,
);
$result = User::createUser($data);
if($result === "ok"){
Session::set("success","Compte crée");
Redirect::to("login");
}else{
echo $result;
}
}
public function logout(){
session_destroy();
}
}
3- إضافة الملف register.php
منبعد ف dossier views غادي تزيد fichier جديد سميه register.php لي غادي تكون فيها الفورم ديال التسجيل أول حاجة كنتحقق واش المستخدم conncecté يلا كان كنصيفطو للصفحة الرئيسية.
مكانش منبعد مكيضغط على زر الإضافة كنفذ ل fonction register لي كتاخذ المعلومات وكتزيدها فقاعدة البيانات.
الكود ديال الملف هو :
<?php
if(isset($_SESSION["logged"]) && $_SESSION["logged"] === true){
Redirect::to("home");
}
if(isset($_POST["submit"])){
$createUser = new UsersController();
$createUser->register();
}
?>
<div class="container">
<div class="row my-4">
<div class="col-md-6 mx-auto">
<div class="card">
<div class="card-header">
<h3 class="card-title">
Inscription
</h3>
</div>
<div class="card-body">
<form method="post" class="mr-1">
<div class="form-group">
<input type="text"
class="form-control"
name="fullname" required autocomplete="off" placeholder="Nom & Prénom" id="">
</div>
<div class="form-group">
<input type="text" autocomplete="off" class="form-control" name="username"
placeholder="Pseudo" id="">
</div>
<div class="form-group">
<input type="email" autocomplete="off" class="form-control" name="email"
placeholder="Email" id="">
</div>
<div class="form-group">
<input type="password" autocomplete="off" class="form-control" name="password"
placeholder="Mot de passe" id="">
</div>
<div class="form-group">
<button name="submit" class="btn btn-primary">
Inscription
</button>
</div>
</form>
</div>
<div class="card-footer">
<a href="<?php echo BASE_URL;?>login" class="btn btn-link">
Connexion
</a>
</div>
</div>
</div>
</div>
</div>
4- إضافة الملف login.php
دائما ف dossier views غادي تزيد fichier جديد سميه login.php لي غادي تكون فيها الفورم ديال تسجيل الدخول أول حاجة كنتحقق واش المستخدم connecté يلا كان كنصيفطو للصفحة الرئيسية.
مكانش منبعد مكيضغط على زر تسجيل الدخول كنفذ ل fonction login لي كتاخذ المعلومات وكتحقق واش كاينة فقاعدة البيانات.
الكود ديال الملف هو :
<?php
if(isset($_SESSION["logged"]) && $_SESSION["logged"] === true){
Redirect::to("home");
}
$loginUser = new UsersController();
$loginUser->auth();
?>
<div class="container">
<div class="row my-4">
<div class="col-md-6 mx-auto">
<div class="card">
<div class="card-header">
<h3 class="card-title">
Connexion
</h3>
</div>
<div class="card-body">
<form method="post" class="mr-1">
<div class="form-group">
<input autocomplete="off" type="text" class="form-control" name="username"
placeholder="Pseudo" id="">
</div>
<div class="form-group">
<input autocomplete="off" type="password" class="form-control" name="password"
placeholder="Mot de passe" id="">
</div>
<div class="form-group">
<button name="submit" class="btn btn-primary">
Connexion
</button>
</div>
</form>
</div>
<div class="card-footer">
<a href="<?php echo BASE_URL;?>register" class="btn btn-link">
Inscription
</a>
</div>
</div>
</div>
</div>
</div>
5- إضافة الملف logout.php
دائما ف views زيد fichier جديد سميه logout.php لي فيه الكود لي غادي يمكن المستخدم باش ي déconnecta ولي كينفذ ل fonction logout لي سبق وزدنا فل UsersController وبهذا كنكونوا سالينا مع login 👍
الكود ديال الملف هو :
<?php
$user = new UsersController();
$user->logout();
Redirect::to("home");