jnejunior 1 Denunciar post Postado Junho 19, 2011 pessoal, estou ajustando um sistema de backup, e estou com problemas na extração dos dados, eles estão saindo 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' ) quando o correto seria exibir assim, ou algo parecido: INSERT INTO `nivel` (`idNivel`, `nivel`) VALUES (1, 'administrador'), (2, 'editor'), (3, 'membro'); a parte do script que é responsável por esta parte do código é este: 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>'; } Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 19, 2011 Tira o printf de dentro do foreach Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 19, 2011 fiz isso, e não deu certo, pra ser sincero, nem mostrou a extração dos dados Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 19, 2011 ... Engraçado, pois testei o script que te passei no outro fórum, e está funcionando perfeitamente olha o retorno: CREATE TABLE `usuarios` ( `uid` mediumint(16) NOT NULL AUTO_INCREMENT, `nome` varchar(20) NOT NULL, `sobrenome` varchar(32) NOT NULL, `email` varchar(75) NOT NULL, `senha` varchar(40) NOT NULL, `estado` char(2) NOT NULL, `cidade` varchar(49) NOT NULL, `endereco` varchar(52) NOT NULL, `bairro` varchar(46) NOT NULL, `genero` enum('Masculino','Feminino') NOT NULL, `cpf` varchar(14) NOT NULL, `cnpj` varchar(19) NOT NULL, `rg` varchar(18) NOT NULL, `cadastrado` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`uid`), UNIQUE KEY `email` (`email`), KEY `nome` (`nome`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 CHECKSUM=1 ROW_FORMAT=DYNAMIC INSERT INTO `usuarios` (`uid`,`nome`,`sobrenome`,`email`,`senha`,`estado`,`cidade`,`endereco`,`bairro`,`genero`,`cpf`,`cnpj`,`rg`,`cadastrado` ) VALUES ( 1,'Andrey ','Knupp Vital','andreykvital@gmail.com','aeiou','','','','','Masculino','','','','2011-06-18 19:27:28' ) Apenas troquei o 'printf', pra baixo do 'foreach', foi erro meu, não tinha percebido, mais mesmo assim ele está funcionando normalmente Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 19, 2011 Andrey testei aqui de novo mas olha só como saiu: INSERT INTO `nivel` ( `idNivel` , `nivel` ) VALUES (1, 'administrador') INSERT INTO `nivel` ( `idNivel` , `nivel` , `idNivel` , `nivel` ) VALUES (1, 'administrador', 2, 'editor') INSERT INTO `nivel` ( `idNivel` , `nivel` , `idNivel` , `nivel` , `idNivel` , `nivel` ) VALUES (1, 'administrador', 2, 'editor', 3, 'membro') for ($i = 0; $i < sizeof($select); ++$i){ foreach ($select[$i] as $campo => $valor){ $campos[] = '`'.$campo.'`'; if (!is_numeric($valor)){ $valores[] = sprintf("'%s'", $valor); } else { $valores[] = intval($valor); } echo "\n"; } printf('INSERT INTO `%s` ( %s ) VALUES (%s)', $dados, implode(' , ', $campos), implode(', ', $valores)); } Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 19, 2011 o Carlos Coelho deu uma atualizada no script lá, testa lá, não sei o que você arrumou, pois aqui está funcionando perfeitamente ;) Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 19, 2011 Testei o script e estava dando o mesmo problema descrito pelo jnejunior. Achei estranho, pois para você funciona perfeitamente Compartilhar este post Link para o post Compartilhar em outros sites
Leonardo Leal 4 Denunciar post Postado Junho 19, 2011 No outro tópico você disse que continuava com erro, então alterei acrescentando: unset( $fields ); unset( $result ); <!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", $data, implode( ',', $fields ), implode( ", \n", $result ) ); printf( "\n" ); unset( $fields ); unset( $result ); } echo '</textarea>';echo $insert; } ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 19, 2011 Isso mesmo. esqueci de colocar unset Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 19, 2011 Não entendi isso aqui no teu post: echo '</textarea>';echo $insert; onde você define a variável $insert ? ;) Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 19, 2011 Era de uns testes que estava fazendo :huh:, esqueci de remover, estava meio na correria. :ermm: Já atualizei o post ;) Boa observação :D Compartilhar este post Link para o post Compartilhar em outros sites
jnejunior 1 Denunciar post Postado Junho 19, 2011 valeu galera, agora tá funfando legal... Compartilhar este post Link para o post Compartilhar em outros sites