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