jnejunior 1 Denunciar post Postado Junho 16, 2011 salve pessoal. estava navegando no fórum, achei um script de backup do Fabio Lody (Ele é fera em Photoshop), então dei uma estilizada e implementada, espero que gostem, se alguém melhorar o código favor postar aqui pra galera e pra mim também.. rsrs <?php set_time_limit(0); $con = mysql_connect('localhost', 'root', ''); ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Back-up Banco de Dados</title> <style type="text/css"> * {margin: 0; padding: 0;} #geral {background: #dedede; margin: 20px auto; padding: 10px; width: 1024px;} form {margin: 0 auto; width: 1000px;} fieldset {border: 1px solid #666; margin: 0 0 30px 0;} legend {background: #ad2424; color: #fff; font: 20px Arial, Helvetica, sans-serif; margin: 0 15px; padding: 5px;} select {border: 1px solid #666; font: 13px Arial, Helvetica, sans-serif; margin: 25px 14px 25px 15px; padding: 4px 3px;} input {background: #ad2424; border: 1px solid #ad0000; color: #fff; cursor: pointer; font: bold 11px Arial, Helvetica, sans-serif; padding: 6px 5px;} textarea {border: 1px solid #666; height: 500px; margin: 15px auto; padding: 5px; resize: vertical; width: 990px;} h1 {color: #333; font: 18px "Trebuchet ms", Verdana, sans-serif; margin: 10px 0;} p {color: #222; font: 12px "Trebuchet ms", Verdana, sans-serif;} </style> </head> <body> <section id="geral"> <form method="post" action="" name="form"> <fieldset> <legend>Sistema de Back-up Dinâmico</legend> <select name="banco"> <option value="n">Escolha o Banco de Dados</option> <?php $qrBancos = mysql_query('SHOW DATABASES') or die (mysql_error()); $contaBancos = mysql_num_rows($qrBancos); if($contaBancos > 0){ while($linhaBancos = mysql_fetch_array($qrBancos)){ $nomeBancos = $linhaBancos[0]; echo '<option value="'.$nomeBancos.'">'.$nomeBancos.'</option>'; echo $nomeBancos.'<br/>'; } } else { echo '<option value="">Sem banco de dados!</option>'; } ?> <input type="submit" name="gerar" value="Gerar SQL" /> </select> </fieldset> <?php if(isset($_POST['gerar'])){ if($_POST['banco'] == 'n'){ echo 'Selecione um banco de dados!'; } else { $bd = $_POST['banco']; $qrTabelas = @mysql_list_tables($bd); $contaTabelas = mysql_num_rows($qrTabelas); echo '<h1>SQL Gerado com sucesso!</h1>'; echo "<p>Banco selecionado: $bd</p>"; echo "<p>Número de tabelas: $contaTabelas</p>"; mysql_select_db($bd); $tabelas = mysql_query('SHOW TABLE STATUS'); while($l = mysql_fetch_assoc($tabelas)){ $tabela[$l["Name"]] = $l["Auto_increment"]; } $backup = ""; $tabelas = @mysql_list_tables($bd); while($tab = mysql_fetch_row($tabelas)){ $backup .= "--\n-- Estrutura da Tabela `$tab[0]` \n--\n\nDROP TABLE IF EXISTS `$tab[0]`;\n"; $res = mysql_query("SHOW CREATE TABLE $tab[0]"); while($all = mysql_fetch_assoc($res)){ $str = $all['Create Table']; $str = str_replace(' ', "\t", $str); if(!empty($tabela[$tab[0]])){ $backup .= $str.";\n\n"; } else { $backup .= $str.";\n\n"; } } $data = mysql_query("SELECT * FROM $tab[0]"); if(mysql_num_rows($data)){ $backup .= "--\n-- Extraindo dados da tabela `$tab[0]` \n--\n\n"; } while($dt = mysql_fetch_row($data)){ $backup .= "INSERT INTO `$tab[0]` VALUES ($dt[0]"; for($i = 1; $i < sizeof($dt); $i++){ $backup .= ", '$dt[$i]'"; } $backup .= ");\n"; } $backup .= "\n\n--\n\n"; } echo '<textarea>'; echo $backup; echo '</textarea>'; } } ?> </form> </section> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 16, 2011 Cara, quer melhorar o código ? então não use mysql_ porque no PHP6, ela não vai existir mais use MySQLi ou PDO :) Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 17, 2011 corrigindo, o mysql vai existir, ele só estará em desuso (deprecated)... já que tu deu a ideia, manda ai. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 17, 2011 ... <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" /> </head> <body> <?php $PDO = new PDO( 'mysql:host=localhost', 'root', '...' ); $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); ?> <form method="GET"> Selecione o banco de dados: <select name="database" onchange="this.form.submit()"> <?php foreach( $PDO->query( 'SHOW DATABASES' )->fetchAll() as $index => $data ){ if( $_GET['database'] == $data['Database'] ){ echo '<option value="'.$data['Database'].'" selected>', $data['Database'], '</option>'; }else{ echo '<option value="'.$data['Database'].'">', $data['Database'], '</option>'; } } ?> </select><br /> </form> <form method="POST"> <?php if( !empty( $_GET['database'] ) ){ echo 'Selecione as tabelas: <br /> <select name="table[]" multiple="multiple">'; $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_GET['database'].'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $Tables ); ++$i ){ foreach( $Tables[ $i ] as $index => $data ){ echo '<option value="'.$data.'">'.$data.'</option>'; } } echo '</select><br />'; echo '<input type="submit" value="Fazer Backup" name="backup">'; } ?> </form> <?php echo '<pre>'; if( isset( $_POST['backup'] ) ){ $PDO->query( 'USE `'.$_GET['database'].'`' ); echo '<textarea cols="150" rows="60">'; foreach( $_POST['table'] as $index => $data ){ $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll(); foreach( $create as $createTable){ echo $createTable[ 'Create Table' ], "\n\n"; } $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $select ); ++$i ){ foreach( $select[ $i ] as $field => $value ){ $fields[] = '`'.$field.'`'; if( !is_numeric( $value ) ){ $values[] = sprintf( "'%s'", $value ); }else{ $values[] = intval( $value ); } } printf( 'INSERT INTO `%s`( %s ) VALUES ( %s )', $data, implode( ',', $fields ), implode( ',', $values ) ); echo "\n"; } } echo '</textarea>'; } ?> </body> </html> Não deu tempo de revisar.. Fica legal, se pegar as procedures, porque no create code não consta .. tem que pegar do information_schema, depois eu faço: e retornar +/- isso aqui: DROP PROCEDURE IF EXISTS `getCompradores`; DELIMITER $$ CREATE PROCEDURE `getCompradores`(IN `pid` MEDIUMINT) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN SELECT CONCAT( `usuarios`.`nome`, ' ', `usuarios`.`sobrenome` ) as `nome`, `produtos`.`nome`, CONCAT( `categorias`.`categoria`, '/', `subcategorias`.subcategoria ) as `categoria`, `produtos`.`foto`, `compradores`.`data` as `dataDaCompra`, COUNT(*) as `totalCompras` FROM `compradores` INNER JOIN `usuarios` ON `compradores`.cid = `usuarios`.uid INNER JOIN `produtos` ON `compradores`.pid = `produtos`.pid INNER JOIN `categorias` ON `produtos`.categoria = `categorias`.cid INNER JOIN `subcategorias` ON `produtos`.subcategoria = `subcategorias`.scid WHERE `compradores`.pid = pid GROUP BY `usuarios`.uid ORDER BY `usuarios`.nome DESC; END $$ DELIMITER ; No caso, procedure, triggers, views, events, functions .. essa procedure acima é de um banco de dados do e-commerce que estou fazendo mais o retorno deve ser +/- isso aí, tente pegar agora o SQL dessas funções, aí fica mais maneiro ;) Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 17, 2011 valeu Andrey, ficou lindo, obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 17, 2011 Depois eu vou tentar pegar as Triggers, Views .. etc, aí fica mais completo, e posto aqui pra galera .. Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 17, 2011 valeu Andrei, tu manja pra caramba... Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 18, 2011 Andrey, estava testando o script aqui, e notei que há um erro, quando ele extrai os dados do banco aparece assim: INSERT INTO `nivel`( `idNivel` ) VALUES ( 1 ) INSERT INTO `nivel`( `idNivel`,`nivel` ) VALUES ( 1,'administrador' ) INSERT INTO `nivel`( `idNivel`,`nivel`,`idNivel` ) VALUES ( 1,'administrador',2 ) INSERT INTO `nivel`( `idNivel`,`nivel`,`idNivel`,`nivel` ) VALUES ( 1,'administrador',2,'editor' ) INSERT INTO `nivel`( `idNivel`,`nivel`,`idNivel`,`nivel`,`idNivel` ) VALUES ( 1,'administrador',2,'editor',3 ) INSERT INTO `nivel`( `idNivel`,`nivel`,`idNivel`,`nivel`,`idNivel`,`nivel` ) VALUES ( 1,'administrador',2,'editor',3,'membro' ) já tentei de todo jeito, mas não estou no mesmo nível que você... Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 19, 2011 Corrigido. <!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <?php $PDO = new PDO( 'mysql:host=localhost', 'root', '' ); $PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $PDO->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); ?> <form method="GET"> Selecione o banco de dados: <select name="database" onchange="this.form.submit()"> <?php foreach( $PDO->query( 'SHOW DATABASES' )->fetchAll() as $index => $data ){ if( $_GET['database'] == $data['Database'] ){ echo '<option value="'.$data['Database'].'" selected>', $data['Database'], '</option>'; }else{ echo '<option value="'.$data['Database'].'">', $data['Database'], '</option>'; } } ?> </select><br /> </form> <form method="POST"> <?php if( !empty( $_GET['database'] ) ){ echo 'Selecione as tabelas: <br /> <select name="table[]" multiple="multiple">'; $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_GET['database'].'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $Tables ); ++$i ){ foreach( $Tables[ $i ] as $index => $data ){ echo '<option value="'.$data.'">'.$data.'</option>'; } } echo '</select><br />'; echo '<input type="submit" value="Fazer Backup" name="backup">'; } ?> </form> <?php echo '<pre>'; if( isset( $_POST['backup'] ) ){ $PDO->query( 'USE `'.$_GET['database'].'`' ); echo '<textarea cols="150" rows="60">'; foreach( $_POST['table'] as $index => $data ){ $create = $PDO->query( 'SHOW CREATE TABLE `'.$data.'`' )->fetchAll(); foreach( $create as $createTable){ echo $createTable[ 'Create Table' ], ";\n\n"; } $select = $PDO->query( 'SELECT * FROM `'.$data.'`' )->fetchAll(); for( $i = 0; $i < sizeOf( $select ); ++$i ){ foreach( $select[ $i ] as $field => $value ){ $fields[ $field ] = '`'.$field.'`'; if( !is_numeric( $value ) ){ $values[ ] = sprintf( "'%s'", $value ); }else{ $values[ ] = ( float ) $value; } } $result[ ] = sprintf( '( %s )', implode( ', ', $values ) ); unset( $values ); } printf( "INSERT INTO `%s`( %s ) \nVALUES \n%s;\n\n", $data, implode( ',', $fields ), implode( ", \n", $result ) ); unset( $result, $fields ); } echo '</textarea>'; } ?> </body> </html> Atualizado. Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 19, 2011 Carlos Coelho, eu testei o script, e ainda não esta correto, quando tu seleciona uma tabela funciona certinho, mas se tu seleciona mais de uma sai assim, veja a saída quando selecionei duas tabelas... CREATE TABLE `nivel` ( `idNivel` int(11) NOT NULL AUTO_INCREMENT, `nivel` varchar(13) DEFAULT NULL, PRIMARY KEY (`idNivel`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; INSERT INTO `nivel`( `idNivel`,`nivel` ) VALUES ( 1, 'administrador' ), ( 2, 'editor' ), ( 3, 'membro' );CREATE TABLE `tutorial` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL DEFAULT '', `sobrenome` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1; INSERT INTO `tutorial`( `idNivel`,`nivel`,`id`,`nome`,`sobrenome` ) VALUES ( 1, 'administrador' ), ( 2, 'editor' ), ( 3, 'membro' ), ( 2, 'pedro', 'neto' ), ( 3, 'Ana', 'Banana' ), ( 4, 'Junior', 'Eberhardt' ); Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 19, 2011 jnejunior, realmente cara, não entendo o que você arruma ... ambos os scripts estão funcionando corretamente, testei a versão atualizada do Carlos, e funcionou perfeitamente CREATE TABLE `categorias` ( `cid` smallint(6) NOT NULL AUTO_INCREMENT, `categoria` varchar(25) NOT NULL, `criada` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`cid`), UNIQUE KEY `categoria` (`categoria`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 CHECKSUM=1 ROW_FORMAT=DYNAMIC; INSERT INTO `categorias`( `cid`,`categoria`,`criada` ) VALUES ( 1, 'teste', '2011-06-12 16:04:30' ); CREATE TABLE `subcategorias` ( `scid` smallint(6) NOT NULL AUTO_INCREMENT, `cid` smallint(6) NOT NULL, `subcategoria` varchar(18) NOT NULL, `criada` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`scid`), UNIQUE KEY `subcategoria` (`subcategoria`), KEY `fkcat` (`cid`), CONSTRAINT `fkcat` FOREIGN KEY (`cid`) REFERENCES `categorias` (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 CHECKSUM=1 ROW_FORMAT=DYNAMIC; INSERT INTO `subcategorias`( `scid`,`cid`,`subcategoria`,`criada` ) VALUES ( 1, 1, 'testeSub', '2011-06-12 16:05:17' ), ( 2, 1, 'testeSub2', '2011-06-19 14:42:26' ); Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 22, 2011 só atualizando o post, com ajuda do Andrey adicionei função para zipar o sql, que quiser ta ai... <!DOCTYPE HTML> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Back-up Banco de Dados</title> <style type="text/css"> * {margin: 0; padding: 0;} #geral {background: #dedede; margin: 20px auto; padding: 10px; width: 1024px;} form {margin: 0 auto; width: 1000px;} fieldset {border: 1px solid #666; margin: 0 0 30px 0;} legend {background: #ad2424; color: #fff; font: 20px Arial, Helvetica, sans-serif; margin: 0 15px; padding: 5px;} select {border: 1px solid #666; font: 13px Arial, Helvetica, sans-serif; margin: 25px 14px 25px 15px; padding: 4px 3px;} input {background: #ad2424; border: 1px solid #ad0000; color: #fff; cursor: pointer; font: bold 11px Arial, Helvetica, sans-serif; padding: 6px 5px;} textarea {border: 1px solid #666; height: 500px; margin: 15px 10px 15px 10px; padding: 5px; resize: vertical; width: 992px;} .tabelas {width: 196px;} h1 {color: #333; font: 18px "Trebuchet ms", Verdana, sans-serif; margin: 10px 0;} p {color: #222; font: 12px "Trebuchet ms", Verdana, sans-serif; margin-left: 15px;} </style> </head> <body> <section id="geral"> <?php setlocale(LC_ALL, "pt_BR", "pt_BR.iso-8859-1", "pt_BR.utf-8", "portuguese"); date_default_timezone_set('America/Sao_Paulo'); $PDO = new PDO('mysql:host=localhost', 'root', ''); $PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); ?> <form method="get"> <fieldset> <legend>Sistema de Back-up Dinâmico</legend> <select name="baseDados" onchange="this.form.submit()"> <option>Selecione o banco de dados</option> <?php foreach ($PDO->query( 'SHOW DATABASES' )->fetchAll() as $indice => $dados){ if ($_GET['baseDados'] == $dados['Database']){ echo '<option value="'.$dados['Database'].'" selected>', $dados['Database'], '</option>'; } else { echo '<option value="'.$dados['Database'].'">', $dados['Database'], '</option>'; } } ?> </select> </form> <form method="post"> <?php if (!empty($_GET['baseDados'])){ echo '<p>Selecione uma ou mais tabelas:</p>'; echo '<select name="tabela[]" multiple="multiple" class="tabelas">'; $Tables = $PDO->query( 'SHOW TABLES FROM `'.$_GET['baseDados'].'`' )->fetchAll(); for ($i = 0; $i < sizeOf($Tables); ++$i){ foreach($Tables[$i] as $indice => $dados){ echo '<option value="'.$dados.'">'.$dados.'</option>'; } } echo '</select>'; echo '<input type="submit" value="Gerar SQL" name="gerar_sql">'; } ?> </fieldset> </form> <?php if(isset($_POST['gerar_sql'])) { $PDO->query('USE `'.$_GET['baseDados'].'`'); if(!isset($_POST['tabela'])){ echo 'Selecione uma ou mais tabelas!!!'; } else { echo '<textarea>'; echo $zlib[] = "-- Banco de dados: `" .$_GET['baseDados']. "`"; echo $zlib[] .= "\n-- Criação: " .strftime('%d %b %Y às %H:%M', strtotime(date('d-m-Y H:i'))); foreach($_POST['tabela'] as $indice => $dados){ $criar = $PDO->query('SHOW CREATE TABLE `'.$dados.'`')->fetchAll(); foreach($criar as $criarTabela) { echo $zlib[] .= "\n\n\n\n--\n-- Estrutura da tabela `$dados` \n--\n\n"; echo $zlib[] .= "DROP TABLE IF EXISTS `$dados`; \n"; echo $zlib[] .= $criarTabela['Create Table']. ";\n\n"; } $selecao = $PDO->query('SELECT * FROM `'.$dados.'`')->fetchAll(); for($i = 0; $i < sizeof($selecao); ++$i){ foreach($selecao[$i] as $campo => $valor) { $campos[$campo] = '`'.$campo.'`'; if(!is_numeric($valor)){ $valores[] = sprintf("'%s'", $valor); } else { $valores[] = (float) $valor; } } $resultado[] = sprintf('(%s)', implode(', ', $valores)); unset($valores); } echo $zlib[] .= "\n--\n-- Extraindo dados da tabela `$dados` \n--\n\n"; echo $zlib[] .= sprintf("INSERT INTO `%s` (%s) VALUES \n%s;", $dados, implode(', ', $campos), implode(",\n", $resultado)); unset($resultado, $campos); } echo '</textarea>'; // comprimindo a sql $zipDados = gzencode(implode('', $zlib), 9); $abrir = fopen("bkp_{$_GET['baseDados']}_".date('d-m-Y').".sql.gz", 'w'); fwrite($abrir, $zipDados); fclose($abrir); } } ?> </section> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 23, 2011 Coincidência, tirando alguns detalhes a mais, ficou igual ao que eu já tinha postado em outro tópico http://forum.imasters.com.br/topic/436636-como-usar-php-zip-em-um-script/page__p__1723670#entry1723670 Compartilhar este post Link para o post Compartilhar em outros sites