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"])) $filename= addslashes($_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