مشروع Photos Gallery بل PHP الجزء الثاني

مشروع Photos Gallery بل PHP الجزء الثاني


فهاد الجزء الثاني غادي نقادو الملفات لي غادي يمكننا من ربط الإتصال بقاعدة البيانات وغادي نزيدو الملف لي غادي يمكن من إضافة المعلومات تعديلها أو حذفها من قاعدة البيانات.

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

- الملف init.php

دائما فالمجلد admin/includes غادي نزيدو بعض الملفات أولها init.php هاد الملف غادي يمكنا من إستخدام الملفات كاملة فنفس الوقت الكود ديالو هو :

                                <?php

defined('DS') ? null : define('DS',DIRECTORY_SEPARATOR);
defined('SITE_ROOT') ? null : define('SITE_ROOT','C:'.DS.'wamp'.DS.'www'.DS.'PhotoGalleryOPP');
defined('INCLUDES_PATH') ? null : define('INCLUDES_PATH',SITE_ROOT.DS.'admin'.DS.'includes');
include "autoload.php";
include "config.php";
include "database.php";
include "db_object.php";
include "user.php";
include "photo.php";
include "session.php";
include "comment.php";
include "pagination.php";
                            

- الملف autoload.php

هاد الملف غادي يمكنا من استخدام لclasses لي عندنا أتوماتيكيا يعني غادي يتزادو فالملفات ديالنا بلا منحتاجو نزيدهم فل header.php و فيه واحد لfonction لي غادي تمكنا من redirection الكود ديالو هو :

                                <?php
function __autoload($class){
    $class = strtolower($class);
    $the_path = "includes/{$class}.php";
    if(file_exists($the_path)){
        require_once($the_path);
    }else{
        die("le fichier {$class}.php est introuvable!");
    }
}
function redirect($location){
    header("location:{$location}");
}
                            

- الملف database.php

هاد الملف غادي يمكنا من الإتصال بقاعدة البيانات بواسطة لconstantes لي كاينين فالملف config.php كاين لfonction connect لي كادير الإتصال وكاين fonction query لي غادي تمكن الأوامر لي غادي نرسلو من التنفيذ ول fonction confirm_result لي كتمكن من التأكد بلي الأمر عاد بنتيجة ول fonction escape_string لي كنمكن من تفادي الحروف الغير مرغوب فيها فالحقول ولfonction inserted_id لي كترجع لid ديال السطر لي تزاد فجدول البيانات الكود ديال الملف هو :

                                <?php
require_once('config.php');
/**
 * 
 */
class Database 
{
   public $connection;
   public function __construct(){
       $this->connect();
   }
   public function connect(){
       $this->connection = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
       if($this->connection->connect_errno){
           die('connexion echouée '.mysqli_errors());
       }
   }
   public function query($query){
       $result = mysqli_query($this->connection,$query);
       return $result;
   }
   private function confirm_result($result){
       if(!$result){
           die("requête echouée");
       }
   }
   public function escape_string($string){
       $escaped_string = mysqli_real_escape_string($this->connection,$string);
       return $escaped_string;
   }
   public function inserted_id(){
       $id = mysqli_insert_id($this->connection);
       return $id;
   }
}
$database = new Database();

                            

- الملف db_object.php

هاد الملف غادي يمكنا من تنفيذ لrequêtes ديالنا أول fonction لي هي get_all كتمكن من إسترجاع كل البيانات الخاصة بجدول معين والثانية find_by_id كتمكن من استرجاع بيانات بالإعتماد على لid والثالثة verify_user كتحقق من المستخدم لي كيحاول تسجيل الدخول ديالو كاين فقاعدة البيانات والرابعة find_this_query كتنفذ requête والخامسة create كتمكن من إضافة البيانات لجدول معين والسادسة update كتمكن من تعديل بيانات بالإعتماد على id والسابعة delete كتمكن من حذف بيانات من قاعدة البيانات بالإعتماد على id والآخرين كيمكنو من حفظ بيانات بالإضافة للصور و حذف تعليقات مستخدم و التعليقات الخاصة بصورة معينة الكود ديال الملف هو :

                                    <?php

