Jump to content


Photo

Sinistro


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

#31 carcleo

carcleo

    Normal

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

Posted 23/02/2010, 12:02

Não!

meu php.ini, pra começar a funcionar,. tive que renomear el4e para meu.php.ini e esta na propria pasta de instalação do php

lmbrando que no windows xp não deu erro nenhum

O problema estava no windows vista mesmo:

Solução:

O vista/seven, tem duas linhas de comando para localhost.

No meu caso, foi só comentar a linha ::1 localhost no arquivo hosts que esta em C:\Windows\System32\drivers\etc, abra ele com o bloco de notas

faz isso:
# Copyright (c) 1993-2006 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost
# ::1             localhost

Antes de testar,. TEM QUE REINICIAR O PC se não não funciona.

Obs.;: segui esse tutorial

http://www.pincelada...ows-7-vista-xp/

o problema agora é que o php 5.3.1 esta interpretando errado essa função de carriho de compras e quando ,mando atualizar, ele zera os valores, quantidades e tudo mais.;

Se alguem subner com,o corrigir eu agradeço.



	function AtualizarCarrinho(&$VAR_ENVIADAS_PELO_BROWSER){
		//Percorrendo a lista de itens e atualizando suas quantidades
		for ($i=0;$i<$this->QuantosItens();$i++){
			$this->item_quantidade[$i] = $VAR_ENVIADAS_PELO_BROWSER[$this->item_codigo[$i]];
		}
	} /* AtualizarCarrinho() */


Edição feita por: carcleo, 23/02/2010, 12:05.


#32 Paulo Freitas

Paulo Freitas

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

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

Posted 23/02/2010, 17:31

Certo... O que você passa no parâmetro do método AtualizarCarrinho()? Como você está recebendo as variáveis enviadas pelo navegador? :)

[]’sAté mais

#33 carcleo

carcleo

    Normal

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

Posted 23/02/2010, 17:46

ok, vamos la:

Pode simular uma compra no codigo que esta rodando (aguardando a alteraçao que estou fazendo) no site.;

http://naturelavie.c...php?acao=listar

simula a compra la e vc vai ver que incluir, excluir e alterar a quantidade de itens esta normal ma la esta co php 5.2.1

Aqui, php 5.3.1 (localhost) quando vou por la por exemplo 30 sabonetes, na hora de atualizar ele zera os campos todos.

Arquivo carrinho_conteudo.php
<?php
//Verificando se a variavel de sessão foi criada
if (!session_is_registered("MeuCarrinho")){
	session_register("MeuCarrinho");
	$MeuCarrinho = new TCarrinho();
}

$MySQL = new TMySQL();
$MySQL->connect($host, $db, $user, $pass);

if (!empty($op)){
	switch ($op) {
	case "adicionar":
        if (!empty($id_prod)){
			$Query = "select id from produtos where id = $id_prod";
			$R_Query = $MySQL->query($Query);
			if (mysql_num_rows($R_Query)>0){
				$MeuCarrinho->AdicionarItem($id_prod,1);
			}
		}
        break;
    case "excluir":
        $MeuCarrinho->RemoverItem($id_prod);
        break;
    case "atualizar":
		$MeuCarrinho->AtualizarCarrinho($HTTP_POST_VARS);
        break;
	case "finalizar":
		if ($MeuCarrinho->QuantosItens()>0) {
		echo "<script>document.location='CarrinhoFinal.php?acao=qual_cep&preco_total=$preco_total&peso_medio=$peso_medio'</script>";
//			header("Location:CarrinhoFinal.php");
		}
	break;
	}
}

$QuerySQL = "select id, nome, preco, peso from produtos " . $MeuCarrinho->QuerySQL_ObtemListaDeItens();
$Resultado = $MySQL->query($QuerySQL);
?>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0 COLS=1 WIDTH="100%" BGCOLOR="#0080C0" >
<tr>
<td>
<center><b><font color="#FFFFFF">Minha Loja - Carrinho</font></b></center>
</td>
</tr>
</table>
<form method="POST" action="carrinho.php?op=atualizar">
<table BORDER=0 CELLSPACING=2 CELLPADDING=4 COLS=5 WIDTH="100%">
<tr BGCOLOR="#004080">
<td>
<center><b><font color="#FFFF99">ITEM</font></b></center>
</td>

<td>
<center><b><font color="#FFFF99">QTD.</font></b></center>
</td>

<td>
<center><b><font color="#FFFF99">PRE&Ccedil;O UNIT&Aacute;RIO</font></b></center>
</td>

<td bgcolor="#004080">
<center><b><font color="#FFFF99">TOTAL</font></b></center>
</td>

<td BGCOLOR="#004080"></td>
</tr>


<?
$preco_total = 0.00;
$peso_medio = 0.00;
while(list($id, $nome, $preco, $peso) = mysql_fetch_row($Resultado)) {
	//Computando preco total
	$preco_total = $preco_total + $MeuCarrinho->ObtemSubTotalDeUmItem($id,$preco);
	$peso_medio = $peso_medio + $MeuCarrinho->ObtemSubTotalDeUmItem($id,$peso);
  session_start();
  session_register("preco_total");
  session_register("peso_medio");
	echo "
<tr>
<td><font size=-1>". $nome ."</font></td>

<td>
<center><input type=TEXT name=". $id ." size=2 value=". $MeuCarrinho->ObtemQuantidadeItem($id) ."></center>
</td>

<td>
<center><b>". number_format($preco, 2, '.', '')."</b></center>
</td>

<td>
<center><b>". number_format($MeuCarrinho->ObtemSubTotalDeUmItem($id,$preco), 2, '.', '') ."</b></center>
</td>

<td><b><font face=Tahoma><font size=-2><a href=carrinho.php?op=excluir&id_prod=". $id .">Excluir</a></font></font></b></td>
</tr>
	";
}
?>

<tr>
<td></td>

<td><b><font color="#FF0000"></font></b>&nbsp;</td>

<td>
<div align=right><b><font color="#FF0000">TOTAL(R$)</font></b></div>
</td>

<td BGCOLOR="#FFFFD7">
<center><b><font color="#990000"><?=number_format($preco_total, 2, '.', ''); ?></font></b></center>
</td>

<td></td>
</tr>
</table>
<center><input type="submit" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center><br>
</form>

