Web service, play dice in empty field bd error

Asked

Viewed 186 times

0

My 3° foreach is creating 2 arrays with null values, I wanted to understand why, so I am not able to enter in the database giving a var_dump($product) it shows me the right results, the 3 products I have in xml, but when I create the array to insert into the database it is creating 5 arrays and 2 comes with null values. I do not know if it is logic error or something else. It returns me in the following way:

array(6) {
  ["id_produto"]=>
  string(0) ""
  ["nome"]=>
  string(0) ""
  ["descricao"]=>
  string(0) ""
  ["valor"]=>
  string(0) ""
  ["tipo_produto_id_tipo"]=>
  string(1) "3"
  ["categoria_id_categoria"]=>
  string(1) "2"
}
array(6) {
  ["id_produto"]=>
  string(1) "1"
  ["nome"]=>
  string(12) "BATATA FRITA"
  ["descricao"]=>
  string(26) "BATATA FRITA MUITO DELIOSA"
  ["valor"]=>
  string(6) "6.5000"
  ["tipo_produto_id_tipo"]=>
  string(1) "3"
  ["categoria_id_categoria"]=>
  string(1) "2"
}
array(6) {
  ["id_produto"]=>
  string(0) ""
  ["nome"]=>
  string(0) ""
  ["descricao"]=>
  string(0) ""
  ["valor"]=>
  string(0) ""
  ["tipo_produto_id_tipo"]=>
  string(1) "3"
  ["categoria_id_categoria"]=>
  string(1) "2"
}
array(6) {
  ["id_produto"]=>
  string(1) "2"
  ["nome"]=>
  string(21) "HAMBURGER DA TIA FILO"
  ["descricao"]=>
  string(26) "DELICIOSO HAMBURGER DA TIA"
  ["valor"]=>
  string(6) "3.9100"
  ["tipo_produto_id_tipo"]=>
  string(1) "3"
  ["categoria_id_categoria"]=>
  string(1) "2"
}
array(6) {
  ["id_produto"]=>
  string(1) "3"
  ["nome"]=>
  string(8) "X-SALADA"
  ["descricao"]=>
  string(8) "X-SALADA"
  ["valor"]=>
  string(6) "5.0000"
  ["tipo_produto_id_tipo"]=>
  string(1) "3"
  ["categoria_id_categoria"]=>
  string(1) "2"
}

function setProduto($xml) {

        $ci = get_instance();

        gravarDados($xml."\n",'setProduto');

        $xml = '<Grupos><Grupo Grupo="ALIMENTAR"><SubGrupo SubGrupo="ACOMPANHAMENTO"><observacoes /><produto codigo="1" nome="BATATA FRITA" descricao="BATATA FRITA MUITO DELIOSA" preco="6.5000" permiteFracao="0" cobraServico="1" modoPreparo=""><adicionais /></produto></SubGrupo><SubGrupo SubGrupo="LANCHES"><observacoes /><produto codigo="2" nome="HAMBURGER DA TIA FILO" descricao="DELICIOSO HAMBURGER DA TIA" preco="3.9100" permiteFracao="0" cobraServico="1" modoPreparo=""><adicionais /></produto><produto codigo="3" nome="X-SALADA" descricao="X-SALADA" preco="5.0000" permiteFracao="0" cobraServico="1" modoPreparo=""><adicionais /></produto></SubGrupo></Grupo></Grupos>';

        $dados = simplexml_load_string($xml);


        foreach ($dados as $grupo) {//mostra os grupos existentes
            $grupos = $ci->Cadastros_model->busca_todos('categoria');
            //echo $grupo->attributes()->Grupo;
            //var_dump($grupo->attributes()->Grupo);
            //var_dump($grupo);
            foreach ($grupo as $subgrupo) {//mostra cada subgrupo

                            $arraysubgrupos = array(
                                'nome' => "".$subgrupo->attributes()->SubGrupo."", 
                                );
                            //$ci->Cadastros_model->incluir('tipo_produto', $arraysubgrupos);
                            $id_produto = mysql_insert_id();


                            $arraygrupos = array(
                                    'nome' => "".$grupo->attributes()->Grupo."",
                                    'tipo_id_tipo_produto'  =>  "".$id_produto.""     
                                );
                           // $ci->Cadastros_model->incluir('categoria', $arraygrupos);
                            $id_grupo = mysql_insert_id();

                            //var_dump($subgrupo);

                foreach ($subgrupo as $produto) {//exibi os produtos
                    //echo $produto->attributes()->nome;
                    //echo $produto->attributes()->codigo;
                        //var_dump($produto);
                            $arrayprodutos = array(
                                'id_produto' => ''.$produto->attributes()->codigo.'',
                                'nome'   =>  "".$produto->attributes()->nome."",
                                'descricao' =>  "".$produto->attributes()->descricao."",
                                'valor' =>  "".$produto->attributes()->preco."",
                                'tipo_produto_id_tipo' => '3',
                                'categoria_id_categoria' => '2'
                                );
                            $ci->Cadastros_model->incluir('produtos', $arrayprodutos);
                            print_r($ci->db->last_query());
                            echo "<br>";
                } 
            }   
        }

    }

2 answers

1


His latest foreach (more internal), is running through a $subgroup in search of products, but within the subgroup there is also an item called observation, so he is bringing data of "observation" and "product".

To correct, make the following change:

Of

foreach ($subgrupo as $produto) {//exibi os produtos

To

foreach ($subgrupo->produto as $produto) {//exibi os produtos

0

Friend, I have a kick, try to open a transaction before making the Inserts on foreach:

$this->db->trans_start();

And close it after the foreach:

$this->db->trans_complete();
  • I will try Alessandro.

  • It didn’t work Alessandro more thank you for trying, I think maybe there may be some logic error, but it is very strange because giving the Excerpts they present me all the data I need normally.

  • I know how it is @Fortunato , I happened something similar and ended up solving with transaction. Good luck to find what is occurring

Browser other questions tagged

You are not signed in. Login or sign up in order to post.