Ir para conteúdo

POWERED BY:

Arquivado

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

Carlos Antoliv

O que há de errado no meu foreach ?

Recommended Posts

Senhores, possuo dois código que realizam o upload do conteúdo de arquivos XML.

 

Num código consigo realizar o upload para o banco e no outro nada acontece. Diz que foi enviado para o banco, mas o banco fica vazio.

 

EIS O CÓDIGO QUE FUNCIONA:

 

 

<?php
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("banco");
ini_set('default_charset', 'UTF-8');
if (isset($_POST['enviar_xml'])) {
if ( is_uploaded_file($_FILES['upl']['tmp_name'])) {
/**A linha abaixo mostra o nome do aquivo que foi selecionado**/
echo "<h1>" . "Arquivo XML: ". $_FILES['upl']['name'] ." Selecionado com Sucesso!." . "</h1>";
echo "<h2>Exibindo Fichas:</h2>";
//$xml_string = file_get_contents($_FILES['upl']['tmp_name']);
$xml_string = simplexml_load_file($_FILES['upl']['tmp_name']);
$dom = new DOMDocument;
$dom->loadXML($xml_string);
}}
$values = array();
$data_cadastro = $_POST["pegaData"];
$f = 0;
foreach($_FILES['upl']['tmp_name'] as $xml_string)
{
$nome = $_FILES['upl']['name'][$f];
$usuario_sessao = $_POST["txt_pegaSessao"];
echo "<b>Arquivo:</b> " . $nome. "<br>";
$xml = simplexml_load_file($xml_string);
//var_dump($xml);
$x = 0;
foreach ($xml->prestadorParaOperadora->loteGuias->guiasTISS->{'guiaSP-SADT'} as $value ) {
$values[0] = "('".$value->cabecalhoGuia->numeroGuiaPrestador."')";
$values[1] = "('".$value->dadosSolicitacao->dataSolicitacao."')";
foreach ($value->procedimentosExecutados->procedimentoExecutado as $value2) {
$values[2] = "('".$value2->procedimento->codigoProcedimento."')";
$values[3] = "('".$value2->procedimento->descricaoProcedimento."')";
$values[4] = "('".$value2->procedimento->codigoTabela."')";
$sql .= implode(',', $values);
//var_dump($sql)."<br>";
$sql = "INSERT INTO tb_xml (numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela, nome_xml, fk_usuario_sessao, data_cadastro)VALUES(".$values[0].", ".$values[1].", ".$values[2].", ".$values[3].", ".$values[4].", '$nome', '$usuario_sessao', '$data_cadastro')";
mysql_query($sql) or exit(mysql_error());
}
$x++;
}
$f++;
}
"<br><br><br>";
echo "<br><span style='font-size:18px; color:#007700;'><b>$f</b> contatos importados com Sucesso!</span>"."<br><br>";
echo "<a href='huf_xml_importar_upload.php'>- IMPORTAR MAIS XML</a>"."<br>";
echo "<a href='../pg_principal'>- VOLTAR AO MENU PRINCIPAL</a>"."<br>";
?>
EIS O CÓDIGO QUE NÃO FUNCIONA:
<?php
/* Conectar com o banco de dados da aplicação */
include("./config/conexao.php");
ini_set('default_charset', 'UTF-8');
if (isset($_POST['enviar_xml'])) {
if ( is_uploaded_file($_FILES['upl']['tmp_name'])) {
/**A linha abaixo mostra o nome do aquivo que foi selecionado**/
echo "<h1>" . "Arquivo XML: ". $_FILES['upl']['name'] ." Selecionado com Sucesso!." . "</h1>";
echo "<h2>Exibindo Fichas:</h2>";
$file = simplexml_load_file($_FILES['upl']['tmp_name']);
}}
$values = array();
//**************************************
$pegaDataAtual = $_POST["pegaData"];
//**************************************
$f = 0;
foreach($_FILES['upl']['tmp_name'] as $file)
{
$nome = $_FILES['upl']['name'][$f];
$usuario_sessao = $_POST["txt_pegaSessao"];
echo "<b>Arquivo:</b> " . $nome. "<br>";
$xml = simplexml_load_file($file);
$x = 0;
// Estou utilizando o codigo abaixo porque com o Simplexml_load_file não consegui ler o XML devido ao prefixo "ans" existir no arquivo.
$doc = new DOMDocument;
$doc->load($file);
$xml2 = $doc->getElementsByTagName( "guiaSP-SADT" );
foreach ($xml2 as $prestador){
$numeroGuiaPrestador = $prestador->getElementsByTagName('numeroGuiaPrestador');
$values[0] = $numeroGuiaPrestador->item(0)->nodeValue;
$dataSolicitacao = $prestador->getElementsByTagName('dataSolicitacao');
$values[1]= $dataSolicitacao->item(0)->nodeValue;
foreach ($prestador as $prestador2){
$codigoProcedimento = $prestador2->getElementsByTagName('codigoProcedimento');
$values[2] = $codigoProcedimento->item(0)->nodeValue;
$descricaoProcedimento = $prestador2->getElementsByTagName('descricaoProcedimento');
$values[3]= $descricaoProcedimento->item(0)->nodeValue;
$codigoTabela = $prestador2->getElementsByTagName('codigoTabela');
$values[4] = $codigoTabela->item(0)->nodeValue;
$sql .= implode(',', $values);
$sql = mysql_query("INSERT INTO tb_xml (numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela, nome_xml, fk_usuario_sessao, data_cadastro) VALUES('".$values[0]."', '".$values[1]."', '".$values[2]."', '".$values[3]."', '".$values[4]."', '$nome', '$usuario_sessao', '$pegaDataAtual')");
mysql_query($sql) or exit(mysql_error());
}
$x++;
}
$f++;
}
"<br><br><br>";
echo "<br><span style='font-size:18px; color:#007700;'><b>$f</b> contatos importados com Sucesso!</span>"."<br><br>";
echo "<a href='xml_importar_upload.php'>- IMPORTAR MAIS XML</a>"."<br>";
echo "<a href='pg_principal'>- VOLTAR AO MENU PRINCIPAL</a>"."<br>";
?>
Neste último código, se eu retirar o segundo foreach, as informações são inseridas no banco normalmente.
Alguém saberia dizer Onde minha lógica está falhando?
abç!

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.