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


فهاد الجزء الخامس من كيفاش تصاوب php framework خاصة بك وتصاوب بها blog  غادي نشوفوا الملفات الخاصين ب les posts ديالنا غادي نشوفو كيفاش يمكن للمستخدم يزيد des articles ومن بعد نعطيوه الإمكانية ديال تعديلها أو حدفها.

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

1- إضافة قاعدة البيانات

فأول حاجة ولي نسيت مدرتهاش فالأجزاء السابقة هي نزيد قاعدة بيانات جديدة فزيدها وسميها blog وفيها زيد 2 tables وحدة users وثانية posts الكود باش تزيد les tables هو :

                                --
-- Structure de la table `posts`
--

CREATE TABLE `posts` (
  `id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Structure de la table `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `fullname` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Index pour la table `posts`
--
ALTER TABLE `posts`
  ADD PRIMARY KEY (`id`);

--
-- Index pour la table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT pour les tables déchargées
--

--
-- AUTO_INCREMENT pour la table `posts`
--
ALTER TABLE `posts`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;

--
-- AUTO_INCREMENT pour la table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
                            

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

منبعد ف models زيد ملف جديد سميه Post.php فيه غادي يكون عندي الكود لي كيمكن من استرجاع les posts كاملين من قاعدة البيانات باستعمال ل fonction getPosts منبعد عندي addPost لي كتزيد post جديد ونفس الكود شفناه فالجزء الخاص بإضافة مستخدمين جداد منبعد كاين getSinglePost لي كترجع post باستعمال ل id ديالو منبعد عندي editPost لي كتدير تعديل ل post من بعد مكتستقبل ل id ديالو ولمعلومات الجديدة ف data array منبعد كاين deletePost لي كتمسح post باستعمال ل id ديالو الكود ديال الملف هو :

                                <?php
/*
* post model
*/

class Post{
   private $db;


   public function __construct(){
       $this->db = new Database();
   }
   public function getPosts(){
       $this->db->query("SELECT 
                            *,
                            posts.id as postId,
                            users.id as userId,
                            posts.created as postCreated,
                            users.created as userCreated
                            FROM posts
                            INNER JOIN users 
                            ON posts.user_id = users.id
                            ORDER BY posts.created DESC 
                        ");
       return $this->db->results();
   }
   public function addPost($data){
        //prepare query
        $this->db->query("INSERT INTO posts (user_id,title,body) VALUES (:user_id,:title,:body)");
        //bind values
        $this->db->bind(':user_id',$data['user_id']);
        $this->db->bind(':title',$data['title']);
        $this->db->bind(':body',$data['body']);
        //check if post added 
        if($this->db->execute()){
            return true;
        }else{
            return false;
        }
   }
   public function getSinglePost($id){
        //prepare query
        $this->db->query("SELECT * FROM posts WHERE id = :id");
        //bind values
        $this->db->bind(':id',$id);
        $post = $this->db->getSingle();
        return $post;
   }
   public function editPost($data){
        //prepare query
        $this->db->query("UPDATE posts SET user_id = :user_id,title = :title,body = :body WHERE id = :id");
        //bind values
        $this->db->bind(':id',$data['id']);
        $this->db->bind(':user_id',$data['user_id']);
        $this->db->bind(':title',$data['title']);
        $this->db->bind(':body',$data['body']);
        //check if post added 
        if($this->db->execute()){
            return true;
        }else{
            return false;
        }
    }
    public function deletePost($id){
        //prepare query
        $this->db->query("DELETE FROM posts WHERE user_id = :user_id AND id = :id");
        //bind values
        $this->db->bind(':id',$id);
        $this->db->bind(':user_id',$_SESSION['user_id']);
        //check if post added 
        if($this->db->execute()){
            return true;
        }else{
            return false;
        }
    }
}
                            

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

منبعد ف controllers زيد ملف جديد سميه Posts.php فيه غادي يكون عندي الكود لي فيه ل constructeur لي فيه كنتحقق واش المستخدم connecté يلا مكنش كنوجهوا للملف ديال ل connexion منبعد يلا كان connecté كنسترجع ل post ول user model منبعد عندي ل fonction index لي كنسترجع فيها les posts كاملين وكنرسلهم للملف index ديال les posts ولي غادي نزيدوه من بعد ثم كاين fonction add لي فقط كتزيد post جديد منبعد مكتحقق بلي الحقول ديال الفورم عامرين وكترسل المعلومات لل fonction addPost لي شفنا قبل فل model post ثم كاين show لي كن afficher بها post واحد ولي كنسترجعوا بل id ديالو بواسطة ل fonction getSinglePost لي شفنا ف model post وكنسترجع حتى المستخدم مول ل post وكنصيفطو للملف show لي غادي حتى هو نزيدوه من بعد منبعد عندي edit لي كتاخد ل id ديال post وكترسلو هو والمعلومات الجديدة لي دخل المستخدم فالفورم ديال التعديل لل fonction editPost ديال ل model post منبعد كاين delete لي كتمسح post و لي كتاخد ل id ديالو وكترسلو لل fonction deletePost ديال ل model post الكود ديال الملف هو:

                                <?php


class Posts extends Controller{
    public function __construct(){
        if(!isLogged()){
            redirect('users/login');
        }
        $this->postModel = $this->model('post');
        $this->userModel = $this->model('user');
    }
    public function index(){
        $posts = $this->postModel->getPosts();
        $data = array(
            'title'=> 'PHP MVC',
            'posts'=>$posts
        );
        $this->view('posts/index',$data);
    }
    public function add(){
         //sinitize post data
         $_POST = filter_input_array(INPUT_POST,FILTER_SANITIZE_STRING);
         if($_SERVER['REQUEST_METHOD'] == 'POST'){
             $data = array(
                 'title' => trim($_POST['title']),
                 'body' => trim($_POST['body']),
                 'user_id' => trim($_SESSION['user_id']),
                 'title_err' => '',
                 'body_err' => ''
             );
             //check if title is empty
             if(empty($data['title'])){
                 $data['title_err'] = 'Veuillez entrer le titre';
             }
             //check if body is empty
             if(empty($data['body'])){
                 $data['body_err'] = 'Veuillez entrer la déscription';
             }
             //if all fields are filled
             if(empty($data['title_err']) && empty($data['body_err'])){
                 //add post
                 if($this->postModel->addPost($data) == true){
                     alert('post_added_with_success','Ajouté avec succés!');
                     redirect('posts/index');
                 }else{
                     die('Erreur veuillez réessayer plutard');
                 }
             }else{
                 $this->view('posts/add',$data); 
             }
        }else{
            $data = array(
                'title' =>'',
                'description'=>''  
            );
            $this->view('posts/add',$data);   
        }
    }
    public function show($id){
        $post = $this->postModel->getSinglePost($id);
        $user = $this->userModel->getUserById($post->user_id);
        $data = [
            'post' => $post,
            'user' => $user
        ];
        $this->view('posts/show',$data);  
    }
    public function edit($id){
        //sinitize post data
        $_POST = filter_input_array(INPUT_POST,FILTER_SANITIZE_STRING);
        if($_SERVER['REQUEST_METHOD'] == 'POST'){
            $data = array(
                'id' => trim($id),
                'title' => trim($_POST['title']),
                'body' => trim($_POST['body']),
                'user_id' => trim($_SESSION['user_id']),
                'title_err' => '',
                'body_err' => ''
            );
            //check if title is empty
            if(empty($data['title'])){
                $data['title_err'] = 'Veuillez entrer le titre';
            }
            //check if body is empty
            if(empty($data['body'])){
                $data['body_err'] = 'Veuillez entrer la déscription';
            }
            //if all fields are filled
            if(empty($data['title_err']) && empty($data['body_err'])){
                //add post
                if($this->postModel->editPost($data) == true){
                    alert('post_updated_with_success','Modifié avec succés!');
                    redirect('posts/index');
                }else{
                    die('Erreur veuillez réessayer plutard');
                }
            }else{
                $this->view('posts/edit',$data); 
            }
        }else{
            $post = $this->postModel->getSinglePost($id);
            if($post->user_id != $_SESSION['user_id']){
                redirect('posts/index');
            }
            $data = array(
                'id' => $post->id,
                'title' => $post->title,
                'body'=> $post->body,
                'user_id'=> $post->user_id  
            );
            $this->view('posts/edit',$data);   
        }
    }
    public function delete($id){
        $deleted = $this->postModel->deletePost($id);
        if($deleted){
            alert('post_deleted_with_success','Supprimé avec succés!');
            redirect('posts/index');
        }else{
            die('Erreur veuillez réessayer');
        }
    }
}
                            

4- الملف posts/index.php

ف app/views زيد dossier جديد سميه posts فيه غادي تزيد ملف جديد سميه index.php فيه غادي يتعرضوا les posts كاملين لي كيجيوني من ل fonction index ديال ل controller Posts.php ولي شفنا قبل فكنخدم ب foreach باش كنعرض كل حاجة فبلاصتها مع رابط ديال إمكانية إضافة post جديد أو مشاهدة post الكود ديال الملف هو :

                                    <?php require APPROOT.'/views/includes/header.php';?>
<div class="row">
    <div class="col-md-12">
        <a href="<?php echo BASEURL.'/posts/add';?>" class="btn btn-primary mt-4 mb-4"><i class="fas fa-pencil-alt"></i> Ajouter</a>
    </div>
</div>
<div class="row">
<?php foreach($data['posts'] as $post):?>
    <div class="col-md-4 mb-2">
    <?php alert('post_added_with_success');?>
    <?php alert('post_updated_with_success');?>
    <?php alert('post_deleted_with_success');?>
        <div class="card text-dark bg-light">
            <div class="card-body">
                <h3 class="card-title"><?php echo $post->title;?></h3>
                <h5 class="text-info">Ajouté par: <?php echo $post->fullname;?></h5>
                <h7 class="text-danger">le: <?php echo $post->postCreated;?></h7>
                <p class="card-text"><?php echo substr($post->body,0,30);?><a href="<?php echo BASEURL;?>/posts/show/<?php echo $post->postId;?>" class="btn btn-link">Plus...</a></p>
            </div>
        </div>
    </div>
<?php endforeach;?>
<?php require APPROOT.'/views/includes/footer.php';?>
                                

5- الملف posts/add.php

منبعد دائما ف app/views/posts كنزيد fichier جديد سميه add.php  فيه كاين الفورم لي كتمكن المستخدم من إضافة post جديد منبعد مكيترسلو les valeurs لي ف les champs لل fonction add لي شفنا فل controller Posts منقبل  الكود ديال الملف هو :

                                    <?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">Ajouter un article</h4>
                    <hr>
                    <p class="card-text text-info">Veuillez remplir tous les champs*</p>
                    <form method="post" action="<?php echo BASEURL;?>/posts/add">
                        <div class="form-group row">
                            <label for="title" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <input type="text" class="form-control <?php echo (!empty($data['title_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['title'];?>" name="title" id="title" placeholder="Titre">
                                <span class="invalid-feedback">
                                    <?php echo $data['title_err'];?>
                                </span>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="body" class="col-sm-1-12 col-form-label"></label>
                            <div class="col-sm-12">
                                <textarea name="body" id="body" cols="30" rows="10" class="form-control <?php echo (!empty($data['body_err']) ? 'is-invalid' : '');?>" value="<?php echo $data['body'];?>" placeholder="Déscription"></textarea>
                                <span class="invalid-feedback">
                                    <?php echo $data['body_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>
            </div>
        </div>
    </div>
<?php require APPROOT.'/views/includes/footer.php';?>
                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


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