<TABLE>
<TR>
	<TD>
		<form method="post" action="produtos.php?acao=listar">
			<center><input type="submit" value="<< Voltar as Compras" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center>
		</form>
	</TD>
	<TD>
		<form method="post" action="carrinho.php?op=finalizar">
		<input type="hidden" name="preco_total" value="<?=number_format($preco_total, 2, '.', ''); ?>">
        <input type="hidden" name="peso_medio" value="<?=number_format($peso_medio, 2, '.', ''); ?>">
			<center><input type="submit" value="Finalizar Compra >>" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><center>
		</form>	
	</TD>
</TR>
</TABLE>
arquivo TMySql.php (que contem a classe)

<?php
/*
	Classe TCarrinho
*/
class TCarrinho {
var $item_codigo = array();
var $item_quantidade = array();
	
	/*
		ObtemPosicao
		Este metodo obtem a posicao de um item mediante ao seu codigo, retornando um valor booleano e gravando a posicao na variavel de referencia $posicao, caso o codigo do item esteja no carrinho.
	*/
	function ObtemPosicao($codigo,&$posicao){
		//Percorrendo o vetor
		for($i=0;$i<count($this->item_codigo);$i++) {
			if ($this->item_codigo[$i] == $codigo) {
				$posicao = $i;
				return TRUE;
		   }
		 }

	}/* ObtemPosicao() */
	
	/*
		AdicinarItem
		Este metodo adiciona um item no carrinho
	*/
	function AdicionarItem($codigo,$quantidade) 
	{
		//Inicializando parametro
		$posicao = -1; 
		$achou = $this->ObtemPosicao($codigo,$posicao);
		if (!$achou){
			$this->item_codigo[] = $codigo;
			$this->item_quantidade[] = $quantidade;
		}
	} /* AdicionarItem() */

	/*
		RemoverItem
		Este metodo remove um item do carrinho de compra, passando o codigo do produto
	*/
	function RemoverItem($codigo) 
	{
		//Inicializando parametro
		$posicao = -1; 
		$achou = $this->ObtemPosicao($codigo,$posicao);
		if ($achou){
			//Removendo o elemento do vetor
			array_splice($this->item_codigo, $posicao, 1);
			array_splice($this->item_quantidade, $posicao, 1);		
		}
			
	} /* RemoveItem() */

	/*
		QuantosItens
		Este metodo retorna a quantidade de itens incluidas no carrinho de compras
	*/
	function QuantosItens() {
		return count($this->item_quantidade);
	} /* QuantosItens() */

	/*
		ExcluirTodosItens
		Este metodo retira todos os itens contidos no carrinho de compras
	*/
	function ExcluirTodosItens(){
		$this->item_quantidade = null;
		$this->item_codigo = null;
	} /* ExcluirTodosItens() */

	/*
		QuerySQL_ObtemListaDeItens
		Este metodo gera uma parte do codigo SQL que sera usado para buscar os dados
		do carrinho de compra (id, NOME e PREÇO). O comando SQL final tera como finalidade
		de buscar no banco de dados apenas os dados dos itens incluidos no carrinho.
	*/
	function QuerySQL_ObtemListaDeItens(){
		$itens = "where ";
		$STR = "";
		if ($this->QuantosItens()>0) {
			$fixo = " id =";
			for ($i=0;$i<$this->QuantosItens();$i++){
				$STR = $STR . $fixo . " " . $this->item_codigo[$i];
				if ($i+1<$this->QuantosItens()) {
					$STR = $STR . " or ";
				}
			}
		}
		if (!$STR == "") {
			return $itens . $STR;
		}else{
			//Caso não exista nenhum item no carrinho o codigo final SQL, procurara por um item que não existe na tabela de produtos, neste caso  -1.
			return "where id = -1";
		}
	} /* QuerySQL_ObtemListaDeItens() */

	/*
		ObtemQuantidadeItem
		Este metodo obtem a quantidade de um Item
	*/
	function ObtemQuantidadeItem($codigo){
		$posicao = -1;
		$achou = $this->ObtemPosicao($codigo,$posicao);
		if ($achou) {
			return $this->item_quantidade[$posicao];
		}else{
			return "erro ao obter quantidade do item";
		}
		
	} /* ObtemQuantidaItem() */

	/*
		ObtemSubTotalDeUmItem
		Este metodo retorna o subtotal de um item (QUANTIDADE * VALOR UNITARIO)
	*/
	function ObtemSubTotalDeUmItem($id,$preco){
		$posicao = -1;
		$achou = $this->ObtemPosicao($id,$posicao);
		if ($achou) {
			return ($this->item_quantidade[$posicao]*$preco);
		}else{
			return "erro ao obter sub total do item";
		}
	} /* ObtemSubTotalDeUmItem() */

	/*
		AtualizarCarrinho
		Este metodo coleta todos as variaveis enviadas pelo FORMULARO (method="POST") 
		e atualiza as quantidades dos itens.
	*/
	function AtualizarCarrinho(&$VAR_ENVIADAS_PELO_BROWSER){
		//Percorrendo a lista de itens e atualizando suas quantidades
		for ($i=0;$i<$this->QuantosItens();$i++){
			$this->item_quantidade[$i] = $VAR_ENVIADAS_PELO_BROWSER[$this->item_codigo[$i]];
		}
	} /* AtualizarCarrinho() */

} /* Classe TCarrinho */
?>

Edição feita por: carcleo, 23/02/2010, 17:52.


#34 Paulo Freitas

Paulo Freitas

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

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

Posted 23/02/2010, 18:31

Substitua o $HTTP_POST_VARS por $_POST. Ainda é possível usar mediante configuração (detalhes abaixo), mas o $HTTP_POST_VARS foi depreciado desde o PHP 4.1 e será totalmente extinto no PHP 6.

; Determines whether the deprecated long $HTTP_*_VARS type predefined variables
; are registered by PHP or not. As they are deprecated, we obviously don't
; recommend you use them. They are on by default for compatibility reasons but
; they are not recommended on production servers.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/register-long-arrays
register_long_arrays = Off

[]’sAté mais

#35 carcleo

carcleo

    Normal

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

Posted 23/02/2010, 19:06

Ok

Deu certo paulo.

Agora como usaria a tua classe do frete para a hipotese do cliente poder escoher via form, se vai esolher sedex ou pac ou sedex10..?

Como fa nesse sentido?

segue tua classe:

<?php

/*
 * @author    Paulo Freitas <paulofreitas dot web at gmail dot com>
 * @copyright Copyright (C) 2009-2010  Paulo Freitas
 * @license   http://creativecommons.org/licenses/by-sa/3.0
 */

