Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MkFramework Discussion :

Sauvegarde de la base

  1. #1
    Membre régulier
    Sauvegarde de la base
    Bonjour,

    Dans mon application j'ai une partie administration dans lequel je prévoie la possibilité de sauvegarder et de restaurer la base.

    Comment me conseillez-vous de m'y prendre?

    Peut-être que ça pourrait faire l'objet d'un plugin?

  2. #2
    Rédacteur

    La procédure de sauvegarde/restauration de base dépend de chaque sgbd.

    Par exemple pour mysql, il faut utiliser mysqldump
    Mais pour sqlserver, on passe par le client lourd ou avec une requete particulière
    Oracle je ne sais pas, postgresql doit avoir un binaire également
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. ###raw>post.musername###
    Membre régulier
    Je veux gérer une base mysql.

    Je doit donc créer un module avec la class pour faire la la sauvegarde.

    J'ai récupérer une classe simple qui me convient pour l'instant
    elle est de szaboolcs

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    <?php 
        class sql_dump{
            private $tables = array();
     
            private $options = array(
                'MySQL_HOST' => '',
                'MySQL_USERNAME' => '',
                'MySQL_PASSWORD' => '',
                'MySQL_DATABASE' => '',
                'CHARSET' => 'UTF8',
                'PATH' => '/',
                'FTP' => false,
                'FTP_HOST' => '',
                'FTP_USERNAME' => '',
                'FTP_PASSWORD' => '',
                'FTP_PATH' => '/'
     
            );
     
            private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
     
            private $connect;
     
            public function __construct($options = array()){
                foreach($options as $k => $v){
                    $this->options[$k] =  $v;
                }
     
                $this->connect();
                $this->charset();
                $this->tables();
                $this->create_tables();
                $this->columns();
                $this->inserts();
                $this->toString();
                $this->save();
            }
     
            private function connect(){
                $this->connect = new mysqli(
                    $this->options['MySQL_HOST'], 
                    $this->options['MySQL_USERNAME'], 
                    $this->options['MySQL_PASSWORD'], 
                    $this->options['MySQL_DATABASE']
                    );
                if($this->connect->connect_error){
                    throw new Exception('Connection error: '.$this->connect->connect_error);
                }
            }
     
            private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function tables(){
                if($result = $this->connect->query('SHOW TABLES')){
                    while($row = $result->fetch_row()){
                         $this->tables[]['NAME'] = $row[0];
                    }
                    $result->close();
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function create_tables(){
                foreach($this->tables as $k => $v){
                    if($row = $this->connect->query("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                        $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);    
                    }
                }
            }
     
            private function columns(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SHOW COLUMNS FROM ".$v['NAME'])){
                        while($row = $result->fetch_row()){
                            $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                        }
                    }else{
                        $result->close();
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        return;
                    }
                }
                $result->close();
            }
     
            private function inserts(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SELECT * FROM `".$v['NAME']."`")){
                        $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                        $values = array();
                        while($row = $result->fetch_array()){
                            $val = array();
                            foreach($v['FIELDS'] as $f){
                                $f = str_replace('`', '', $f);
                                $val[] = '\''.$row[$f].'\'';
                            }
                            $values[] = "\n(".implode(",",$val).")";
                        }
                        $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        $result->close();
                        return;
                    }
                }
                $result->close();
            }
     
            private function toString(){
                foreach($this->tables as $k => $v){
                    $this->string .= $v['CREATE'].";\n\n";
                    $this->string .= $v['INSERT'].";\n\n";
                }
            }
     
            private function copyToFtp($file){
                $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if($ftp = ftp_connect($this->options['FTP_HOST'])){
                    if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                        if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                            throw new Exception('FTP put file error');      
                        }
                    }else{
                        throw new Exception('FTP login error');  
                    }
                    ftp_close($ftp);  
                }else{
                    throw new Exception('FTP connection error');  
                }
     
            }
     
            private function save(){
                $date = date('Y-m-d-H-i-s');
                $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if(@file_put_contents($file, $this->string)){
                    if($this->options['FTP'] === true){
                        $this->copyToFtp($file);
                    }    
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
                }
            }
     
            public function __destruct(){
                $this->connect->close();
            }
        }
    ?>


    Pour le lancer je fait ceci
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php 
        require_once('sql_dump.php');
     
        try{
            new sql_dump(array(
                'MySQL_HOST' => 'localhost', 
                'MySQL_USERNAME' => 'root', 
                'MySQL_PASSWORD' => '', 
                'MySQL_DATABASE' => 'secu02',
                ));
        }catch(exception $e){
            echo $e->getMessage();
        }
    ?>


    Comment faire pour que les infos soit automatiquement les mêmes que celle du conf/connexion.ini.php
      0  0

  4. #4
    Rédacteur

    Il faut utiliser la methode _root::getConfig
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     
    Var()
    Elle permet de récupérer une variable des fichiers de config
    Sous la forme _root::getConfigVar('section.variable')

    Par exemple pour une variable
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    [db]
    mysqlExple.username=login


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    _root::getConfigVar('db.mysqlExple.username')
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre régulier
    Bonjour,

    J'ai créer un module gestionBase avec 2 actions save et restore.
    Dans la méthode save j'appelle la class sql_dump.
    Dois-la copier dans la méthode save ou dois-je la mettre dans le dossier lib/?

    Du coup dois-je faire le renseigner dans mon template?

    Dans mes class restore et save je dois me connecter à la base
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Connect to MySQL server
    mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error());
    // Select database
    mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());


    Je doit la construire variable par variable comme vous m'avez informé plus haut?
    ou existe-t-il une fonction de connections?

    Pour faire la restore() j'ai besoin d'un select dans la liste les fichiers de sauvegarde qui serons dans un dossier dump. Comment puis-je faire ce formulaire?

  6. #6
    Rédacteur

    Si vous avez déjà une classe modèle connecté à votre base de donnée, utilisez la methode getSgbd

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $oPdo=model_article::getInstance()->getSgbd()->getPdo()
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. ###raw>post.musername###
    Membre régulier
    Dois-je comprendre que je dois créer un fichier "model_gestionBase.php" avec la class dumpsql dedans?

    que dois-je modifier dans la class poru qu'elle soit compatible?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    <?php 
        class sql_dump{
            private $tables = array();
     
            private $options = array(
                'MySQL_HOST' => '',
                'MySQL_USERNAME' => '',
                'MySQL_PASSWORD' => '',
                'MySQL_DATABASE' => '',
                'CHARSET' => 'UTF8',
                'PATH' => '/',
                'FTP' => false,
                'FTP_HOST' => '',
                'FTP_USERNAME' => '',
                'FTP_PASSWORD' => '',
                'FTP_PATH' => '/'
     
            );
     
            private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
     
            private $connect;
     
            public function __construct($options = array()){
                foreach($options as $k => $v){
                    $this->options[$k] =  $v;
                }
     
                $this->connect();
                $this->charset();
                $this->tables();
                $this->create_tables();
                $this->columns();
                $this->inserts();
                $this->toString();
                $this->save();
            }
     
            private function connect(){
                $this->connect = new mysqli(
                    $this->options['MySQL_HOST'], 
                    $this->options['MySQL_USERNAME'], 
                    $this->options['MySQL_PASSWORD'], 
                    $this->options['MySQL_DATABASE']
                    );
                if($this->connect->connect_error){
                    throw new Exception('Connection error: '.$this->connect->connect_error);
                }
            }
     
            private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function tables(){
                if($result = $this->connect->query('SHOW TABLES')){
                    while($row = $result->fetch_row()){
                         $this->tables[]['NAME'] = $row[0];
                    }
                    $result->close();
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                }
            }
     
            private function create_tables(){
                foreach($this->tables as $k => $v){
                    if($row = $this->connect->query("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                        $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);    
                    }
                }
            }
     
            private function columns(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SHOW COLUMNS FROM ".$v['NAME'])){
                        while($row = $result->fetch_row()){
                            $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                        }
                    }else{
                        $result->close();
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        return;
                    }
                }
                $result->close();
            }
     
            private function inserts(){
                foreach($this->tables as $k => $v){
                    if($result = $this->connect->query("SELECT * FROM `".$v['NAME']."`")){
                        $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                        $values = array();
                        while($row = $result->fetch_array()){
                            $val = array();
                            foreach($v['FIELDS'] as $f){
                                $f = str_replace('`', '', $f);
                                $val[] = '\''.$row[$f].'\'';
                            }
                            $values[] = "\n(".implode(",",$val).")";
                        }
                        $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                    }else{
                        throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->connect->error);
                        $result->close();
                        return;
                    }
                }
                $result->close();
            }
     
            private function toString(){
                foreach($this->tables as $k => $v){
                    $this->string .= $v['CREATE'].";\n\n";
                    $this->string .= $v['INSERT'].";\n\n";
                }
            }
     
            private function copyToFtp($file){
                $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if($ftp = ftp_connect($this->options['FTP_HOST'])){
                    if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                        if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                            throw new Exception('FTP put file error');      
                        }
                    }else{
                        throw new Exception('FTP login error');  
                    }
                    ftp_close($ftp);  
                }else{
                    throw new Exception('FTP connection error');  
                }
     
            }
     
            private function save(){
                $date = date('Y-m-d-H-i-s');
                $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
                if(@file_put_contents($file, $this->string)){
                    if($this->options['FTP'] === true){
                        $this->copyToFtp($file);
                    }    
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
                }
            }
     
            public function __destruct(){
                $this->connect->close();
            }
        }
    ?>
      0  0

  8. #8
    Rédacteur

    A la base, il faut juste ajouter ceci:
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    class model_sqldump extends abstract_model{
     
    	//profil de connexion
    	protected $sConfig='mysqlExple';


    Mais dans votre code vous faites des requetes en execution et des requetes de recupération de données

    Pour les executions ce serait
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    $this->getSgbd()->getPdo->execute('ma reuqte')


    Pour celle de récupération
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    $tRow=$this->findMany('SELECT mon champ from maTable')
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre régulier
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $result = $this->connect->query('SHOW TABLES')

    je met
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $result = $this->getSgbd()->getPdo->execute('SHOW TABLES')


    et pour la méthode charset()?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $this->connect->set_charset($this->options['CHARSET'])


    methode destruct()
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $this->connect->close();


    et pour ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->connect->connect_error);

  10. #10
    Rédacteur

    La couche modèle s'appuie sur pdo
    http://php.net/manual/fr/book.pdo.php

    donc à la place de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $result = $this->connect->query('SHOW TABLES')

    je met
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $result = $this->getSgbd()->getPdo->execute('SHOW TABLES')

    oui


    et pour la méthode charset()?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $this->connect->set_charset($this->options['CHARSET'])

    A priori non, changez simplement le charset dans le fichier de connexion
    $db = new PDO('dblib:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass);
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    pdoMysql.dsn="mysql:dbname=blog;host=localhost";charset=UTF-8



    methode destruct()
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $this->connect->close();


    et pour ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->connect->connect_error);

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    throw new Exception('Connection error: '.$this->getSgbd()->getPdo()->errorInfo())
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  11. #11
    Membre régulier
    je comprend pas votre citation. C'est un exemple c'est ça? ou dois-je modifier le fichier connexion.php avec.

    Actuellement mon fichier connexion est
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ;<?php die()?>
    [db]
    pdoMysql.dsn="mysql:dbname=**;host=**";charset=UTF-8
    pdoMysql.sgbd=pdo_mysql
    pdoMysql.hostname=**
    pdoMysql.database=**
    pdoMysql.username=**
    pdoMysql.password=**



    Dans mon model du coup je vire la methode charset()?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                }
            }


    et pour
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
                $this->connect->close();

    Je met ça ou c'est pas la peine et je l'enlève?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
               $this->getSgbd()->getPdo->close();

  12. #12
    Rédacteur

    Citation Envoyé par pitu69 Voir le message
    je comprend pas votre citation. C'est un exemple c'est ça? ou dois-je modifier le fichier connexion.php avec.

    Actuellement mon fichier connexion est
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ;<?php die()?>
    [db]
    pdoMysql.dsn="mysql:dbname=**;host=**";charset=UTF-8
    pdoMysql.sgbd=pdo_mysql
    pdoMysql.hostname=**
    pdoMysql.database=**
    pdoMysql.username=**
    pdoMysql.password=**

    il faut juste changer votre variable ".dsn" de votre profil de connexion


    Citation Envoyé par pitu69 Voir le message

    Dans mon model du coup je vire la methode charset()?
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private function charset(){
                if(!$this->connect->set_charset($this->options['CHARSET'])){
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                }
            }

    Exact

    Citation Envoyé par pitu69 Voir le message

    et pour
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
                $this->connect->close();

    Je met ça ou c'est pas la peine et je l'enlève?
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    public function __destruct(){
               $this->getSgbd()->getPdo->close();
    Pas nécessaire en effet, la connexion se fermera à la fin de la page
    Sinon il y a la méthode closeCursor mais c'est pour réutilisée une requête
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  13. ###raw>post.musername###
    Membre régulier
    Merci,

    Pour faire une sauvegarde j’appelais la classe j'avais 2 fichiers
    la classe et le fichier d'appel.
    La classe je l'ai mis dans model/model gestionBase.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    <?php 
    class model_sqldump extends abstract_model{
     
    //profil de connexion
    protected $sConfig='pdoMysql';
     
     
     
    private $tables = array();
    private $options = array(
        'MySQL_HOST' => '',
        'MySQL_USERNAME' => '',
        'MySQL_PASSWORD' => '',
        'MySQL_DATABASE' => '',
        'CHARSET' => 'UTF8',
        'PATH' => '/',
        'FTP' => false,
        'FTP_HOST' => '',
        'FTP_USERNAME' => '',
        'FTP_PASSWORD' => '',
        'FTP_PATH' => '/'
     
    );
     
    private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
    private $connect;
     
        public static function getInstance(){
        return self::_getInstance(__CLASS__);
        }
     
        public function __construct($options = array()){
            foreach($options as $k => $v){
                $this->options[$k] =  $v;
            }
     
            $this->connect();
            $this->charset();
            $this->tables();
            $this->create_tables();
            $this->columns();
            $this->inserts();
            $this->toString();
            $this->save();
        }
     
     
        private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){
                while($row = $result->fetch_row()){
                     $this->tables[]['NAME'] = $row[0];
                }
                $result->close();
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
            }
        }
     
        private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                    $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());    
                }
            }
        }
     
        private function columns(){
            foreach($this->tables as $k => $v){
                if($result = $this->getSgbd()->getPdo->execute("SHOW COLUMNS FROM ".$v['NAME'])){
                    while($row = $result->fetch_row()){
                        $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                    }
                }else{
                    $result->close();
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    return;
                }
            }
            $result->close();
        }
     
        private function inserts(){
            foreach($this->tables as $k => $v){
                if($result =$this->findMany("SELECT * FROM `".$v['NAME']."`")){
                    $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                    $values = array();
                    while($row = $result->fetch_array()){
                        $val = array();
                        foreach($v['FIELDS'] as $f){
                            $f = str_replace('`', '', $f);
                            $val[] = '\''.$row[$f].'\'';
                        }
                        $values[] = "\n(".implode(",",$val).")";
                    }
                    $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    $result->close();
                    return;
                }
            }
            $result->close();
        }
     
        private function toString(){
            foreach($this->tables as $k => $v){
                $this->string .= $v['CREATE'].";\n\n";
                $this->string .= $v['INSERT'].";\n\n";
            }
        }
     
        private function copyToFtp($file){
            $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if($ftp = ftp_connect($this->options['FTP_HOST'])){
                if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                    if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                        throw new Exception('FTP put file error');      
                    }
                }else{
                    throw new Exception('FTP login error');  
                }
                ftp_close($ftp);  
            }else{
                throw new Exception('FTP connection error');  
            }
     
        }
     
        private function save(){
            $date = date('Y-m-d-H-i-s');
            $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if(@file_put_contents($file, $this->string)){
                if($this->options['FTP'] === true){
                    $this->copyToFtp($file);
                }    
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
            }
        }
     
    }


    Mon fichier qui appelais la classe j'avais
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php 
        require_once('sql_dump.php');
     
        try{
            new sql_dump(array(
                'MySQL_HOST' => 'localhost', 
                'MySQL_USERNAME' => '_root::getConfigVar('db.mysqlExple.username')', 
                'MySQL_PASSWORD' => '', 
                'MySQL_DATABASE' => 'secu02',
                ));
            echo "sauvegarde faite";
        }catch(exception $e){
            echo $e->getMessage();
        }
    ?>


    Comment dois-je l’écrire dans le module gestionBase/main.php méthode sauve()
    J'ai des milliers de tests sans y parvenir.
    mon point de départ est
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function _sauve(){
     
    		$oView=new _view('gestionBase::sauve');
    		$this->oLayout->add('main',$oView);
    	}
      0  0

  14. #14
    Rédacteur

    Votre classe modèle s appelle model_sqldump.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    $oSqldump=new model_sqldump;
    $oSqldump->votreMethode();
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  15. #15
    Membre régulier
    Bonjour,

    donc ma méthode sauve serait ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function _sauve(){
    	        $oSqldump=new model_sqldump;
                    $oSqldump->sql_dump();
    		$oView=new _view('gestionBase::sauve');
    		$this->oLayout->add('main',$oView);
    	}

  16. #16
    Rédacteur

    oui
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  17. ###raw>post.musername###
    Membre régulier
    J'ai une erreur et je comprend pas comment la resoudre.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Undefined property: sgbd_pdo_mysql::$getPdo
    #0 /opt/lampp/htdocs/tests/mkframework/data/genere/secu06/model/model_sqldump.php(48): exception_error_handler(8, 'Undefined prope...', '/opt/lampp/htdo...', 48, Array)
    #1 /opt/lampp/htdocs/tests/mkframework/data/genere/secu06/model/model_sqldump.php(36): model_sqldump->tables()


    le fichier model_sqldump.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    <?php 
    class model_sqldump extends abstract_model{
     
    //profil de connexion
    protected $sConfig='pdoMysql';
     
     
     
    private $tables = array();
    private $options = array(
        'MySQL_HOST' => '',
        'MySQL_USERNAME' => '',
        'MySQL_PASSWORD' => '',
        'MySQL_DATABASE' => '',
        'CHARSET' => 'UTF8',
        'PATH' => '/',
        'FTP' => false,
        'FTP_HOST' => '',
        'FTP_USERNAME' => '',
        'FTP_PASSWORD' => '',
        'FTP_PATH' => '/'
     
    );
     
    private $string = "SET SQL_MODE=\"NO_AUTO_VALUE_ON_ZERO\";\n\n";
    private $connect;
     
        public static function getInstance(){
        return self::_getInstance(__CLASS__);
        }
     
        public function __construct($options = array()){
            foreach($options as $k => $v){
                $this->options[$k] =  $v;
            }
            $this->tables();
            $this->create_tables();
            $this->columns();
            $this->inserts();
            $this->toString();
            $this->save();
        }
     
     
        private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){
                while($row = $result->fetch_row()){
                     $this->tables[]['NAME'] = $row[0];
                }
                $result->close();
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
            }
        }
     
        private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){
                    $this->tables[$k]['CREATE'] = 'DROP TABLE '.$v['NAME'].";\n\n".$row[1];
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());    
                }
            }
        }
     
        private function columns(){
            foreach($this->tables as $k => $v){
                if($result = $this->getSgbd()->getPdo->execute("SHOW COLUMNS FROM ".$v['NAME'])){
                    while($row = $result->fetch_row()){
                        $this->tables[$k]['FIELDS'][] = '`'.$row[0].'`';
                    }
                }else{
                    $result->close();
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    return;
                }
            }
            $result->close();
        }
     
        private function inserts(){
            foreach($this->tables as $k => $v){
                if($result =$this->findMany("SELECT * FROM `".$v['NAME']."`")){
                    $insert = "INSERT INTO `".$v['NAME']."` (".implode(',', $v['FIELDS']).") VALUES ";
                    $values = array();
                    while($row = $result->fetch_array()){
                        $val = array();
                        foreach($v['FIELDS'] as $f){
                            $f = str_replace('`', '', $f);
                            $val[] = '\''.$row[$f].'\'';
                        }
                        $values[] = "\n(".implode(",",$val).")";
                    }
                    $this->tables[$k]['INSERT'] = $insert.implode(',',$values);
                }else{
                    throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: '.$this->getSgbd()->getPdo()->errorInfo());
                    $result->close();
                    return;
                }
            }
            $result->close();
        }
     
        private function toString(){
            foreach($this->tables as $k => $v){
                $this->string .= $v['CREATE'].";\n\n";
                $this->string .= $v['INSERT'].";\n\n";
            }
        }
     
        private function copyToFtp($file){
            $ftpfile = substr($this->options['FTP_PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if($ftp = ftp_connect($this->options['FTP_HOST'])){
                if(ftp_login($ftp, $this->options['FTP_USERNAME'], $this->options['FTP_PASSWORD'])){
                    if(!ftp_put($ftp, $ftpfile, $file, FTP_ASCII)){
                        throw new Exception('FTP put file error');      
                    }
                }else{
                    throw new Exception('FTP login error');  
                }
                ftp_close($ftp);  
            }else{
                throw new Exception('FTP connection error');  
            }
     
        }
     
        private function save(){
            $date = date('Y-m-d-H-i-s');
            $file = substr($this->options['PATH'], -1) == '/' ? 'db_backup_'.$date.'.sql' : '/db_backup_'.$date.'.sql';
     
            if(@file_put_contents($file, $this->string)){
                if($this->options['FTP'] === true){
                    $this->copyToFtp($file);
                }    
            }else{
                throw new Exception('Error in the next function: '.__FUNCTION__.'. Error message: File save failed!');    
            }
        }
     
    }


    Le problème est à la fonction tables() ligne 46
      0  0

  18. #18
    Rédacteur

    Il manque les parenthèse, c'est une function:
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  19. #19
    Membre régulier
    Bonsoir,
    Là j'ai besoin d'aide je vois ce que je dois mettre. : Cry:

    Est-ce les paramètres: connexions, base, utilisateur, PW?
    Mais il sont renseigné dans connexion.ini.php.

  20. #20
    Rédacteur

    Je parlais de la ligne 46
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     private function tables(){
            if($result = $this->getSgbd()->getPdo->execute('SHOW TABLES')){

    Il faut mettre les parenthèses à getPdo()

    ainsi
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     private function tables(){
            if($result = $this->getSgbd()->getPdo()->execute('SHOW TABLES')){


    idem pour
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     private function create_tables(){
            foreach($this->tables as $k => $v){
                if($row = $this->getSgbd()->getPdo()->execute("SHOW CREATE TABLE ".$v['NAME'])->fetch_row()){



    remplacez tous les
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux