Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tainã Lisboa

Leitura de Arquivos XML com php

Recommended Posts

Fiz assim, para ele abri os arquivos xml.

 

Abrir os Arquivos xml = OK

 

Fiz aqui para importa os dados, mas os dados não estão indo para a tabela.

 

Importar.php

 

<?php
/* Conectar com o banco de dados da aplicação */
include "config.php";// inclui o arquivo conf.php
$con = mysql_connect($host,$user,$pass) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($dbname) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank';
$files = glob( sprintf( '%s*.xml', $path ) );
/* Percorre o objeto e salva as informações no banco de dados */
//$x = 0;
foreach( $files as $file ){
$query = 'insert into ranking (Nome, level, Gold, Classe)';
$sxml = new SimpleXMLElement($xml);
foreach ($sxml as $Tudo)
$Nome = (string) $Tudo->Nome;
$level = (string) $Tudo->Level;
$Gold = (string) $Tudo->Gold;
$Classe = (string) $Tudo->Classe;
$tmpQuery = sprintf($query, $Nome, $level, $Gold, $Classe);
echo sprintf('Executando query: %s%s', $tmpQuery, "\n");
mysql_query($tmpQuery);
}
?>

Exibir.php

<?php
include ("conectar.php");
// Colocando o Início da tabela
?><body bgcolor="#000000" text="#FF9933" link="#FF9933">
<p>Ranking - Confira aqui os 10 Players mais fortes do server!</p>
<table width="362" height="86" border="1" cellspacing="10">
<tr>
<td width="170" height="24"><b>Classe</b></td>
<td width="204"><b>Nick</b></td>
<td width="204"><b>Level</b></td>
</tr>
<?php
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT `Nome`,`Level` ,`Classe` FROM ranking ORDER BY `Level` DESC LIMIT 10";
$resultado = mysql_query($query) or die(mysql_error());
while ($linha = mysql_fetch_array($resultado)) {
?>
<tr>
<td> <?php
if($linha['Classe'] == 0){
echo '<img src="http://imageshack.us/a/img705/4307/41145501.gif" alt="" class="img-border">';
} else if($linha['Classe'] == 1){
echo '<img src="http://imageshack.us/a/img690/8054/15060043.gif" alt="" class="img-border">';
}else if($linha['Classe'] == 2){
echo '<img src="http://imageshack.us/a/img842/1372/55905850.gif" alt="" class="img-border">';
} else if($linha['Classe'] == 3){
echo '<img src="http://imageshack.us/a/img839/9764/20787621.gif" alt="" class="img-border">';
} ?></td>
<td> <?php echo $linha['Nome']; ?></td>
<td> <?php echo $linha['Level']; ?></td>
</tr>
<?php
}
$query2 = "SELECT COUNT(*) as user FROM ranking";
$resultado2 = mysql_query($query2) or die(mysql_error());
while ($linha2 = mysql_fetch_array($resultado2)) {
?>
</table>
<p>Total de Contas: <?php echo $linha2['user']; ?></p>
<p>By oxablod.<br>
Ultimate Destiny 7.53
</p>
<?php
}
?>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O botão de Editar sumiu então peso desculpas pelo Double post, fiz o seguinte então ta ai o Código e o Erro que esta mostrando agora, e ainda não importa para a BD.

 

Importar.php

 

<?php
error_reporting(E_ALL);
/* Conectar com o banco de dados da aplicação */
include "conectar.php";// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
/* Percorre o objeto e salva as informações no banco de dados */
//$x = 0;
foreach( $files as $file ){
$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($file->level,$file->Nome,$file->Gold,$file->Classe);" );
die(print_r($file)); // Mostra o Diretorio
return (mysql_affected_rows() == 1) ? true : false;
//$sxml = new SimpleXMLElement($xml);
foreach ($sxml as $file)
$level = (string) $file->level;
$Nome = (string) $file->Nome;
$Gold = (string) $file->Gold;
$Classe = (string) $file->Classe;
$tmpQuery = sprintf($query, $level, $Nome, $Gold, $Classe);
echo sprintf('Executando query: %s%s', $tmpQuery, "\n");
mysql_query($tmpQuery);
}
?>

Exibir.php

 

 
<?php
include ("conectar.php");
// Colocando o Início da tabela
?><body bgcolor="#000000" text="#FF9933" link="#FF9933">
<p>Ranking - Confira aqui os 10 Players mais fortes do server!</p>
<table width="362" height="86" border="1" cellspacing="10">
<tr>
<td width="170" height="24"><b>Classe</b></td>
<td width="204"><b>Nick</b></td>
<td width="204"><b>Level</b></td>
</tr>
<?php
// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT `Nome`,`Level` ,`Classe` FROM ranking ORDER BY `Level` DESC LIMIT 10";
$resultado = mysql_query($query) or die(mysql_error());
while ($linha = mysql_fetch_array($resultado)) {
?>
<tr>
<td> <?php
if($linha['Classe'] == 0){
echo '<img src="
" alt="" class="img-border">';
} else if($linha['Classe'] == 1){
echo '<img src="
" alt="" class="img-border">';
}else if($linha['Classe'] == 2){
echo '<img src="
" alt="" class="img-border">';
} else if($linha['Classe'] == 3){
echo '<img src="
" alt="" class="img-border">';
} ?></td>
<td> <?php echo $linha['Nome']; ?></td>
<td> <?php echo $linha['Level']; ?></td>
</tr>
<?php
}
$query2 = "SELECT COUNT(*) as user FROM ranking";
$resultado2 = mysql_query($query2) or die(mysql_error());
while ($linha2 = mysql_fetch_array($resultado2)) {
?>
</table>
<p>Total de Jogadores Cadastrados no Ranking: <?php echo $linha2['user']; ?></p>
<p>By oxablod.<br>
Ultimate Destiny 7.53
</p>
<?php
}
?>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>

 

Erro

 

erro1e.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso acontece porque $file não é um objeto SimpleXMLElement, vc deveria, dentro do foreach, utilizar o path do arquivo para criar tal objeto.

