Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    [PILLOLINA] Database su file *.sql

    Buongiorno a tutti
    ho scritto una paginetta in php che salva i dati di un database mysql in un file *.sql e volevo darla alla comunità. La trasformo in open source .
    Vabbè dopo stè cavolate torniamo sull'argomento.

    Il sistema è molto semplice e non ha assolutamente la presunzione di essere uno sript sofisticato...

    In pratica si effettua una connessione al database e viene salvato il contenuto delle sue tabelle, ma non le proprietà dei campi.

    Questo perchè? Perchè si presume che voi stiate salvando un database da voi realizzato e quindi le proprietà già le avete!
    (comunque ciò è irrilevante alla fine del backup)

    1) In tutto ci occorrono 2 file:
    - salva.php
    - configurazione.php

    2) configurazione.php

    inserite questo codice:
    Codice PHP:
    <?php
    $db_host 
    "mio_host";
    $db_user "mia_user";
    $db_password "mia_password";
    $db_name "database_che_voglio_salvare";

    $conn mysql_connect($db_host$db_user$db_password) or die('Impossibile stabilire una connessione');
    mysql_select_db($db_name);
    ?>
    Credo che non abbia bisogni di commenti...

    3) salva.php

    inserite questo.
    Il funzionamento è descritto nei commenti

    Codice PHP:
    <?php

    include_once("configurazione.php");

    //variabile che contiene i dati del database
    $contenuto='';

              
    //visualizzo tutte le tabelle del mio database
              
    $query "SHOW TABLES FROM ".$db_name;
              
    $result mysql_query($query) or die("Errore:".mysql_error());
              
    //per ogni tabella scrivo nel file *.sql 2 tipi di query
              //la 1° query svuota la tabella che vogliamo ripristinare
              //tutte le query successive (1 per ogni record registrato in quella tabella) inseriscono i vecchi valori dei campi estrapolati
              
    while ($row mysql_fetch_array($result)) {  
                     
    $contenuto .= "TRUNCATE TABLE `$row[0]`;\n";
                     
                     
    $query_record "select * FROM "$row[0];
                     
    $result_record mysql_query($query_record) or die("Errore:".mysql_error());

                     while (
    $row0 mysql_fetch_array($result_record)){
                                     
    //perchè davanti al primo elemento della query non c'è la virgola mentre dopo si
                                     //(Es: ...VALUES ('1', '1', ...
                     
    $virgola='';
                     
    $contenuto .= "INSERT INTO $row[0] ";
                     
                            
    $totk"";
                            
    $r "0";
                            foreach(
    $row0 as $k => $valore){  

                                    
    //questo è un modo molto grezzo per dire
                                    //se il nome del campo non è un numero allora inserisci il suo valore
                                    //faccio questo per evitare il doppio inserimento
                                    
    if ($k!=$r) {
                                        
    $r $r+1;
                                        
                                        
    $totk $totk.$virgola."'".addslashes($valore)."'";
                                        
    $virgola=", ";
                                    }
     
                            }
                      
    $contenuto .= "VALUES (".$totk.");\n";
                      }
                      
              }  
    //FINE WHILE    
              //echo $contenuto;
              
    //salvataggio file//////////////////////////////

    //lo script per eseguire il salvataggio del file mi sembra sia di [B]Andr3ea[/B] e lo trovate in molti thread di questo forum quindi se non capite qualcosa cercate... 
    if (isset ($_POST["ciccio"])) {

        if (isset (
    $_POST["nome_file"])) $filenameaddslashes($_POST["nome_file"]).".sql"; else $filename"salva.sql";

           
    $f fopen($filename"w+"); 
           
    fwrite($f$contenuto);
           
    fclose($f);
           
      
    $input_file $filename;
      
    $download_size filesize($input_file);
      
    $filename basename($input_file);

      if(
    ereg("MSIE ([0-9].[0-9]{1,2})"$_SERVER["HTTP_USER_AGENT"])) {

        
    header("Content-Type: application/octetstream");
        
    header("Content-Disposition: inline; filename=$filename");
        
    header("Expires: 0");
        
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        
    header("Pragma: public");
        
    header("Content-Length: $download_size");

      } else {

        
    header("Content-Type: application/octet-stream");
        
    header("Content-Disposition: attachment; filename=$filename");
        
    header("Expires: 0");
        
    header("Pragma: no-cache");
        
    header("Content-Length: $download_size");
      }

      
    readfile($input_file);
      
    unlink ($input_file);//cancello il file salvato nella cartella agorà

    //////////////////FINE SALVATAGGIO FILE//////////////////////////////////////////////////////////////  
    }else{
    ?>
                 <table WIDTH=100% HEIGHT=300>
                 <TR><TD align="center">
                  <table width=400 height=100% cellspacing=0 style='border-collapse: collapse' bordercolor=#111111 cellpadding=0>
                   <tr>
                    <td width=10></td>
                    <td height=20 colspan=2 align="center"></td>
                    <td width=10></td>
                   </tr>
                   <tr>
                        <td colspan=4 background=img/striscia_su.jpg height=2></td>
                   </tr>
                   <tr bgcolor='#EEEEE6'>
                    <td align="center">
                    <form action="salva.php" method="POST" name="InputForm" id="InputForm">
                    [b]Nome del file:[/b]<input name="nome_file" type="text">

                    <input type="submit" name="ciccio" value="Salva" onClick="closeIt('no','si');">
                    <input type="button" onClick="javascript:history.back()"; value="chiudi">
                    </form>

                 
                 
    <?php 
    }
    ?>
                       </td>
                    </tr>
                    </table></td></tr></table>
    4) riassumendo il tutto
    - ci connettiamo al database (che vogliamo salvare);
    - visualizziamo le tabelle in esso contenute;
    - per ogni tabella scriviamo una query che provveda a svuotarla (per rieffettuare un ripristino completo) e tante query (quanti sono i record in essa contenuti) di inserimento dei dati salvati
    - assegniamo un nome al file ed eseguiamo il salvataggio sul nostro computer

    5) tutto qui

    più semplice di così...

    ciao a tutti

  2. #2
    molto "primitivo" e poco sicuro


    intanto i campi li parserei con mysq_escape_string e non con addslashes, poi non avere anche la struttura della tabelle ... beh, scomodo e' dir poco .... e altro ancora


    guarda questa che sta 10 palmi sopra
    http://www.phpsoft.it/downloads.php [ MYSQL_Dump ]

    oppure la mia vecchia my_sql, per MySQL e SQLite
    http://www.phpclasses.org/browse/package/1308.html


    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    [supersaibal]Originariamente inviato da andr3a
    molto "primitivo" e poco sicuro


    intanto i campi li parserei con mysq_escape_string e non con addslashes, poi non avere anche la struttura della tabelle ... beh, scomodo e' dir poco .... e altro ancora


    guarda questa che sta 10 palmi sopra
    http://www.phpsoft.it/downloads.php [ MYSQL_Dump ]

    oppure la mia vecchia my_sql, per MySQL e SQLite
    http://www.phpclasses.org/browse/package/1308.html


    [/supersaibal]
    infatti è uno scriptino molto banale, l'intenzione era proprio quella di realizzare una soluzione veloce per soluzioni non sofisticate altrimenti preferisco utilizzare phpMyAdmin...

    Gli script che hai postato sono sicuramente da li conoscevo anche il tuo (ma hai fatto tu qui dentro?)

    E' ovvio che chi ha prerogative importanti utilizza un sistema più adeguato... comunque posso assicurare che fino ad ora non mi ha mai dato problemi...

    mysq_escape_string ok!


  4. #4
    E' ovvio che chi ha prerogative importanti utilizza un sistema più adeguato
    un database e' sempre importante, se non lo fosse non avrebbe motivo di esistere, quindi quando ci sono tantissime classi, quelle postate sono solo 2 esempi, che fanno bene il lavoro di backup, non vedo perche' uno dovrebbe scriversi su 2 files una cosa di quel tipo piuttosto che fare un

    $myclass = &new DatabaseDumper( 'host', 'user', 'password' );
    $myclass->download( 'my_database' );

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    [supersaibal]Originariamente inviato da andr3a
    non vedo perche' uno dovrebbe scriversi su 2 files una cosa di quel tipo piuttosto che fare un

    $myclass = &new DatabaseDumper( 'host', 'user', 'password' );
    $myclass->download( 'my_database' );

    [/supersaibal]


    volevo solo dare un contributo

    ho perso un'occasione per stare zitto...

  6. #6
    [supersaibal]Originariamente inviato da gasmor


    volevo solo dare un contributo

    ho perso un'occasione per stare zitto... [/supersaibal]
    i contributi sono strabene accetti sempre
    il fatto e' che in alcuni casi basta cercare un po' per vedere se vale la pena perdere tempo a creare uno script tra i piu' frequenti ( penso che la questione backups di db sia una delle piu' affrontate tra i programmatori ) e scriverci l' eventuale pillola, oppure usare uno dei mille metodi gia' disponibile in rete ... ma comunque e' sempre un buon motivo per discutere sull' argomento, quindi non ti rattristire

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.