كيفاش تصاوب php framework خاصة بك وتصاوب بها blog الجزء الرابع


فهاد الجزء الرابع من كيفاش تصاوب php framework خاصة بك وتصاوب بها blog غادي نكملوا الملفات لي بقاونا غادي نشوفو الجزء الخاص بالمستخدمين ولي كيمكنهم باش يتسجلو فل blog ديالنا و من بعد يديروا la connexion أو la déconnexion.

نظرة سريعة بالفيديو

1- الملف about-us.php

ف views زيد ملف جديد سميه about-us.php فيه غادي يكون الكود لي كي afficher title و description لي جاونا من fonction about لي شفنا فل controller Pages.php الكود ديال الملف هو :

                                <?php require APPROOT.'/views/includes/header.php';?>
    <div class="jumbotron jumbotron-fluid mt-4">
        <div class="container">
            <h1 class="display-3"><?php echo $data['title'];?></h1>
            <p class="lead"><?php echo $data['description'];?></p>
            <hr class="my-2">
            <p class="lead">
                <a class="btn btn-primary btn-lg" href="Jumbo action link" role="button">Voir plus</a>
            </p>
        </div>
    </div>
<?php require APPROOT.'/views/includes/footer.php';?>
                            

2- الملف models/User.php

كنرجع ل  dossier app  فيه كنزيد dossier جديد سميه models فيه زيد ملف جديد User.php ولي عبارة عن class فل constructeur كندير la connexion مع la base de données منبعد عندي ل fonction getUserByEmail لي كتحقق واش ل email لي دخل المستخدم كاين منبعد كاين register لي كتمكن من إضافة مستخدم جديد فقاعدة البيانات منبعد مكتستقبل لمعلومات ف data array منبعد عندي login لي كتكونيكطي مستخدم من بعد مكتحقق من لامايل وmot de passe منبعد عندي createSessions لي كت créer session فيها les infos ديال لمستخدم لي مكونيكطي منبعد كاين getUserById لي كتبحث على مستخدم باستعمال ل id ديالو الكود ديال الملف هو:

                                <?php
/*
* user model
*/

class User{
   private $db;

   public function __construct(){
       $this->db = new Database();
   }
   //check if user with email already exists
   public function getUserByEmail($email){
        $this->db->query("SELECT * FROM users WHERE email = :email");
        $this->db->bind(':email',$email);
        $row = $this->db->getSingle();
        //check if row is greater than one
        if($this->db->countResults() > 0){
            return true;
        }else{
            return false;
        }
   }
   //register user
   public function register($data){
        //prepare query
        $this->db->query("INSERT INTO users (fullname,email,password) VALUES (:fullname,:email,:password)");
        //bind values
        $this->db->bind(':fullname',$data['fullname']);
        $this->db->bind(':email',$data['email']);
        $this->db->bind(':password',$data['password']);
        //check if registration succeded
        if($this->db->execute()){
            return true;
        }else{
            return false;
        }
   }
   //login user
   public function login($email,$password){
       //check if user email exists
       $this->db->query("SELECT * FROM users WHERE email = :email");
       //bind values
       $this->db->bind(':email',$email);
       //get user
       $row = $this->db->getSingle();
       //get password
       $crypted_password = $row->password;
       //check if passwords matches
       if(password_verify($password,$crypted_password)){
            return $row;
       }else{
            return false;
       }
   }
   //create user sessions
   public function createSessions($user){
        $_SESSION['user_id'] = $user->id;
        $_SESSION['user_name'] = $user->name;
        $_SESSION['user_email'] = $user->email;
        redirect('posts/index');
   }
   //get user by id
   public function getUserById($id){
        $this->db->query("SELECT * FROM users WHERE id = :id");
        $this->db->bind(':id',$id);
        $row = $this->db->getSingle();
        //check if row is greater than one
        if($this->db->countResults() > 0){
            return $row;
        }else{
            return false;
        }
   }
}
                            

3- الملف controllers/Users.php