foreach( $files as $file )
{
    $xml = simplexml_load_file( $file );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Isso acontece porque $file não é um objeto SimpleXMLElement, vc deveria, dentro do foreach, utilizar o path do arquivo para criar tal objeto.

foreach( $files as $file )
{
    $xml = simplexml_load_file( $file );
}

 

Bom eu fiz assim e ainda continua os erros.

 

 

<?php
ini_set('allow_url_fopen', 'on');
error_reporting(E_ALL);
/* Conectar com o banco de dados da aplicação */
include ("conectar.php");// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
foreach( $files as $file ){
$temp = file_get_contents($files);
$XmlObj = simplexml_load_string($temp);
$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($level,$Nome,$Gold,$Classe);" );
//die(print_r($file)); // Mostra o Diretorio
//return (mysql_affected_rows() == 1) ? true : false;
$level = (string) $file->level;
$Nome = (string) $file->Nome;
$Gold = (string) $file->Gold;
$Classe = (string) $file->Classe;
}
?>

 

Erros

 

erro2v.png

 

erro3d.pngFaltou esse :

Notice: Undefined variable: Gold in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 18

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu mudei o Script assim, se eu coloca pra ele puxar o nome.txt ele pucha mas ai eu gostaria de puxar todos os txt do diretório e não to conseguindo.

 

 

 

<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Primeiro Projeto PHP</title>
</head>
<body>
<br />
<div style="text-align: left;">
<br />
<?php
$MySQLi = new MySQLi( 'localhost' , 'root' , 'vertrigo' , 'ranking' );
$fHandle = fopen( 'F:/RealseUltimateDestiny/TMSRV/run/Rank/%s*.txt' , 'r' );
if ( !$fHandle ) {
echo 'Não foi possível abrir o arquivo para leitura !';
} else {
while ( !feof( $fHandle ) ) {
$linhas [ ] = reset( fscanf( $fHandle , '%s' ) );
}
$linhas = array_chunk( $linhas , 4 );
for ( $i = 0; $i < count( $linhas ); ++$i ) {
array_walk( $linhas[ $i ] , function( &$linhas ) {
$linhas = !is_null( $linhas ) && !is_numeric( $linhas ) ? sprintf( "'%s'" , $linhas ) : intval( $linhas );
} );
$insert [ ] = sprintf( '( %s )' , implode( ', ' , $linhas[ $i ] ) );
}
$SQL = sprintf( 'INSERT INTO `ranking`( `Nome`, `level`, `Gold`, `Classe`) VALUES %s' , implode( ',' , $insert ) );
$prepare = $MySQLi->prepare( $SQL );
if ( $prepare->execute() ) {
printf( 'Foram inseridos <b>%d</b> registros no banco' , $prepare->affected_rows );
$prepare->close();
}
$MySQLi->close();
}
?>
</div>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, vc está errando no básico. A mensagem é clara, vc está tentando passar um array onde deveria ser uma string [inline]$temp = file_get_contents($files);[/inline]. A variável que deveria ser informada é $file.

 

Outra coisa [inline]$query = ( "INSERT INTO ranking (level, Nome, Gold, Classe) VALUES ($level,$Nome,$Gold,$Classe);" ); [/inline]

 

:seta: mysql_ query

A consulta não deve terminar com um ponto e vírgula.

 

De onde saiu as variáveis $level, $Nome, $Gold, $Classe? Deveria ser "extraida" do objeto SimpleXMLElement gerado pela função simplexml_ load_ file.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz assim agora

 

 

 

<?php
ini_set('allow_url_fopen', 'on');
error_reporting(E_ALL);
/* Conectar com o banco de dados da aplicação */
include ("conectar.php");// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
foreach( $files as $file ){
$temp = file_get_contents($file);
$XmlObj = simplexml_load_string($temp);
$Level = (string) $file->Level;
$Nome = (string) $file->Nome;
$Gold = (string) $file->Gold;
$Classe = (string) $file->Classe;
$mysql_query = ( 'INSERT INTO ranking (Level, Nome, Gold, Classe)' );
//die(print_r($file)); // Mostra o Diretorio
//return (mysql_affected_rows() == 1) ? true : false;
}
?>
ERROS
Notice: Trying to get property of non-object in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 20
Notice: Trying to get property of non-object in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 21
Notice: Trying to get property of non-object in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 22
Notice: Trying to get property of non-object in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 23

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, erro básico. Você tem que usar o objeto SimpleXMLElement $XmlObj e não a string $file que contém apenas o caminho para o arquivo xml

 

$Level = $XmlObj->Level;
$Nome = $XmlObj->Nome;
$Gold = $XmlObj->Gold;
$Classe = $XmlObj->Classe;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código está assim agora.

 

 

 

<?php
ini_set('allow_url_fopen', 'on');
error_reporting(E_ALL);
/* Conectar com o banco de dados da aplicação */
include ("conectar.php");// inclui o arquivo conf.php
$con = mysql_connect($serv,$user,$password) or die ("Não foi possível a conexão com o servidor de banco de dados");// ciar uma conexao com o banco de dados
mysql_select_db($db) or die ("Não foi possível encontrar o banco de dados especificado");
$path = 'F:/RealseUltimateDestiny/TMSRV/run/Rank/';
$files = glob( sprintf( '%s*.xml', $path ) );
foreach( $files as $file ){
$temp = file_get_contents($file);
$XmlObj = simplexml_load_string($temp);
$mysql_query = ('INSERT INTO ranking (Level, Nome, Gold, Classe)')
$Level = $XmlObj->Level;
$Nome = $XmlObj->Nome;
$Gold = $XmlObj->Gold;
$Classe = $XmlObj->Classe;
//die(print_r($file)); // Mostra o Diretorio
//return (mysql_affected_rows() == 1) ? true : false;
}
?>

Único erro foi

Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files (x86)\VertrigoServ\www\Exemplos\Ex17.php on line 22

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, ainda tem coisa errada. <_<

 

Apenas falta de atenção.

 

Veja

$mysql_query  =  ('INSERT INTO ranking (Level, Nome, Gold, Classe)')  
 
$Level = $XmlObj->Level;
$Nome = $XmlObj->Nome;
$Gold = $XmlObj->Gold;
$Classe = $XmlObj->Classe;

 

Essa instrução SQL está errada, onde está o resto [inline]VALUES ($level,$Nome,$Gold,$Classe)[/inline]

 

Outra coisa, vc deve definir as variáveis antes de usar

$Level = $XmlObj->Level;
$Nome = $XmlObj->Nome;
$Gold = $XmlObj->Gold;
$Classe = $XmlObj->Classe;

$mysql_query  = ("INSERT INTO ranking (Level, Nome, Gold, Classe) VALUES ($Level,$Nome,$Gold,$Classe)");
 

 

Ainda faltou executar a instrução usando mysql_ query

 

mysql_query( $mysql_query );

 

Alias, esta extensão estará obsoleta a partir do PHP 5.5.0, e será removida no futuro. Em vez disso, deve ser utilizada MySQLi ou PDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.