/**
 * 
 */
class Db_object
{
    public static function get_all(){
        $sql = "SELECT * FROM ".static::$table."";
        //use late static binding
        return static::find_this_query($sql);
    }
    public static function find_by_id($id){
        $sql = "SELECT * FROM ".static::$table." WHERE id = $id";
        $result =  static::find_this_query($sql);
        return !empty($result) ? array_shift($result) : false;
    }
    public static function verify_user($pseudo,$passe){
        global $database;
        $pseudo = $database->escape_string($pseudo);
        $pseudo = $database->escape_string($passe);
        $sql = "SELECT * FROM ".static::$table." WHERE pseudo='$pseudo' AND passe='$passe'";
        $result =  static::find_this_query($sql);
        return !empty($result) ? array_shift($result) : false; 
    }
    public static function find_this_query($sql){
        global $database;
        $object_array = array();
        $result = $database->query($sql);
        while($row = $result->fetch_assoc()){
            $object_array[] = static::instantiation($row);
        }
        return $object_array;
    }
    public static function instantiation($user){
        //get the static method called class here User class
        $calling_class = get_called_class();
        $object = new $calling_class;
        /*$object->id = $user['id'];
        $object->pseudo = $user['pseudo'];
        $object->nom = $user['nom'];
        $object->prenom = $user['prenom'];
        $object->password = $user['passe'];*/
        foreach ($user as $key => $value) {
            if($object->has_key($key)){
                $object->$key = $value;
            }
        }
        return $object;
    }
    public function has_key($key){
        //get class variables
        $object_keys = get_object_vars($this);
        //return keys values if exists
        return array_key_exists($key,$object_keys);
    }
     //function to get class properties
    public function properties(){
        $properites = array();
        foreach (static::$db_fields as $db_field) {
            if(property_exists($this,$db_field)){
               $properites[$db_field] = $this->$db_field;
            }
        }
        return $properites;
    }
    //escape string function
    public function cleanedProperties(){
        $cleaned_properties = array();
        foreach ($this->properties() as $key => $value) {
            $cleaned_properties[$key] = $value;
        }
        return $cleaned_properties;
    }
      //create user query 
    public function create(){
        global $database;
        $properites = $this->cleanedProperties();
        $sql = "INSERT INTO ".static::$table."(".implode(",",array_keys($properites)).") VALUES ('".implode("','",array_values($properites))."')";
        if($database->query($sql)){
            $user_id = $database->inserted_id();
            return $user_id;
        }else{
            return false;
        }
    }
    //update user query 
    public function update(){
        global $database;
        $id = $database->escape_string($this->id);
        $properites = $this->cleanedProperties();
        $properites_pair = array();
        foreach ($properites as $key => $value) {
           $properites_pair[] = "{$key}='{$value}'";
        }
        $sql = "UPDATE ".static::$table." SET ".implode(",",$properites_pair)." WHERE id = $id";
        $database->query($sql);
        return (mysqli_affected_rows($database->connection) == 1) ? true : false;
    }
    //delete user query 
    public function delete(){
        global $database;
        $id = $database->escape_string($this->id);
        $sql = "DELETE FROM ".static::$table." WHERE id = $id";
        $database->query($sql);
        if($database->query($sql)){
            return true;
        }else{
            return false;
        }
    }
    //set photo query 
    public function set_file($file){
        if(empty($file) || !$file || !is_array($file)){
            $this->errors[] = "Aucun fichier téléchargé";
            return false;
        }else if($file['error'] != 0){
            $this->errors [] = $this->upload_errors_array[$file['error']];
            return false;
        }else{
            $this->filename = basename($file['name']);
            $this->tmp_path = $file['tmp_name'];
            $this->type = $file['type'];
            $this->size = $file['size'];
        }
    }
    //save with photo query 
     public function save_with_photo(){
        if($this->id){
            if(!empty($this->errors)){
                return false;
            }
            if(empty($this->filename) || empty($this->tmp_path)){
                $this->errors[] = "Aucun fichier trouvé";
                return false;
            }
            $target_path = SITE_ROOT.DS.'admin'.DS.$this->upload_directory.DS.$this->filename;
            if(file_exists($target_path)){
                $this->errors[] = "Le fichier {$this->filename} existe déja";
                return false;
            }
            if(move_uploaded_file($this->tmp_path,$target_path)){
                if($this->update()){
                    unset($this->tmp_path);
                    return true;
                }else{
                    $this->errors[] = "Erreur  durant l'envois de votre fichier";
                    return false;
                }
            }
        }else{
            if(!empty($this->errors)){
                return false;
            }
            if(empty($this->filename) || empty($this->tmp_path)){
                $this->errors[] = "Aucun fichier trouvé";
                return false;
            }
            $target_path = SITE_ROOT.DS.'admin'.DS.$this->upload_directory.DS.$this->filename;
            if(file_exists($target_path)){
                $this->errors[] = "Le fichier {$this->filename} existe déja";
                return false;
            }
            if(move_uploaded_file($this->tmp_path,$target_path)){
                if($this->create()){
                    unset($this->tmp_path);
                    return true;
                }
            }else{
                $this->errors[] = "Erreur  durant l'envois de votre fichier";
                return false;
            }
        }
    }
    //count all query 
    public static function count_all(){
        global $database;
        $sql = "SELECT count(*) FROM ".static::$table."";
        $result = $database->query($sql);
        $total = mysqli_fetch_assoc($result);
        return array_shift($total);
    }
    //delete_user_comments
     //delete user query 
    public function delete_user_comments($id){
        global $database;
        $id = $database->escape_string($this->id);
        $sql = "DELETE FROM comments WHERE user_id = $id";
        $database->query($sql);
        if($database->query($sql)){
            return true;
        }else{
            return false;
        }
    }
    //delete photo delete_user_comments //delete user query 
    public function delete_photo_comments($id){
        global $database;
        $id = $database->escape_string($this->id);
        $sql = "DELETE FROM comments WHERE photo_id = $id";
        $database->query($sql);
        if($database->query($sql)){
            return true;
        }else{
            return false;
        }
    } 
}

                                