كنرجع ل dossier controllers فيه كنزيد ملف جديد سميه Users.php فل constructeur كنسترجع ل model لي زدنا من قبل لي هو User.php منبعد فل fonction register كنتحقق واش كاين submit ديال لفورم يلا كان كنسترجع les valeurs لي دخل المستخدم فلفورم وكنزيدهم ف data array منبعد كنتحقق بلي حتى شي حقل ماخاوي ويلا كان شي واحد خاوي او قل من عدد الحروف المطلوبة كنزيد des erreurs de validation ف data array يلا كان كلشي عامر كنرسل data array لل fonction register ديال ل model User لي شفنا قبل ويلا نجحت الإضافة كنعرض رسالة نجاح باستعمال ل fonction alert لي كنا شفنا فالأجزاء السابقة وكنوجه المستخدم للصفحة ديال لكونيكسيون  ويلا مكنش submit ديال لفورم فكنوجه المستخدم للملف لي فيه الفورم ديال التسجيل منبعد عندي login لي كتكونيكطي المستخدم ولي كتحقق بنفس الطريقة لي شفنا ف register فقط هنا كنتحقق واش ل email كاين بل fonction getUserByEmail لي زدنا فل model User منبعد يلا كان كنصيفط ل email ول mot de passe لل fonction login ديال ل model User ويلا نجحت الكونيكسيون كنصيفط ل user لي جاني من login لل fonction createSessions باش كيتزاد ف session الكود ديال الملف هو :

                                <?php


class Users extends Controller{
    public function __construct(){
        $this->userModel = $this->model('user');
    }
    public function register(){
        //sinitize post data
        $_POST = filter_input_array(INPUT_POST,FILTER_SANITIZE_STRING);
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $data = array(
                'fullname' => trim($_POST['fullname']),
                'email' => trim($_POST['email']),
                'password' => trim($_POST['password']),
                'fullname_err' => '',
                'email_err' => '',
                'password_err' => '',
            );
            //check if name is empty
            if(empty($data['fullname'])){
                $data['fullname_err'] = 'Veuillez entrer votre nom & prénom';
            }
            //check if email is empty
            if(empty($data['email'])){
                $data['email_err'] = 'Veuillez entrer votre email';
            }elseif($this->userModel->getUserByEmail($data['email']) == true){
                //check if email already in use
                $data['email_err'] = 'Email déja utilisé';
            }
            //check if password is empty
            if(empty($data['password'])){
                $data['password_err'] = 'Veuillez entrer votre mot de passe';
            }elseif(strlen($data['password']) < 6){
                $data['password_err'] = 'Le mot de passe doit avoir au moins 6 caractéres';
            }
            //if all fields are filled
            if(empty($data['fullname_err']) && empty($data['email_err']) && empty($data['password_err'])){
                //crypt password
                $data['password'] = password_hash( $data['password'],PASSWORD_BCRYPT);
                //register user
                if($this->userModel->register($data) == true){
                    alert('register_with_success','Compte crée vous pouvez vous connecter');
                    redirect('users/login');
                }else{
                    die('Erreur veuillez réessayer plutard');
                }
            }else{
                $this->view('users/register',$data); 
            }

        }else{
            $data = array(
                'fullname' => '',
                'email' => '',
                'password' => '',
                'fullname_err' => '',
                'email_err' => '',
                'password_err' => '',
            );
            //load view
            $this->view('users/register',$data);
        }
    }
    public function login(){
        //sinitize post data
        $_POST = filter_input_array(INPUT_POST,FILTER_SANITIZE_STRING);
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $data = array(
                'email' => trim($_POST['email']),
                'password' => trim($_POST['password']),
                'email_err' => '',
                'password_err' => '',
            );
            //check if email is empty
            if(empty($data['email'])){
                $data['email_err'] = 'Veuillez entrer votre email';
            }
            //check if password is empty
            if(empty($data['password'])){
                $data['password_err'] = 'Veuillez entrer votre mot de passe';
            }elseif(strlen($data['password']) < 6){
                $data['password_err'] = 'Le mot de passe doit avoir au moins 6 caractéres';
            }
            //check if user exists
            if($this->userModel->getUserByEmail($data['email']) == true){
                
            }else{
                //user not exists
                $data['email_err'] = 'Email incorrect';
            }
            //if all fields are filled
            if(empty($data['email_err']) && empty($data['password_err'])){
                $logged = $this->userModel->login($data['email'],$data['password']);
                if($logged){
                    //create sessions
                    $this->userModel->createSessions($logged);
                }else{
                    alert('login_failed','Email ou mot de passe est incorrect','alert alert-danger');
                    redirect('users/login');
                }
            }else{
                $this->view('users/login',$data); 
            }
        }else{
            $data = array(
                'email' => '',
                'password' => '',
                'email_err' => '',
                'password_err' => '',
            );
            //load view
            $this->view('users/login',$data);
        }
    }
    //logout user
    public function logout(){
        unset($_SESSION['user_id']);
        unset($_SESSION['user_name']);
        unset($_SESSION['user_email']);
        session_destroy();
        redirect('users/login');
    }
}
                            

