Gravar arquivos de log ao executar comandos SQL no PHP.
MySQL, PHP, SQL, XML Comentar >> Marcelo KorjenioskiNo código a seguir segue um exemplo de como ler um arquivo XML e gravar os dados no banco de dados MySQLe gerar um log da query executada.
Neste exemplo costa apenas as funções de INSERT, DELETE, UPDATE e SELECT.
Para facilitar a vida eu já deixei no código as query para criar o banco e as tabelas utilizadas para executar o código. Eu deixei os valores default de conexão com o MySQL altere os dados da conexão caso esteja usando outra configuração.
A idéia de criar um log das querys executadas no sistema servem para detectar erros e também como um registro caso alguem valor tenha sito movimentado de forma errada.
<?php
// Fazendo a conexão com o servidor MySQL
//Caso queira apenas criar o arquivo XML mude valor para false.
$ativar_conexao = true;
if ($ativar_conexao == true) {
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("192.168.1.210","root","dj@jdl#.") or die('falha ao conectar');
// Verifica se o banco de dados existe antes de criar.
$query = 'CREATE DATABASE IF NOT EXISTS test';
if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
}
mysql_select_db("test",$conexao) or die('falha ao selecionar db');
// Verifica se a tabela existe antes de criar.
$query = "CREATE TABLE IF NOT EXISTS tb_produtos (
pk_produtos int not null auto_increment primary key,
codigo varchar(255),
nome varchar(255),
preco decimal(12,2),
quantidade int(11))";
if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
}
}
// Fim comentario
$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
$items = $doc->getElementsByTagName('produto');
// Defino o nome tags no arquivo XML que eu desejo.
$campos = array('nome','preco','quantidade');
$query = NULL;
$query .= "insert into tb_produtos (codigo,nome,preco,quantidade) values ";
for ($i=0; $i < $items->length; $i++) {
$value = NULL;
$value .= " (";
$codigo = $items->item($i)->getAttribute('id');
$value .= "'$codigo',";
echo $items->item($i)->getAttribute('id') , '<br />';
// Busca por elementos definidos no array
$valor = array();
foreach ($campos as $campo) {
$dado = "'" . $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue . "'";
// Verifico se o campo é preco pq no arquivo xml o preço esta com virgula e para inserir no banco é necessario ponto
if($campo == 'preco') {
// Faz a troca de virgula por ponto.
$dado = str_replace(',','.',$dado);
}
// pego o valor de cada tag e adiciono em um array para fazer o insert no banco.
$valor[] = $dado;
echo $items->item($i)->getElementsByTagName($campo)->item(0)->tagName , ': ';
echo $items->item($i)->getElementsByTagName($campo)->item(0)->nodeValue , '<br />';
}
// uso o implode para criar uma string com os valores separados por vírgula.
$value .= implode(',', $valor);
$value .= ') ';
// Adiciono os dados do valores do insert em array.
$values[] = $value;
echo '<hr>';
}
// uso o implode para criar uma string com os valores separados por vírgula.
$query .= implode(',', $values);
// mostra a query criada na tela.
echo $query;
if ($ativar_conexao == true) {
// GRAVA LOG do arquivo executado mesmo se query estiver errada.
if((stristr($query, 'DELETE') || stristr($query, 'UPDATE') || stristr($query, 'INSERT') || stristr($query, 'SELECT'))) {
// Verifica se a tabela existe antes de criar.
$query_log = "CREATE TABLE IF NOT EXISTS tb_log (
pk_log int not null auto_increment primary key,
tx_sql text,
acao ENUM('DELETE', 'UPDATE', 'INSERT','SELECT')
);";
if(!mysql_query($query_log,$conexao)) {
echo 'falha ao criar tabela<br />';
}
if(stristr($query, 'DELETE')) {
$acao = 1;
} elseif(stristr($query, 'UPDATE')) {
$acao = 2;
} elseif(stristr($query, 'INSERT')) {
$acao = 3;
} elseif(stristr($query, 'SELECT')) {
$acao = 4;
}
$query_log = "INSERT INTO tb_log (tx_sql,acao) VALUES
(\"$query\",$acao)";
if(!mysql_query($query_log,$conexao)) {
echo 'falha ao inserir dados de log<br />';
}
}
if(!mysql_query($query,$conexao)) {
echo 'falha ao inserir dados<br />';
}
}
Crie um arquivo produtos.xml em um editor de texto e coloque o código abaixo.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <catalogo> <produto id='p1'> <nome>Caderno</nome> <preco>2,00</preco> <quantidade>100</quantidade> </produto> <produto id='p2'> <nome>Caneta</nome> <preco>1,00</preco> <quantidade>200</quantidade> </produto> <produto id='p3'> <nome>Lapis</nome> <preco>0,50</preco> <quantidade>50</quantidade> </produto> <produto id='p4'> <nome>Livro Matematica</nome> <preco>11,00</preco> <quantidade>10</quantidade> </produto> <produto id='p5'> <nome>Apontador</nome> <preco>1,00</preco> <quantidade>20</quantidade> </produto> </catalogo>
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.

eaw cara muito show ai seu site ! cara pelo amo de deus
eu to criando uma pagina fake do msn nesse site aki ô >
ww.justfree.com ele tem como upar php e etc..
intão continuando eu ja coloquei minha pagina fake la do msn e login.php só que quando eu faço os teste la na pagina ai nada fica gravado ou seja as senhas e –mail nada
ai queria saber o que ta falantando para gravar as senhas e e-mail das pessoas que logarem
tem como me ajudar ai por favor
ti agradeço si puder me ajudar um abraço !
Me diga qual erro esta dando. Nesta URL que você postou esta dando erro de conexão com o banco de dados.