Sinistro
Started By
carcleo
, 19/02/2010, 20:48
51 replies to this topic
#46
Posted 27/02/2010, 19:27
O colega,
observe esse codigo acima.
eu preciso fazer o total dar formato 15.80 e não 15.00
como fazer?
observe esse codigo acima.
eu preciso fazer o total dar formato 15.80 e não 15.00
como fazer?
#47
Posted 27/02/2010, 20:55
Ah sim, neste caso você pode usar a função number_format(), ainda que, preferencialmente, tu deva usar money_format() por se tratar de valor monetário (pra isso tu vai precisar usar a função setlocale()).O colega,
observe esse codigo acima.
eu preciso fazer o total dar formato 15.80 e não 15.00
como fazer?
[]sAté mais
#48
Posted 27/02/2010, 23:17
Né isso não.
Veja essa parte do codigo:
Aqui,
Mas não consigo fazer o floatvar no $total.
Quaundo $tarifa[1] soma com EMBALAGEM para dar o $total aí, essa soma perde o carater de 0.00.
Como resolver isso?
Consegui assim:
Veja essa parte do codigo:
...... // Capta as informações da página dos Correios $correios_info = file($correios); // Processa as informações vindas do site dos correios em um Array foreach($correios_info as $info) { // Busca a informação do Preço da Postagem if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) { $total = $tarifa[1] + EMBALAGEM; } .......
Aqui,
$total = $tarifa[1] + EMBALAGEM; Esse $tarifa[1], por exemplo, retorna 15.80 Esse $total, retorna 15
Mas não consigo fazer o floatvar no $total.
Quaundo $tarifa[1] soma com EMBALAGEM para dar o $total aí, essa soma perde o carater de 0.00.
Como resolver isso?
Consegui assim:
$total = str_replace(",", ".",$tarifa[1]) + EMBALAGEM;
#49
Posted 27/02/2010, 23:41
@ CARCLEO
Qual o valor de EMBALAGEM?
Em teoria quando você usa o STR_replace o valor que é retornado é uma String e strings não são somadas como inteiros. Mesmo assim, o PHP possui uma estrutura inteligente que realiza a conversão de tipos automaticamente e deveria entender que o valor retornado por str_replace deverá ser transformado em inteiro e realizar o cálculo normalmente.
Resta então saber o valor de EMBALAGEM.
Falopa!
Qual o valor de EMBALAGEM?
Em teoria quando você usa o STR_replace o valor que é retornado é uma String e strings não são somadas como inteiros. Mesmo assim, o PHP possui uma estrutura inteligente que realiza a conversão de tipos automaticamente e deveria entender que o valor retornado por str_replace deverá ser transformado em inteiro e realizar o cálculo normalmente.
Resta então saber o valor de EMBALAGEM.
Falopa!
#50
Posted 28/02/2010, 08:47
Certo.
Paulo, vá até a pagina 03 desse post que tem o codigo completo.
Lá esta assim:
Portanto EMBALAGEM É 0.00
Agora squizito é o correio enviar $tarifa como string no formato moeda brasileira 15,86
,
Então, a partir dessa entrega que o correio faz da tarifa,
Paulo, vá até a pagina 03 desse post que tem o codigo completo.
Lá esta assim:
........ // Definindo constantes // Peso total do pacote em Quilos, caso seja menos de 1Kg, ex.: 300g, coloque 0.300 define('PESO',2.00); define('EMBALAGEM',0.00); // Valor adicional no envio como custo de embalagem. define('COMPRIMENTO',20); define('ALTURA',15); define('LARGURA',20); ......
Portanto EMBALAGEM É 0.00
Agora squizito é o correio enviar $tarifa como string no formato moeda brasileira 15,86
,
Então, a partir dessa entrega que o correio faz da tarifa,
// Capta as informações da página dos Correios $correios_info = file($correios); // Processa as informações vindas do site dos correios em um Array foreach($correios_info as $info) { // Busca a informação do Preço da Postagem if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) { $total = $tarifa[1] + EMBALAGEM; } if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) { $PrazoEntrega = $PrazoEntrega[1]; } }Tem que transformar:
15,86 em 15.86 para somar com 0.00 (EMBALAGEM) para dar 15.86 ($total)assim:
$total = str_replace(",", ".",$tarifa[1]) + EMBALAGEM;Estou usando str_replace mas queria ter certeza de uma função mais correta.
Edição feita por: carcleo, 28/02/2010, 08:49.
#52
Posted 01/03/2010, 20:31
Sabe, consegui dar uma enxugada boa no codigo, inclusive, ele retorna exatamente os mesmos valores do site dos correios.
Agora, preciso de ajuda para filtrar pelos erros de cep inserido errado (pelo interauta comprador) ou falha no site dos correios.
Nesse caso, redirecionar para outra pagina.
Qual o código devo usar para achar esse erro?
Tambem preciso achar a cidade, UF, endereço do cep de destino escolhido pelo internauta a partir da resposta dos correios.
Como fazer isso?
Segue o codigo enxuto:
Tipo UFDestino, Endereco, Cidade. A partir do xml do correios por esse codigo meu.
Voce manja?
Outra coisa:
Tipo nessa parte, fazer se o erro vier imprimir o erro e parar, mas, se não vier erro, prosseguir.
Eu fiz assim, mas quando não da erro, ele segue mas não envia o valor do frete:
Agora, preciso de ajuda para filtrar pelos erros de cep inserido errado (pelo interauta comprador) ou falha no site dos correios.
Nesse caso, redirecionar para outra pagina.
Qual o código devo usar para achar esse erro?
Tambem preciso achar a cidade, UF, endereço do cep de destino escolhido pelo internauta a partir da resposta dos correios.
Como fazer isso?
Segue o codigo enxuto:
<?php <?php ##################################### # Código dos Serviços dos Correios # # FRETE PAC = 41106 # # FRETE SEDEX = 40010 # # FRETE SEDEX 10 = 40215 # # FRETE SEDEX HOJE = 40290 # # FRETE E-SEDEX = 81019 # # FRETE MALOTE = 44105 # # FRETE NORMAL = 41017 # # SEDEX A COBRAR = 40045 # ##################################### $nCdEmpresa = ""; $sDsSenha = ""; $nCdServico = $_POST['TENVIO']; $sCepOrigem = 36855000; $sCepDestino = $_POST['TCEP']; $sCepDestino = eregi_replace("([^0-9])","",$sCepDestino); $nVlPeso = $peso_medio; $nCdFormato = 1; $nVlComprimento = 20; $nVlAltura = 20; $nVlLargura = 20; $nVlDiametro = 0; $sCdMaoPropria = "S"; $nVlValorDeclarado = 0; $sCdAvisoRecebimento = "N"; // URL de Consulta dos Correios entregue à variavel $correios $correios ="http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?" ."nCdEmpresa=$nCdEmpresa&" ."sDsSenha=$sDsSenha&" ."sCepOrigem=$sCepOrigem&" ."sCepDestino=$sCepDestino&" ."nVlPeso=$nVlPeso&" ."nCdFormato=$nCdFormato&" ."nVlComprimento=$nVlComprimento&" ."nVlAltura=$nVlAltura&" ."nVlLargura=$nVlLargura&" ."sCdMaoPropria=$sCdMaoPropria&" ."nVlValorDeclarado=$nVlValorDeclarado&" ."sCdAvisoRecebimento=$sCdAvisoRecebimento&" ."nCdServico=$nCdServico&" ."nVlDiametro=$nVlDiametro&" ."StrRetorno=xml"; // Capta as informações da página dos Correios $correios_info = file($correios); // Processa as informações vindas do site dos correios em um Array //Aqui vê os retornos trazidos pelos correios foreach ($correios_info as $line_num => $line) { echo "Linha #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n"; } foreach($correios_info as $info) { // Busca a informação do Preço da Postagem ////////////////////////////////////////////////////////////////////////////////////////// /// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS//////// ////////////////////////////////////////////////////////////////////////////////////////// if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro)) { print $Erro[1]; } if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) { $total = floatval(str_replace(',', '.', $tarifa[1])); } if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) { $PrazoEntrega = $PrazoEntrega[1]; } } // Neste exemplo estou colocando apenas PAC e SEDEX switch ($nCdServico) { case 41106: $nome_servico = " PAC "; break; case 40010: $nome_servico = " SEDEX "; break; } ?>E o lance de pegar os endereços na resposta dos correios?
Tipo UFDestino, Endereco, Cidade. A partir do xml do correios por esse codigo meu.
Voce manja?
Outra coisa:
Tipo nessa parte, fazer se o erro vier imprimir o erro e parar, mas, se não vier erro, prosseguir.
foreach($correios_info as $info) { // Busca a informação do Preço da Postagem ////////////////////////////////////////////////////////////////////////////////////////// /// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS//////// ////////////////////////////////////////////////////////////////////////////////////////// if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro)) { print $Erro[1]; } if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) { $total = floatval(str_replace(',', '.', $tarifa[1])); } if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) { $PrazoEntrega = $PrazoEntrega[1]; } }
Eu fiz assim, mas quando não da erro, ele segue mas não envia o valor do frete:
foreach($correios_info as $info) { // Busca a informação do Preço da Postagem ////////////////////////////////////////////////////////////////////////////////////////// /// GUARDAR EM SESSÃO OS RETORNOS PARA EVITAR QUE UM ENTER PERCA OS DADOS ENVIADOS//////// ////////////////////////////////////////////////////////////////////////////////////////// if(preg_match("/\<MsgErro>(.*)\<\/MsgErro>/",$info,$Erro) == 0) { print $Erro[1]; exit; } else { if(preg_match("/\<Valor>(.*)\<\/Valor>/",$info,$tarifa)) { $total = floatval(str_replace(',', '.', $tarifa[1])); } if(preg_match("/\<PrazoEntrega>(.*)\<\/PrazoEntrega>/",$info,$PrazoEntrega)) { $PrazoEntrega = $PrazoEntrega[1]; } } }
Edição feita por: carcleo, 01/03/2010, 20:34.
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)