class EncomendasCorreios
{
    /*
     * Serviços
     */
    const SERVICO_ESEDEX       = 81019;
    const SERVICO_MALOTE       = 44105;
    const SERVICO_PAC          = 41106;
    const SERVICO_SEDEX        = 40010;
    const SERVICO_SEDEX10      = 40215;
    const SERVICO_SEDEXACOBRAR = 40045;
    const SERVICO_SEDEXHOJE    = 40290;

    protected static $api_url =
        'http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx';

    protected $entrada = array(
        'nCdEmpresa'          => '',
        'sDsSenha'            => '',
        'nCdServico'          => self::SERVICO_SEDEX,
        'sCepOrigem'          => '',
        'sCepDestino'         => '',
        'nVlPeso'             => 0,
        'nCdFormato'          => 1,
        'nVlComprimento'      => 0,
        'nVlAltura'           => 0,
        'nVlLargura'          => 0,
        'nVlDiametro'         => 0,
        'sCdMaoPropria'       => 'N',
        'nVlValorDeclarado'   => 0,
        'sCdAvisoRecebimento' => 'N'
    );
    protected $saida;

    public function __construct($nCdEmpresa = '', $sDsSenha = '')
    {
        $this->nCdEmpresa = $nCdEmpresa;
        $this->sDsSenha   = $sDsSenha;
    }

    public function obterResposta()
    {
        $this->entrada['StrRetorno'] = 'xml';
        $this->saida = @simplexml_load_string(html_entity_decode(
            file_get_contents(self::$api_url . '?' . http_build_query(
                $this->entrada))));
    }

    public function __get($nome)
    {
        if (isset($this->saida[0]->cServico->$nome)) {
            return $this->saida[0]->cServico->$nome;
        } else {
            throw new Exception('propriedade inexistente');
        }
    }

    public function __set($nome, $valor)
    {
        if (array_key_exists($nome, $this->entrada)) {
            $this->entrada[$nome] = $valor;
        } else {
            throw new Exception('propriedade inexistente');
        }
    }
}

try {
    $EncomendasCorreios = new EncomendasCorreios;
    $EncomendasCorreios->nCdServico     = EncomendasCorreios::SERVICO_PAC;
    $EncomendasCorreios->sCepOrigem     = '13100000';
    $EncomendasCorreios->sCepDestino    = '20000000';
    $EncomendasCorreios->nVlPeso        = 1;
    $EncomendasCorreios->nVlComprimento = 20;
    $EncomendasCorreios->nVlAltura      = 10;
    $EncomendasCorreios->nVlLargura     = 20;
    $EncomendasCorreios->nCdFormato     = 1;
    $EncomendasCorreios->obterResposta();

    if ($EncomendasCorreios->Erro != '0') {
        print "Erro: {$EncomendasCorreios->MsgErro}";
    } else {
        printf("Valor: R$%s\nPrazo de entrega: %s dias úteis",
            $EncomendasCorreios->Valor, $EncomendasCorreios->PrazoEntrega);
    }
} catch (Exception $e) {
    print "Erro: {$e->getMessage()}";
}

?>


E veja o arquivo de onde eu chamo a classe de frete;
CarrinhoFinal_conteudo.php
<script>
function abre(cartao)
{
document.getElementById(cartao).style.display = 'block';
}

function fecha(cartao)
{
document.getElementById(cartao).style.display = 'none';
}

</script>

