function preencherJason() { document.getElementById('json_prod').value = ''; var arrayProduto = []; var table = $ ('#products_table'); table.find('tr').each(function() { var nodesTd = $ (this).children(); var array = []; $ .each(nodesTd, function() { var txt = $ (this).text(); array.push(txt); }); if (array[0] !== 'Nome do Produto') { var id = array[0].split('-'); id = id[0].trim(); var produto = array[0].split('-'); array[1] = document.getElementById('quant[' + id + ']').value; array[3] = $ ('input[name="servico[' + id + ']"]').val(); var servico = array[3].split('-'); array[4] = $ ('input[name="vlr_servico[' + id + ']"]').val(); arrayProduto.push('{"produto":"' + produto[0].trim() + '",' + '"qt":"' + array[1] + '",' + '"vlr_unitario":"' + array[2].replace(/[ R|$ |.]/gi, '').replace(/[,]/gi, '.') + '",' + '"servico":"' + servico[0].trim() + '",' + '"vlr_servico":"' + array[4].replace(/[ R|$ |.]/gi, '').replace(/[,]/gi, '.') + '",' + '"sub_total":"' + array[5].replace(/[ R|$ |.]/gi, '').replace(/[,]/gi, '.') + '"}'); document.getElementById('json_prod').value = '{"produtos":[' + arrayProduto.toString() + ']}'; } }); }
Aqui é a função que percorre as linhas e colunas e monta array por push, ai passo pra um input hidden, no controler eu pego por `$ _post[‘json_prod’] e passo para o model
public function add($ id_veiculo, $ dt_chegada, $ json, $ valor_total, $ observacao, $ id_company) { $ sql = $ this->db->prepare("INSERT INTO os SET id_veiculo = :id_veiculo, dt_chegada= :dt_chegada," . "valor_total=:valor_total,observacao=:observacao,id_company=:id_company"); $ sql->bindValue(":id_veiculo", $ id_veiculo); $ sql->bindValue(":dt_chegada", date("Y-m-d", strtotime(str_replace('/', '-', $ dt_chegada)))); $ sql->bindValue(":valor_total", $ valor_total); $ sql->bindValue(":observacao", strtoupper($ observacao)); $ sql->bindValue(":id_company", $ id_company); $ sql->execute(); $ ultimo_id = $ this->db->lastInsertId(); if (!empty($ json)) { foreach ($ json as $ firstarray) { foreach ((array)$ firstarray as $ j1) { $ sql = $ this->db->prepare("INSERT INTO item_os set id_produto = :id_produto, qt = :qt, id_servico = :id_servico," . "vlr_servico = :vlr_servico, id_company=:id_company"); $ produto = $ j1["produto"]; $ id_produto = explode('-', $ produto); $ sql->bindValue(":id_produto", trim($ id_produto[0])); $ sql->bindValue(":qt", $ j1["qt"]); if ($ j1["servico"] === '') {$ j1["servico"] = 1;} $ sql->bindValue(":id_servico", $ j1["servico"]); $ vlr_servico = str_replace('R$ ', '', $ j1["vlr_servico"]); $ vlr_servico = str_replace('.', '', $ vlr_servico); $ vlr_servico = str_replace(',', '.', $ vlr_servico); $ sql->bindValue(":vlr_servico", $ vlr_servico); $ sql->bindValue(":id_company", $ id_company); $ sql->execute(); } } } return $ ultimo_id; }
mas está dando erro
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\enginesystem\models\Os.php on line 19
Aqui está o $ json
“{“produtos”:[{“produto”:”2″,”qt”:”1″,”vlr_unitario”:”6.46″,”servico”:”2″,”vlr_servico”:”0.15″,”sub_total”:”6.61″},{“produto”:”45″,”qt”:”1″,”vlr_unitario”:”7.81″,”servico”:”4″,”vlr_servico”:”5.00″,”sub_total”:”12.81″}]}”
Se alquem tiver a solução ou outro jeito de salvar.