Jump to content


Photo

Sinistro


  • Faça o login para participar
51 replies to this topic

#46 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

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?

#47 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 27/02/2010, 20:55

O colega,

observe esse codigo acima.

eu preciso fazer o total dar formato 15.80 e não 15.00

como fazer?

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()).

[]’sAté mais

#48 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 27/02/2010, 23:17

Né isso não.

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 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

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!

#50 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

Posted 28/02/2010, 08:47

Certo.

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.


#51 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 28/02/2010, 09:25

Ah tá, é como eu exemplifiquei no post #44. Só adicione a função str_replace() dentro da floatval(). :)

[]’sAté mais

#52 carcleo

carcleo

    Normal

  • Usuários
  • 69 posts
  • Sexo:Não informado

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:
<?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)

IPB Skin By Virteq