<?
if (!session_is_registered("MeuCarrinho")){
	header("Location:Carrinho.php");
}else{
	if ($MeuCarrinho->QuantosItens() == 0) {
		header("Location:Carrinho.php");
	}
}
if (!empty($HTTP_POST_VARS["FORM"])){
	//Abrindo conexao com o banco de dados
	$MySQL = new TMySQL();
	$MySQL->connect($host, $db, $user, $pass);
	/*
	//Requisitanto o codigo do pedido
	$Resultado = $MySQL->query("select max(ID_PEDIDO_CLIENTE) from pedidos_cliente");

   
	if (mysql_result($Resultado,0,"max(ID_PEDIDO_CLIENTE)") != ""){
		$CODIGO_PEDIDO = mysql_result($Resultado,0,"max(ID_PEDIDO_CLIENTE)") + 1;
	}else{
		$CODIGO_PEDIDO = 1;
	}
	*/

	//Gravando os Dados do Cliente
	$MySQL->query("INSERT INTO pedidos_cliente (Nome, Email, Endereco, Bairro, Cidade, Estado, CEP, FONE, CPF,PESO_TOTAL,PRECO_TOTAL) VALUES ('". $HTTP_POST_VARS["TNOME"] ."', '". $HTTP_POST_VARS["TEMAIL"] ."','". $HTTP_POST_VARS["TENDERECO"] ."','". $HTTP_POST_VARS["TBAIRRO"] ."', '". $HTTP_POST_VARS["TCIDADE"] ."', '". $HTTP_POST_VARS["TESTADO"] ."', '". $HTTP_POST_VARS["TCEP"] ."', '". $HTTP_POST_VARS["TFONE"] ."', '". $HTTP_POST_VARS["TCPF"] ."','$peso_medio','$preco_total')");
	$MeuCarrinho->ultimo_id = mysql_insert_id();
	//Gravando no banco de dados os item contidos no carrinho

	for($i=0;$i<$MeuCarrinho->QuantosItens();$i++) {
		$data = date('Y-m-d');
		$MySQL->query("INSERT INTO pedidos (ID_PEDIDO, ID_PRODUTO, QUANTIDADE,Envio, data, atende) VALUES (". $MeuCarrinho->ultimo_id .",". $MeuCarrinho->item_codigo[$i] .",". $MeuCarrinho->item_quantidade[$i] .",'". $HTTP_POST_VARS["TENVIO"] ."','$data','n')");
	}

 //Removendo o Carrinho
	session_unregister("MeuCarrinho");
}
?>
<?
 if (session_is_registered("MeuCarrinho")){
	  global $SESSAOlogin;
if (!isset($SESSAOlogin)) {
echo "<script>document.location='loga.php'</script>";
                    }
					else {
				  $busca = mysql_query("SELECT * FROM clientes where id='$SESSAOlogin';") or die("A consulta falhou: " . mysql_error());
                  list($id, $nome, $email, $cidade, $estado, $usuario, $senha, $cpfcnpj, $tel, $cel, $endereco, $numero, $bairro,$cep) = mysql_fetch_row($busca)
?>
<p></p>

<? if ($acao=="qual_cep") {
	?>
	<FORM METHOD="POST" ACTION="CarrinhoFinal.php?acao=envia_dados" name="FORM_ENVIA_CEP">
    <TABLE width="400" align="center">
    	<TR>
        <!-- Fazer uma funçao em ajax ou JavaScript para verificar se o peso for superior a 30kg só aceitar encomenda pela trasnportadora-->
		<TD>Informe o CEP para entrega do pedido:<br /> O Pedido será enviado por Sedex</TD>
		<TD><INPUT TYPE="text" NAME="TCEP"></TD>
	</TR>
  
    <TR>
		<TD>FORMA DE ENVIO:</TD>
		<TD>
  		<select name="TENVIO">
		<option value="FRETE_SEDEX" selected>SEDEX</option>		
		<option value="FRETE_PAC">PAC</option>			
		</select>
        </TD>
    </TR>

    <TR align="center">
	  <TD colspan="2"><input type="submit" value="Enviar Dados" name="envio_cep_frete" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)" onClick="CriticaFormulario2()"></TD>
	</TR>
    </TABLE>
    <?
                         }
?>
<? if ($acao=="envia_dados") {
	include ("frete3.php");
	//if ($peso_medio<=30) { $result = calcula_frete(FRETE_SEDEX, '36855000', $TCEP, $peso_medio); }
	//if ($peso_medio>30) { criar função para calculo via transportadora }
    //$result = calcula_frete(constant($TENVIO), '36855000', $TCEP, $peso_medio);
	//if ($TENVIO=="FRETE_SEDEX") { $result = calcula_frete(FRETE_SEDEX, '36855000', $TCEP, $peso_medio); }
	//if ($TENVIO=="FRETE_PAC") { $result = calcula_frete(FRETE_PAC, '36855000', $TCEP, $peso_medio); }	
	EncomendasCorreios;
?>
	<FORM METHOD="POST" ACTION="CarrinhoFinal.php" name="FORM_COMPRA">
	<INPUT TYPE="hidden" NAME="FORM" VALUE="FORM">
    <INPUT TYPE="hidden" NAME="peso_medio" VALUE="<?=$peso_medio;?>">
	<TABLE width="400" align="center">
	<tr><td colspan="2" align="center"><h2><b>Finalizando Compra</b></h2></td></tr>
		<input type="hidden" name="preco_total" value="<?=number_format($preco_total, 2, '.', ''); ?>">	
	<TR>
		<TD>PAGAMENTO </TD>
		<TD>
      <!--
        <div id="cartao" style="display:block;">oi</div>
        onclick="javascript: fecha('cartao');"
        -->
            <INPUT type="radio" NAME="TPGTO" value="MASTERCARD" checked="checked"> MASTERCARD 
            <br>
            <INPUT type="radio" NAME="TPGTO" value="BOLETO"> BOLETO  (&Agrave; Vista)<br>
            <INPUT type="radio" NAME="TPGTO" value="DEPOSITO">           
             DEP&Oacute;SITO  (&Agrave; Vista)
      </TD>
	</TR>
	<TR>
		<TD>NOME:/RAZ&Atilde;O SOCIAL </TD>
		<TD><INPUT TYPE="text" NAME="TNOME" value="<?=$nome;?>" disabled="disabled"></TD>
	</TR>    
	<TR>
		<TD>CPF/CNPJ:</TD>
		<TD><INPUT TYPE="text" NAME="TCPF" value="<?=$cpfcnpj;?>" disabled="disabled"></TD>
	</TR>
    <TR>
		<TD>EMAIL:</TD>
		<TD><INPUT TYPE="text" NAME="TEMAIL" value="<?=$email;?>" disabled="disabled"></TD>
	</TR>	
	<TR>
		<TD>ENDEREÇO: <font color="red">(de entrega)</font></TD>
		<TD><INPUT TYPE="text" NAME="TENDERECO" value="<?=$endereco;?>"></TD>
	</TR>
	<TR>
		<TD>BAIRRO:</TD>
		<TD><INPUT TYPE="text" NAME="TBAIRRO" value="<?=$bairro;?>"></TD>
	</TR>
	<TR>
		<TD>CIDADE:</TD>
		<TD><INPUT TYPE="text" NAME="TCIDADE" value="<?=$cidade;?>"></TD>
	</TR>
	<TR>
		<TD>ESTADO:</TD>
		<TD><INPUT TYPE="text" NAME="TESTADO" disabled="disabled" value="<? print $result[UFdestino]; ?>"></TD>
	</TR>
   <TR>
		<TD>FONE:</TD>
		<TD><INPUT TYPE="text" NAME="TFONE" value="<?=$tel;?>" disabled="disabled"></TD>
	</TR>	
	<TR>
		<TD>VALORES:</TD>
		<TD>
		<?
         print "Valor do frete R$ ";
         print number_format($result[Tarifa], 2, ',', '.');
		 print "<br>";
         print "Valor da compra sem o frete R$ ";
         print number_format($preco_total, 2, ',', '.');
		 print "<br>";
         print "Valor da compra xom o frete R$ ";
         print number_format($result[Tarifa]+$preco_total, 2, ',', '.');		 
		 ?>
		</TD>
	</TR>
	<TR align="center">
	  <TD colspan="2"><input type="submit" value="Finalizar" name="Finalizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)" onClick="CriticaFormulario()"></TD>
	</TR>
  </TABLE>
</FORM>
<? } ?>
<? }
}else{
?>
<?
 if ($TPGTO=="MASTERCARD")
 { 
 ?>
 <form name="form_card" method="POST" target="vpos" action="https://ecommerce.redecard.com.br/pos_virtual/form_card.asp">
  <table width="800" border="0" cellspacing="1" cellpadding="1">
    <tr bgcolor="#666666">
      <td colspan="7"><div align="left"><font color="#FFFFFF">Forma de Pagamento </font></div></td>
    </tr>
    <tr>
      <td width="111"><div align="center"><img src="img/Mastercard.jpg" height="70" border="0" align="middle"></div></td>
      <td width="113"><div align="left"><input type="radio" name="BANDEIRA" value="MASTERCARD" checked> Mastercard</div></td>
      <td width="62"><div align="left">Total:</div></td>
      <td width="165">
      <div align="left">
      <label>R$ <?=$preco_total;?></label><input type="hidden" name="TOTAL" value="<?=$preco_total;?>" />
      </div></td>
      <!--td width="165"><div align="left"><input type="text" name="TOTAL"></div></td-->	  
      <td width="116"><div align="left"><input type="radio" name="TRANSACAO" value="04" checked>&Agrave; Vista</div></td>
      <td width="102"><div align="center"></div></td>
      <td width="109"><div align="center"><input type="button" name = "enviar" value = "Pagar" onClick="CriticaFormulario_Cartao()">
      </div></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td><div align="left"><label>Pedido:</label></div></td>
      <td>
      <div align="left">
      
      <label><?=$MeuCarrinho->ultimo_id;?></label><input type="hidden" name="NUMPEDIDO" value="<?=$MeuCarrinho->ultimo_id;?>" />
      </div></td>
      <td><div align="left"><input type="radio" name="TRANSACAO" value="08"> Parcelado</div></td>
      <td><div align="center">
        <select name="PARCELAS" size="1" style="widtd:100px">
            <option value="00" selected>Qtde</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="05">05</option>
            <option value="06">06</option>
            <option value="07">07</option>
            <option value="08">08</option>
            <option value="09">09</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
        </select>
      </div></td>

  <input type="hidden" name="FILIACAO" value="27419606">
  <input type="hidden" name="DISTRIBUIDOR" value="27419606">  
  <input type="hidden" name="PAX1" value="XXXXXXX">
  <input type="hidden" name="CODVER" value="XXXXXXXXXXXXXXXX-XXX">  
  <input type="hidden" name="URLBACK" value="http://www.naturelavie.com.br/img/topo.png">
  <input type="hidden" name="URLCIMA" value=" http://www.naturelavie.com.br/img/topo.png">
  <input type="hidden" name="TARGET" value="_SELF">  
    <td><div align="center"><a href="JavaScript:Janela();" onClick="CriticaFormulario_Cartao()"><font color="#000000">Comprar</font></a></div></td>
    </tr>
    <tr bgcolor="#666666">
      <td colspan="7">&nbsp;</td>
    </tr>
  </table>
 </form>
                         }
?>


 <?
 }
 else if ($TPGTO=="BOLETO"){ }
 else if ($TPGTO=="DEPOSITO")
 { 
?>
<table width="700" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td align="center"><b><h3><br>
    Parabéns sua compra foi realizada com sucesso!</h3>
        <h3>&nbsp;</h3>
    </b></td>
  </tr>
  <tr>
    <td>
	  <p>Muito obrigado por adquirir os produtos Nature La Vie. <br>
        <br>
        O VALOR TOTAL DA TUA COMPRA SEM O FRETE: R$ 
        <?=number_format($preco_total, 2, '.', '');?>
        <br>
	    <br>
      N&oacute;s cotaremos o valor de frete e ap&oacute;s isso entraremos em contato com voce via e-mail e informaremos  o valor total  para o dep&oacute;sito ja incluido o valor do frete.</p>
	  <p>Por favor aguarde o nosso e-mail. <br>
    </p></td>
  </tr>
  <tr>
    <td>
	  <p><br>
	</p>
    </td>
  </tr>
</table>
<? 
 }	 
 }