4- الملف views/users/register.php

ف views زيد dossier جديد سميه users  فيه زيد ملف جديد سميه register.php فيه غادي تكون لفورم لي كتمكن المستخدمين من التسجيل فالفورم كن afficher les erreurs de validations لي مسجلين فل data array في حالة ماكان شي champ vide وأيضا كنزيد is-invalid لي هي bootstrap class لي كتزيد border حمر للحقل لي فيه erreur de validation منبعد م المعلومات كتمشي ل fonction register ديال ل contrôleur Users.php لي شفنا قبل الكود ديال الملف هو : 

                                    <?php require APPROOT.'/views/includes/header.php';?>
    <div class="row">
        <div class="col-md-6 mx-auto mt-4">
            <div class="card text-black bg-light">
                <div class="card-body">
                    <h4 class="card-title">Inscription</h4>
                    <hr>
                    <p class="card-text text-info">Veuillez remplir tous les champs*</p>
                    <form method="post" action="<?php echo BASEURL;?>/users/register">
                        <div class="form-group row">
                            <label for="name" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="text" class="form-control <?php echo (!empty($data['fullname_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['fullname'];?>" name="fullname" id="fullname" placeholder="Nom & Prénom">
                                <span class="invalid-feedback">
                                    <?php echo $data['fullname_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="email" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="email" class="form-control <?php echo (!empty($data['email_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['email'];?>" name="email" id="email" placeholder="E-mail">
                                <span class="invalid-feedback">
                                    <?php echo $data['email_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="password" class="form-control <?php echo (!empty($data['password_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['password'];?>" name="password" id="password" placeholder="Mot de passe">
                                <span class="invalid-feedback">
                                    <?php echo $data['password_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <button type="submit" class="btn btn-primary">Valider</button>
                            </div>
                        </div>
                    </form>
                    <div class="row">
                        <div class="col-sm-6">
                            <a href="<?php echo BASEURL;?>/users/login" class="btn btn-link">Déja membre connectez vous</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
<?php require APPROOT.'/views/includes/footer.php';?>
                                

5- الملف views/users/login.php

دائما ف users  فيه زيد ملف جديد سميه login.php فيه غادي تكون لفورم لي كتمكن المستخدمين من ل connexion فكندير la validation بنفس الطريقة لي شفت فالملف لي قبل  منبعد م المعلومات كتمشي ل fonction login ديال ل contrôleur Users.php لي شفنا قبل الكود ديال الملف هو : 

                                    <?php require APPROOT.'/views/includes/header.php';?>
    <div class="row">
        <div class="col-md-6 mx-auto mt-4">
            <?php echo alert('register_with_success');?>
            <?php echo alert('login_failed');?>
            <div class="card text-black bg-light">
                <div class="card-body">
                    <h4 class="card-title">Connexion</h4>
                    <hr>
                    <p class="card-text text-info">Veuillez remplir tous les champs*</p>
                    <form method="post" action="<?php echo BASEURL;?>/users/login">
                        <div class="form-group row">
                            <label for="email" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="email" class="form-control <?php echo (!empty($data['email_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['email'];?>" name="email" id="email" placeholder="E-mail">
                                <span class="invalid-feedback">
                                    <?php echo $data['email_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="password" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="password" class="form-control <?php echo (!empty($data['password_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['password'];?>" name="password" id="password" placeholder="Mot de passe">
                                <span class="invalid-feedback">
                                    <?php echo $data['password_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <button type="submit" class="btn btn-primary">Valider</button>
                            </div>
                        </div>
                    </form>
                    <div class="row">
                        <div class="col-sm-6">
                            <a href="<?php echo BASEURL;?>/users/register" class="btn btn-link">Nouveau utilisateur inscrivez vous</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
<?php require APPROOT.'/views/includes/footer.php';?>
                                


بحث في الموقع


إشترك للتوصل بالجديد