- الملف session.php

هاد الملف كيتضمن لfonctions لي كيمكنو المستخدم من تسجيل الدخول login لي يلا كان المستخدم مسجل فقاعدة البيانات كترجع النتيجة صحيح أو خطأ وlogout لي كتمكن المستخدم من الخروج و check_login لي كتحقق واش المستخدم داخل أو لا و visitor_count لي كتحسب عدد الزوار وcheck_message و message لي كيمكنو من عرض واحد الرسالة ديال تأكيد إضافة تعديل أو حذف بيانات من قاعدة البيانات الكود ديال الملف هو :

                                    <?php 
ob_start();
/**
 * 
 */
class Session 
{
    private $signed_in;
    public $user_id;
    public $count;
    public $message;
    function __construct()
    {
       session_start();
       $this->visitor_count();
       $this->check_login();
       $this->check_message();
    }
    public function visitor_count(){
        if(isset($_SESSION['count'])){
            return $this->count = $_SESSION['count']++;
        }else{
            return $_SESSION['count'] = 1;
        }
    }
    private function check_login(){
        if(isset($_SESSION['user_id'])){
            $this->user_id = $_SESSION['user_id'];
            $this->signed_in = true;
        }else{
            unset($this->user_id);
            $this->signed_in = false;
        }
    }
    public function is_logged(){
        if($this->signed_in == true){
            return true;
        }else{
            return false;
        }
    }
    public function login($user){
        if($user){
            $this->user_id = $_SESSION['user_id'] = $user->id;
            $this->signed_in = true;
        }
    }
    public function logout(){
        unset($_SESSION['user_id']);
        unset($this->user_id);
        $this->signed_in = false;
        redirect("login.php");
    }
    private function check_message(){
        if(isset($_SESSION['message'])){
            $this->message = $_SESSION['message'];
            unset($_SESSION['message']);
        }else{
            $message = "";
        }
    }
    public function message($msg=""){
        if(!empty($msg)){
            $_SESSION['message'] = $msg;
        }else{
            return $msg;
        }
    }
}
$session = new Session();
$message = $session->message;
                                


بحث في الموقع


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