?>


Edição feita por: carcleo, 23/02/2010, 19:20.


#36 Paulo Freitas

Paulo Freitas

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

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

Posted 23/02/2010, 19:22

Pois bem, sabe esta parte aqui:

$EncomendasCorreios->nCdServico     = EncomendasCorreios::SERVICO_PAC;
Substitua o EncomendasCorreios::SERVICO_PAC por um campo de formulário, tipo $_POST['servico']. Tu pode usar tanto um <select /> como um grupo de <input type="radio" />. Basta seguir os códigos de serviços da classe. Exemplo de formulário:

<select name="servico">
 <option value="41106">PAC</option>
 <option value="40010">SEDEX</option>
 <option value="40215">SEDEX10</option>
...
</select>
[]’sAté mais

#37 carcleo

carcleo

    Normal

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

Posted 23/02/2010, 22:35

Eu não sei quase nada de classes.
Nesse caso, como chamar a classe e passar o valor do select?

outra coisa.

ficaria assim?

$EncomendasCorreios->nCdServico = EncomendasCorreios::constant($TENVIO);

ou

$EncomendasCorreios->nCdServico = constant($TENVIO);

ou

$EncomendasCorreios->nCdServico = $TENVIO;

Outra coisa. e a linha

'nCdServico' => self::SERVICO_SEDEX,

Não altera tambemm não?

#38 Paulo Freitas

Paulo Freitas

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

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

Posted 24/02/2010, 00:21

Eu não sei quase nada de classes.
Nesse caso, como chamar a classe e passar o valor do select?

Da mesma forma que exemplifiquei.

$EncomendasCorreios->nCdServico = $TENVIO;

Quase isso. $TENVIO não existe. Use $_POST['TENVIO'].


Outra coisa. e a linha

'nCdServico' => self::SERVICO_SEDEX,

Não altera tambemm não?

Nope, ela faz parte do construtor da classe e é substituída pelo que você passar com $_POST['TENVIO']. :)

[]’sAté mais

#39 carcleo

carcleo

    Normal

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

Posted 24/02/2010, 15:46

Desculpe estar sendo tão enjoado mas é que não esta dando certo.

tentei assim:
$EncomendasCorreios->nCdServico = EncomendasCorreios::constant($_Post['TENVIO']);
e assim
$EncomendasCorreios->nCdServico = EncomendasCorreios::$_Post['TENVIO'];
e esta dando erro de servidor.

Tentei assim:
$EncomendasCorreios->nCdServico = constant($_Post['TENVIO']);
e assim
$EncomendasCorreios->nCdServico = $_Post['TENVIO'];
E esta dando esse erro:
Erro: Input string was not in a correct format.
Isso enviando o nome do serviço para a classe.
Quando passei a enviar o codigo do serviço para a classe e não o nome ai, enviando dessa forma
$EncomendasCorreios->nCdServico = EncomendasCorreios::$_Post['TENVIO'];
deu certo, porem, o rertorno do correio é um valor menor do que o simulado la no site dos correios e o prazo as vezes bate e as vezes da difernça de 1 dia.
O que fazer?

Outra coisa:

Para calculo do PAC, é necessario informar dimensões da caixa. Como o pessoal esta fazendo isso? Simula medidas de caixa padrão? ou existe ua forma de fazer isso?

Pergunto pois ja imaginou a cara do cliente (comprador) na hora que abrir um form - Digite as dimensões da embalagem == rsrs

Edição feita por: carcleo, 24/02/2010, 15:49.


#40 Paulo Freitas

Paulo Freitas

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

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

Posted 24/02/2010, 20:51

