Web service, play data in bd error empty field

0

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

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>";
                } 
            }   
        }

    }
    
asked by anonymous 07.03.2014 / 13:04

2 answers

1

Your last (innermost) foreach is traversing a $ subgroup for products, but within the subgroup there is also an item called observation, so it is bringing "observation" and "product" data. / p>

To fix, make the following change:

From

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

To

foreach ($subgrupo->produto as $produto) {//exibi os produtos
    
05.04.2014 / 14:04
0

Friend, I have a kick, try opening a transaction before inserting foreach :

$this->db->trans_start();

And close it after foreach :

$this->db->trans_complete();
    
07.03.2014 / 13:28