Skip to content
Snippets Groups Projects
Select Git revision
  • 26dd535291e638d27868cfb2b7704d1895d88a82
  • pre-2.1b default protected
  • pre-2.1
  • pre-2.0
  • testTag
  • pre2.1b
6 results

index.php

Blame
  • Objet.php 3.46 KiB
    <?php
    require_once "Objet.php";
    
    /**
     * Implémente les magic methods.
     */
    class Objet
    {
        public function __construct($data = null)
        {
            if(!is_null($data)){
                foreach ($data as $key => $value){
                    $this->$key = $value;
                }
            }
        }
        /**
         * @param $name
         * @return mixed
         */
        public function __get($name)
        {
            return $this->$name ?? null;
        }
    
        /**
         * @param $name
         * @param $value
         * @return void
         */
        public function __set($name, $value)
        {
            $this->$name = $value;
        }
    
        /**
         * Permet d'insérer un objet dans la base de données
         * @param String $tableName
         * @param array $columns
         * @return array|string[]
         */
        public static function addObject(String $tableName, array $columns) : array
        {
            $result["status"] = "success";
            $result["message"] = "Insertion réussie";
    
            // On va vérifier que $tableName est bien en format alphanumérique
            if(!isAlphaNumeric($tableName)){
                return [
                    "status" => "fail",
                    "message" => "Le format du nom de la table est incorrect."
                ];
            }
    
            // Maintenant on va vérifier que la table existe
            try{
                Database::pdo()->query("SELECT 1 FROM $tableName LIMIT 1");
            } catch (PDOException $e) {
                return [
                    "status" => "fail",
                    "message" => "La table $tableName ne semble pas exister.",
                    "pdoError" => $e
                ];
            }
    
            // Nous pouvons commencer l'insertion
    
            // On va vérifier que l'index de chaque est bien en format alphanumérique
            foreach($columns as $index => $value){
                if(!isAlphaNumeric($index)){
                    return [
                        "status" => "fail",
                        "message" => "Le format " . htmlspecialchars($index) . " est incorrect."
                    ];
                }
            }
    
            // On prépare la requête
            $queryString = ("INSERT INTO $tableName (" . implode(", ", array_keys($columns))
                . ") VALUES (:" . implode(", :", array_keys($columns)) . ")");
            $insertQuery = Database::pdo()->prepare($queryString);
            try{
                // Et on l'exécute
                $insertQuery->execute($columns);
            } catch (PDOException $e) {
                return [
                    "status" => "fail",
                    "message" => "L'insertion de l'objet a échoué.",
                    "pdoError" => $e
                ];
            }
    
            return $result;
        }
    
        /**
         * Permet de décrire une table représentant un objet.
         * @param $tableName
         * @return array
         */
        public static function describeObject($tableName) : array
        {
            if(!isAlphaNumeric($tableName)){
                return [
                    "status" => "fail",
                    "message" => "Le format du nom de la table est incorrect.",
                    "columns" => []
                ];
            }else{
                try{
                    $query = Database::pdo()->query("SHOW FULL COLUMNS FROM $tableName");
                    $columns = $query->fetchAll(PDO::FETCH_ASSOC);
                } catch (PDOException $e) {
                    return [
                        "status" => "fail",
                        "message" => $e->getMessage(),
                        "columns" => []
                    ];
                }
    
                return [
                    "status" => "success",
                    "columns" => $columns
                ];
            }
        }
    }