Desculpe estar sendo tão enjoado mas é que não esta dando certo.

tentei assim:

$EncomendasCorreios->nCdServico = EncomendasCorreios::constant($_Post['TENVIO']);
e assim
$EncomendasCorreios->nCdServico = EncomendasCorreios::$_Post['TENVIO'];
e esta dando erro de servidor.

Tentei assim:
$EncomendasCorreios->nCdServico = constant($_Post['TENVIO']);
e assim
$EncomendasCorreios->nCdServico = $_Post['TENVIO'];
E esta dando esse erro:
Erro: Input string was not in a correct format.
Isso enviando o nome do serviço para a classe.
Quando passei a enviar o codigo do serviço para a classe e não o nome ai, enviando dessa forma
$EncomendasCorreios->nCdServico = EncomendasCorreios::$_Post['TENVIO'];
deu certo, porem, o rertorno do correio é um valor menor do que o simulado la no site dos correios e o prazo as vezes bate e as vezes da difernça de 1 dia.
O que fazer?

Mas eu disse pra passar o código, he he he:

$EncomendasCorreios->nCdServico = $_POST['TENVIO']; // Sempre $_POST, $_Post não existe.
Quanto ao valor, tu diz em relação àquela conta que tu está tentando fazer que tu me disse via MP?

Outra coisa.
preiso fazer esse calculo

$valor_final = $EncomendasCorreios->Valor + $preco_total;

$EncomendasCorreios->Valor retorna = 12,80

$preco_total retorna = 30,00

$valor_final retorna = 42,00 e não 42,80 só que não estou usano round

O $EncomendasCorreios->Valor é uma string, para tu somar com um número, converta para float:

$preco_total = 30.00;
$valor_final = floatval($EncomendasCorreios->Valor) + $preco_total;
A diferença de prazos já é um problema dos Correios. :huh: Bem, pelo menos este é o webservice que eles indicam para usar.


Outra coisa:

Para calculo do PAC, é necessario informar dimensões da caixa. Como o pess
oal esta fazendo isso? Simula medidas de caixa padrão? ou existe ua forma de fazer isso?

Pergunto pois ja imaginou a cara do cliente (comprador) na hora que abrir um form - Digite as dimensões da embalagem == rsrs

É, uma saída é simular as medidas de caixa padrão igual o seletor do formulário do Correios faz. Acho que tem que ser por aí mesmo. ;-)

[]’sAté mais

#41 carcleo

carcleo

    Normal

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

Posted 24/02/2010, 21:30

não,

1)o valor que me refiro é o valor do sedex ou pac (informando as medidas da embalagem é claro) que é retornado pela classe depois que o form envia via post os dados para a classe.

o retorno do frete tua classe da um pouco da um pouco mais barato que o retorno la do site dos correios e o prazo de entrega as e vezes bate e as vezes da dirferença de 1 dia!


2) sobre o arredondamento, fiz uma str_replace de virgula para ponto, funciona tambem né? bom, pelo menos funcionou!


3) quanto ás medidas da embalagem, o site que administro vende perfumaria (sabonete, antimofo, shampoo, coisas do genero).
tem algum maçete para calcular a medida provavel da embalagem que será enviada para cada pedido?

Edição feita por: Paulo Freitas, 24/02/2010, 22:26.
Sem Caps, por favor.


#42 Paulo Freitas

Paulo Freitas

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

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

Posted 24/02/2010, 22:34

1)o valor que me refiro é o valor do sedex ou pac (informando as medidas da embalagem é claro) que é retornado pela classe depois que o form envia via post os dados para a classe.

o retorno do frete tua classe da um pouco da um pouco mais barato que o retorno la do site dos correios e o prazo de entrega as e vezes bate e as vezes da dirferença de 1 dia!

Estranho. No site você está usando algum serviço como o Mão Própria, Valor Declarado ao Aviso Recebimento? :ponder:

Se tiver pode ser isso. A classe suporta todos eles.

$EncomendasCorreios->sCdMaoPropria = 'S'; // Com mão própria
$EncomendasCorreios->nVlValorDeclarado = 9.99; // Com valor declarado
$EncomendasCorreios->sCdAvisoRecebimento = 'S'; // Com aviso recebimento
No retorno da consulta tu pode receber o valor total e individual de cada um deles:

print $EncomendasCorreios->Valor;
print $EncomendasCorreios->ValorMaoPropria;
print $EncomendasCorreios->ValorAvisoRecebimento;
print $EncomendasCorreios->ValorValorDeclarado;
Quanto ao prazo, é uma disparidade do próprio Correios. :(

2) sobre o arredondamento, fiz uma str_replace de virgula para ponto, funciona tambem né? bom, pelo menos funcionou!

Funcionar funciona, mas está longe de ser adequado.

3) quanto ás medidas da embalagem, o site que administro vende perfumaria (sabonete, antimofo, shampoo, coisas do genero).
tem algum maçete para calcular a medida provavel da embalagem que será enviada para cada pedido?

Bem, se você tem as informações de dimensões no banco de dados tu pode criar condições (if/elseif/else) para determinar a embalagem mais adequada. De todos produtos do pedido, tu tira a largura, comprimento e altura maior de todos eles e com isso dá para definir um tamanho ideal que supra todas estas medidas.

[]’sAté mais

#43 carcleo

carcleo

    Normal

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

Posted 25/02/2010, 11:56

1) Sem mão propria, valor declarado ou codigo de reaviso. Faz uma simulação la!
Oura coisa, esta tendo algum problema hoje no site dos correios?
Esta aceitando calcular PAC acima de 30kg e esta retornando tanto sedex quando pac valores que não passam de 15 reais.
Veja como ficou a classe:
<?php

/*
 * @author    Paulo Freitas <paulofreitas dot web at gmail dot com>
 * @copyright Copyright (C) 2009-2010  Paulo Freitas
 * @license   http://creativecommons.org/licenses/by-sa/3.0
 */

class EncomendasCorreios
{
    /*
     * Serviços
     */
    const SERVICO_ESEDEX       = 81019;
    const SERVICO_MALOTE       = 44105;
    const SERVICO_PAC          = 41106;
    const SERVICO_SEDEX        = 40010;
    const SERVICO_SEDEX10      = 40215;
    const SERVICO_SEDEXACOBRAR = 40045;
    const SERVICO_SEDEXHOJE    = 40290;

    protected static $api_url =
        'http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx';

