quattro Posted August 30, 2011 Report Share Posted August 30, 2011 :blink: alguém poderia me ajudar com esse codigo, não consigo printar o valor na tela do carrinho, quando fecho os colchetes depois do "echo $resultado" da valor indefinido, se não fechar da o erro/////////////////////////////////////////////////////////////R$ 0,00 Total com frete R$ Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 32Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 33193,90//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////$cod_servico = 40010;$cep_origem = "05046000";$cep_destino = $_POST['cepDestino'];$peso = $_POST['peso'];$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=.$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";$correios_info = file($correios);foreach($correios_info as $info){ if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){ $frete = $tarifa[1]; }}$troca_isso = array(',');$por_isso = array('.');$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST['semFrete]);$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');echo $resultado; Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted August 30, 2011 Report Share Posted August 30, 2011 O erro informado diz que a variável não está definida, logo, o preg_match não está achando nada no retorno dos correios, verifique se está retornando algo e dentro do padrão de ER que você postou. Quote Link to comment Share on other sites More sharing options...
0 quattro Posted August 30, 2011 Author Report Share Posted August 30, 2011 O erro informado diz que a variável não está definida, logo, o preg_match não está achando nada no retorno dos correios, verifique se está retornando algo e dentro do padrão de ER que você postou.desculpe minha ignoraca ESerra, não sou muito avançado em php, pode me fizer como posso fazer isso. Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted August 30, 2011 Report Share Posted August 30, 2011 Troca:$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";Por:$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";echo $correios;Posta aqui o resultado. Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 Troca:$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";Por:$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=".$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";echo $correios;Posta aqui o resultado.http://ws.correios.com.br/encomendas/preço...mp;resposta=xml Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted September 1, 2011 Report Share Posted September 1, 2011 Se você tentar acessar o endereço que passou vai ver que ele nem é encontrado... ai está o problema.É provável que esta seja uma das URLs antigas, aqui você pode pegar o manual dos correios que tem os dados atuais do webservice. Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 Se você tentar acessar o endereço que passou vai ver que ele nem é encontrado... ai está o problema.É provável que esta seja uma das URLs antigas, aqui você pode pegar o manual dos correios que tem os dados atuais do webservice.na verdade a url tem que pegar os dados, estou tentando achar o erro no preg_match, pois as informações passam nas demais funções só que o calculo para ali...vou postar pra você ver...........................................................$correios_info = file($correios);foreach($correios_info as $info){if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){$frete = $tarifa[1];}}.......................................................dei um echo na $correios e ele captou os dados via form..e parou ai na linha de cima Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted September 1, 2011 Report Share Posted September 1, 2011 A questão é que URL em que você está tentando pegar os dados está errada... se você pegar aquela linha da URL e colar no nevegador deveria ver um XML com os dados do frete e no lugar disto está retornando um XML. Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 A questão é que URL em que você está tentando pegar os dados está errada... se você pegar aquela linha da URL e colar no nevegador deveria ver um XML com os dados do frete e no lugar disto está retornando um XML.acho que ta cruzado a duvida...rs..veja/////capta as info via post do meu carrinho$cep_origem = "05046000";$cep_destino = $_POST[cepDestino];$peso = $_POST[peso];////passa pela url dos correios $correios = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=".$cep_origem."&sCepDestino=".$cep_destino."&nVlPeso=".$peso."&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml ";////veja que ele pegou os dados//ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml //////// o problema esta aqui ele não ta calculando para o retorno do meu arquivo$xml = file($correios);foreach($xml as $info){if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){$frete = number_format($tarifa[1],2,',','.');}}$troca_isso = array(',');$por_isso = array('.');$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST[semFrete]);$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');echo $resultado;//////então ele volta pro meu carrinho com a resposta em js///////////////// <script language="javascript" type="text/javascript"> $(document).ready(function(){ $('.buscaValorFrete').click(function(){ $('.vlrComFrete').html('<img src="images/spinner20.gif"/>'); $('.vlrFrete').html('<img src="images/spinner20.gif"/>'); if($('input[name=cep]').val() != ''){ var semofrete = "<?php echo $semfrete; ?>"; var peso_produtos = "<?php echo $totalpeso; ?>"; $.ajax({ url:'frete.php', cache:false, type:'POST', data:'cepDestino='+$('input[name=cep]').val()+'&peso='+peso_produtos+'&semFrete='+semofrete, success:function(data){ var v = data.split('-'); $('.vlrComFrete').html('R$ '+v[0]); $('.vlrFrete').html('R$ '+v[1]); } }); } }); }); </script>//////////o resultado que ele me da é193,00(vlrComFrete) - 00,00(vlrFrete)teria que ser por ex:203,00 (vlrComFrete) - 10,00 (vlrFrete)///////////////////////A questão é que URL em que você está tentando pegar os dados está errada... se você pegar aquela linha da URL e colar no nevegador deveria ver um XML com os dados do frete e no lugar disto está retornando um XML.acho que ta cruzado a duvida...rs..veja/////capta as info via post do meu carrinho$cep_origem = "05046000";$cep_destino = $_POST[cepDestino];$peso = $_POST[peso];////passa pela url dos correios $correios = "http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=".$cep_origem."&sCepDestino=".$cep_destino."&nVlPeso=".$peso."&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml ";////veja que ele pegou os dados//ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&nVlDiametro=0&StrRetorno=xml //////// o problema esta aqui ele não ta calculando para o retorno do meu arquivo$xml = file($correios);foreach($xml as $info){if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){$frete = number_format($tarifa[1],2,',','.');}}$troca_isso = array(',');$por_isso = array('.');$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST[semFrete]);$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');echo $resultado;//////então ele volta pro meu carrinho com a resposta em js///////////////// <script language="javascript" type="text/javascript"> $(document).ready(function(){ $('.buscaValorFrete').click(function(){ $('.vlrComFrete').html('<img src="images/spinner20.gif"/>'); $('.vlrFrete').html('<img src="images/spinner20.gif"/>'); if($('input[name=cep]').val() != ''){ var semofrete = "<?php echo $semfrete; ?>"; var peso_produtos = "<?php echo $totalpeso; ?>"; $.ajax({ url:'frete.php', cache:false, type:'POST', data:'cepDestino='+$('input[name=cep]').val()+'&peso='+peso_produtos+'&semFrete='+semofrete, success:function(data){ var v = data.split('-'); $('.vlrComFrete').html('R$ '+v[0]); $('.vlrFrete').html('R$ '+v[1]); } }); } }); }); </script>//////////o resultado que ele me da é193,00(vlrComFrete) - 00,00(vlrFrete)teria que ser por ex:203,00 (vlrComFrete) - 10,00 (vlrFrete)/////////////////////// Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted September 1, 2011 Report Share Posted September 1, 2011 A sua expressão regular:if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){está procurando por preco_posta, mas o valor do frete está em Valor. Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 A sua expressão regular:if(preg_match('/\ (.*)\<\/preco_postal>;/',$info,$tarifa)){está procurando por preco_posta, mas o valor do frete está em Valor.seriaforeach($xml as $info){ if(preg_match('/\ (.*)\<\/valor>;/',$info,$tarifa)){ $frete = number_format($tarifa[1],2,',','.'); }}mas o print vem ainda assimR$ 0,00http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?&sCepOrigem=05046000&sCepDestino=13348250&nVlPeso=3,00&sCdMaoPropria=n&sCdAvisoRecebimento=n&nCdServico=40010&StrRetorno=xml (*aparece porque dei um echo no $correios) Quote Link to comment Share on other sites More sharing options...
0 ESerra Posted September 1, 2011 Report Share Posted September 1, 2011 Olhei aqui e o retorno dos correios está informando: O comprimento não pode ser inferior a 18 cm.Você vai ter que informar as dimensões (largura, comprimento, altura) conforme consta no manual que passei lá em cima.EDIT: não sei se ainda função, mas postei no meu blog a alguma tempo atrás uma função que retornava o valor correto:http://www.edgarserra.com/15/funcao-para-c...-atualizado.jsp Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 Olhei aqui e o retorno dos correios está informando: O comprimento não pode ser inferior a 18 cm.Você vai ter que informar as dimensões (largura, comprimento, altura) conforme consta no manual que passei lá em cima.EDIT: não sei se ainda função, mas postei no meu blog a alguma tempo atrás uma função que retornava o valor correto:http://www.edgarserra.com/15/funcao-para-c...-atualizado.jsptentei de outra forma, so não consigo concatenar o resultado xml com o php pra retornar pro carrinho////////////////////////PEGAMOS OS DADOS DE RETORNO XML COM O SIMPLEXML DO PHP $dados_correios = simplexml_load_file($URLcorreios);$total1 = $dados_correios->xpath('cServico/Valor');$total1 = floatval(str_replace(',', '.', $total1[0])); $total1 = $total1 + 2.00;$PrazoEntrega = $dados_correios->xpath('cServico/PrazoEntrega'); $erros = $dados_correios->xpath('cServico/Erro'); $ValorAvisoRecebimento = $dados_correios->xpath('cServico/ValorAvisoRecebimento'); // //IMPRIME A RESPOSTA COM O VALOR DO FRETE$resposta[valor] = number_format($total1, 2, ',', '.');$frete = $resposta[valor];$vlrSemFrete = $_POST['semFrete'];$vlrComFrete = (number_format($vlrSemFrete+$frete, 2,',','.'));$resultado = $vlrComFrete;echo $resultado;echo $correios;//////////////////da valor undefined no fretemas o total ele pega e ainda soma com o 2 que coloquei Quote Link to comment Share on other sites More sharing options...
0 quattro Posted September 1, 2011 Author Report Share Posted September 1, 2011 resolvido adaptei esse codhttp://andersongarcia.com/post/calculando-...rreios-com-php/e consegui resolver no meu carrinhovlw amigo por me ajudar...abçs :rolleyes: Quote Link to comment Share on other sites More sharing options...
Question
quattro
:blink:
alguém poderia me ajudar com esse codigo, não consigo printar o valor na tela do carrinho, quando fecho os colchetes depois do "echo $resultado" da valor indefinido, se não fechar da o erro
/////////////////////////////////////////////////////////////
R$ 0,00 Total com frete R$
Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 32
Notice: Undefined variable: frete inC:\xampp\htdocs\xampp\equattro\frete.phpon line 33
193,90
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$cod_servico = 40010;
$cep_origem = "05046000";
$cep_destino = $_POST['cepDestino'];
$peso = $_POST['peso'];
$correios = "http://www.correios.com.br/encomendas/precos/calculo.cfm?servico=.$cod_servico."&cepOrigem=".$cep_origem."&cepDestino=".$cep_destino."&peso=".$peso."&MaoPropria=N&avisoRecebimento=N&resposta=xml";
$correios_info = file($correios);
foreach($correios_info as $info){
if(preg_match("/\<preco_postal>(.*)\<\/preco_postal>/",$info,$tarifa)){
$frete = $tarifa[1];
}
}
$troca_isso = array(',');
$por_isso = array('.');
$vlrSemFrete = str_replace($troca_isso,$por_isso,$_POST['semFrete]);
$vlrComFrete = (number_format($vlrSemFrete+$frete,2,',','.'));
$resultado = $vlrComFrete.'-'.number_format($frete,2,',','.');
echo $resultado;
Link to comment
Share on other sites
13 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.