    protected $entrada = array(
        'nCdEmpresa'          => '',
        'sDsSenha'            => '',
        'nCdServico'          => self::SERVICO_SEDEX,
        'sCepOrigem'          => '',
        'sCepDestino'         => '',
        'nVlPeso'             => 0,
        'nCdFormato'          => 1,
        'nVlComprimento'      => 20,
        'nVlAltura'           => 10,
        'nVlLargura'          => 20,
        'nVlDiametro'         => 0,
        'sCdMaoPropria'       => 'N',
        'nVlValorDeclarado'   => 0,
        'sCdAvisoRecebimento' => 'N'
    );
    protected $saida;

    public function __construct($nCdEmpresa = '', $sDsSenha = '')
    {
        $this->nCdEmpresa = $nCdEmpresa;
        $this->sDsSenha   = $sDsSenha;
    }

    public function obterResposta()
    {
        $this->entrada['StrRetorno'] = 'xml';
        $this->saida = @simplexml_load_string(html_entity_decode(
            file_get_contents(self::$api_url . '?' . http_build_query(
                $this->entrada))));
    }

    public function __get($nome)
    {
        if (isset($this->saida[0]->cServico->$nome)) {
            return $this->saida[0]->cServico->$nome;
        } else {
            throw new Exception('propriedade inexistente');
        }
    }

    public function __set($nome, $valor)
    {
        if (array_key_exists($nome, $this->entrada)) {
            $this->entrada[$nome] = $valor;
        } else {
            throw new Exception('propriedade inexistente');
        }
    }
}

try {
    $EncomendasCorreios = new EncomendasCorreios;
    $EncomendasCorreios->nCdServico     = $_POST['TENVIO'];
    $EncomendasCorreios->sCepOrigem     = '36855000';
    $EncomendasCorreios->sCepDestino    = $_POST['TCEP'];
    $EncomendasCorreios->nVlPeso        = 1;
    $EncomendasCorreios->nVlComprimento = 20;
    $EncomendasCorreios->nVlAltura      = 10;
    $EncomendasCorreios->nVlLargura     = 20;
    $EncomendasCorreios->nCdFormato     = 1;
    $EncomendasCorreios->obterResposta();

    if ($EncomendasCorreios->Erro != '0') {
		//if ($EncomendasCorreios->MsgErro == "CEP de destino invalido") {//Redireciona para digitar cep de novo}
	    print "Erro: {$EncomendasCorreios->MsgErro}";
    } else {
	   printf("Valor do frete: R$%s <br>Prazo de entrega: %s dias úteis", $EncomendasCorreios->Valor, $EncomendasCorreios->PrazoEntrega);
	   print "<br>";
	   print "Valor da compra sem o frete R$ ";
       print number_format($preco_total, 2, ',', '.');
	   print "<br>";
	   $valor_final = number_format(floatval($EncomendasCorreios->Valor), 2, '.', '') + $preco_total;
       print "Valor da compra com o frete R$ ";
       print number_format($valor_final, 2, ',', '.');	
    }
} catch (Exception $e) {
	//tenta um novo webservice = locahost
    print "Erro: {$e->getMessage()}";
}

?>


2) No caso de fazer com float, ele "come" as duas casas decimais
$valor_final = floatval($EncomendasCorreios->Valor) + $preco_total;
Então fiz assim (pode ser? = deu certo!:
$valor_final = number_format(floatval($EncomendasCorreios->Valor), 2, '.', '') + $preco_total;

3)Quanto às medidas,. deixa eu ver se entendi:

No form de cadastro de produtos acrescenta mais 3 campos, (comprimento,altura e largura) para o cliente digitar as medidas de cada produto.
Depois, criar um contador de medidas (do jeito que friz co o peso) para calcular uma medida provavel para a embalagem!
É isso?
Se for, será que encontro um codigo desses ai pronto?

4) Me ajuda fazer essa conta:

no caso de um sabonete (medidas de cada sabonete)
5cm de comprimento
2cm de largura
1cm de altura

no caso de um shampoo (medidas de cada shampoo)
20cm de comprimento
4cm de largura
2cm de altura

A conta seria como?
20 sabonetes e 10 shampoos

enviar as medidas e não o volume!
como fazer esse calculo?

vc me explicando isso ai o resto da pra eu me virar

Edição feita por: carcleo, 25/02/2010, 11:58.


#44 Paulo Freitas

Paulo Freitas

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

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

Posted 25/02/2010, 13:33

1) Sem mão propria, valor declarado ou codigo de reaviso. Faz uma simulação la!
Oura coisa, esta tendo algum problema hoje no site dos correios?
Esta aceitando calcular PAC acima de 30kg e esta retornando tanto sedex quando pac valores que não passam de 15 reais.

Estranho... Quando eu fiz a classe ela retornava as mesmas informações do site. Até mesmo porque é um webservice do próprio Correios. Algo está errado por lá. :(

2) No caso de fazer com float, ele "come" as duas casas decimais

$valor_final = floatval($EncomendasCorreios->Valor) + $preco_total;
Então fiz assim (pode ser? = deu certo!:
$valor_final = number_format(floatval($EncomendasCorreios->Valor), 2, '.', '') + $preco_total;

Ah, entendi, o valor retornado pelo Correios segue o padrão brasileiro... :assobio:

Então fica assim:

$valor_final = floatval(str_replace(',', '.', $EncomendasCorreios->Valor)) + $preco_total;

3)Quanto às medidas,. deixa eu ver se entendi:

No form de cadastro de produtos acrescenta mais 3 campos, (comprimento,altura e largura) para o cliente digitar as medidas de cada produto.
Depois, criar um contador de medidas (do jeito que friz co o peso) para calcular uma medida provavel para a embalagem!
É isso?
Se for, será que encontro um codigo desses ai pronto?

A idéia é essa... Código pronto disso eu já não conheço. :(

4) Me ajuda fazer essa conta:

no caso de um sabonete (medidas de cada sabonete)
5cm de comprimento
2cm de largura
1cm de altura

no caso de um shampoo (medidas de cada shampoo)
20cm de comprimento
4cm de largura
2cm de altura

A conta seria como?
20 sabonetes e 10 shampoos

enviar as medidas e não o volume!
como fazer esse calculo?

Putz brother, aí complica! :blink:

Não sei como poderia ser feito isso de cabeça não... Ou melhor, não sei se tenho cabeça pra fazer isso. :P O xxxxxx é que só isso já gera N possibilidades. Um sistema de inteligência artificial desses não é mole não, é muita areia pro meu caminhãozinho... :(

[]’sAté mais

#45 carcleo

carcleo

    Normal

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

Posted 25/02/2010, 16:52

Então agora só me resta esperar pra ver se algum programador que faz parte do forum (ou o visita) que ja tenha colocado alguma loja virtual com calculo de frete leia esse post e explique para nós como é feito esswe calculo.

Agora Paulo, encontrei um outro codigo para frete que chega mais perto do site dos correios.

vbou deixar o codigo aqui fechando esse post.

Se alguem interessar (for util para alguem) tai!

Obrigado a todos que me ajudaram especialmente a voce Paulo.
<?php

/**
* Executa calculo do frete usando webservice dos correios.
* @copyright  Phaneronsoft
* @author Marcelo Korjenioski - faleconosco@phaneronsoft.com
* @see http://www.phaneronsoft.com
* @filesource correios.php
* @version 1.1
*/

#####################################
# 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       #
#####################################

// 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);

if($_POST) {
// Código do Serviço que deseja calcular, veja tabela acima:
if ($_POST['servico']) {
$cod_servico = $_POST['servico'];
}
// CEP de Origem, em geral o CEP da Loja
$cep_origem = '36855000';
// CEP de Destino, você pode passar esse CEP por GET ou POST vindo de um formulário

$cep_destino = $_POST['cep-destino'];

$cep_destino = eregi_replace("([^0-9])","",$cep_destino);

// URL de Consulta dos Correios
$correios = "http://shopping.correios.com.br/wbm/shopping/script/CalcPrecoPrazo.aspx?StrRetorno=xml&nCdServico={$cod_servico}&nVlPeso=" . PESO . "&sCepOrigem={$cep_origem}&sCepDestino={$cep_destino}&nCdFormato=1&nVlComprimento=" . COMPRIMENTO . "&nVlAltura=" . ALTURA . "&nVlLargura=" . LARGURA;

// 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];
}
}

// Neste exemplo estou colocando apenas PAC e SEDEX
switch ($cod_servico) {
case 41106:
$nome_servico = " PAC ";
break;
case 40010:
$nome_servico = " SEDEX ";
break;
}

// Caso venha valor de resposta é numerio e maior que o custo da embalagem senão ocorreu algum erro na solicitação.
if(is_numeric($total) and ($total > $embalagem)) {
// Quando encontra o valor da postagem, exibe na página formatando em padrão de moeda 10,89
// Caso você não queira formatar basta comentar a linha abaixo que será exibido assim 10.89 e basta executar o comando abaixo
$total = number_format($total,2,',','.');
echo $nome_servico . $total . ' prazo entrega de ' . $PrazoEntrega . ' dia(s) ';
} else {
echo 'Erro ao consultar verifique se CEP esta correto';
}
} else {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="http://demo.phaneronsoft.com/img/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<title>Sistema para Calcular Frete SEDEX e PAC a partir de CEP informado. | Phaneronsoft</title>
<style type="text/css">

* {
font-family:"Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:12px;
font-style:normal;
font-variant:normal;
font-weight:normal;
line-height:normal;
}

body {
background:#FFFFFF none repeat scroll 0 0;
height:100%;
margin:0;
margin-top:20px;
width:100%;
}

div#wrapper {
margin:auto;
position:relative;
width:450px;
z-index:0;
}

.formMain .select {
text-transform:uppercase;
width:99%;
border:1px solid #B6B6B6;
display:block;
}

.formSearch fieldset {
border:1px solid #CCCCCC;
margin:0;
padding:0 10px;
}

.formMain label {
display:block;
float:left;
margin-right:4px;
padding-bottom:5px !important;
}

.formMain legend {
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
padding:10px 5px;
}

.formMain .button {
background:#F5EED3;
border:1px solid #CCCCCC;
color:#666666;
cursor:pointer;
font-size:12px;
font-weight:bold;
letter-spacing:1px;
margin:10px 0 0;
overflow:visible;
text-transform:uppercase;
width:100%;
}

.formMain .inline {
margin:15px 0 0 !important;
}

.formMain .text, .formMain .select, .formMain .textarea, .formMain .password {
border:1px solid #B6B6B6;
display:block;
text-transform:uppercase;
}

.formMain fieldset span.nameField {
color:#666666;
text-transform:uppercase;
}

h3 {
border-bottom:1px solid #F58220;
margin:0;
padding:0;
}

h3 span {
-x-system-font:none;
color:#1E398D;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}

#value {
-x-system-font:none;
color:#9B0000;
font-family:"Legacy Sans ITC TT Bold","Trebuchet MS","Lucida Grande",Verdana,Tahoma,Helvetica,Arial,sans-serif;
font-size:1.5em;
font-style:normal;
font-variant:normal;
font-weight:bold;
line-height:normal;
}
</style>

</head>
<body>
<div id="wrapper">
<h3>
<span>Pesquisa valor de frete</span>

</h3>
<form id="form-pesquisa-repasse" action="" method="post" class="formMain formSearch wsizep100" onsubmit="submitForm(this); return false;">
<fieldset>
<legend>Filtrar Referência</legend>
<label for="servico" class="wsize015">
<span class="nameField">Envio</span>
<select id="servico" name="servico" title="Serviços dos Correios" class="select" tabindex="1">
<option value="41106">PAC</option>
<option value="40010">SEDEX</option>
</select>
</label>
<label class="wsize010" for="cep-destino">
<span class="nameField">CEP Destino</span>
<input id="cep-destino" class="text" type="text" value="" maxlength="9" title="CPF destino" name="cep-destino" tabindex="2"/>
</label>
<label for="pesquisar" class="wsize010">
<input type="submit" id="pesquisar" name="pesquisar" tabindex="3" class="button inline"  value="Pesquisar" />
</label>
</fieldset>
</form>
<span>* Digitar somente número no CEP</span>
<br />
<span id="value"></span>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
function submitForm(form) {
/*
usa método request() da classe Form da prototype, que serializa os campos
do formulário e submete (por POST como default) para a action especificada no form
*/
form.request({
onComplete: function(transport){
/*
se o retorno for diferente de -1, entende-se que não houve problemas, então apaga-se
os campos do formulário usando o método reset() da classe Form
*/

if(transport.responseText !=-1)  {
$('value').innerHTML = transport.responseText;
} else {
form.reset();
$('value').innerHTML = 'Erro ao consultar';
}
}
});
return false;
}

</script>
</body>
</html>
<?php
} // fim else

?>

Edição feita por: carcleo, 25/02/2010, 16:53.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq