Jump to content
Fórum Script Brasil
  • 0

Ajuda com foreach


Carlos Rocha
 Share

Question

Pessoal, tenho o array abaixo que é a sessão de um carrinho de compras.

TCarrinho Object
(
    [item_codigo] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_quantidade] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_peso] => Array
        (
            [0] => 3.24
            [1] => 1.50
        )

    [frete_gratis] => Array
        (
            [0] => s
            [1] => s
        )

)

Preciso fazer uma cotação no webservice dos correios para cada produto. Dái, queria pedir a opinião de vocês de como eu poderia fazer isso.

O script do webservice eu já tenho. Anteriormente eu estava somando o peso total e fazendo a consulta de frete do pacote inteiro. Só que agora, vai ter produto que não terá frete e outro terá. Portanto, preciso calular a somatria de todos os fretes.

A ideia é seguinte:

Para cada codigo do array no carrinho, se o item frete_gatis for sim, envia e calcula o frete no webservice dos correios

Array [item_codigo] 1 se [frete_gratis]==s calcula frete

Array [item_codigo] 2 se [frete_gratis]==s calcula frete

Como eu poderia fazer isso?

Edited by Carlos Rocha
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Entendi Serra, minha dificuldade não é essa.

Minha dificuldade é como navegar no array de forma a, para cada código, enviar o peso e calcular no webservice dos correios.

Talvez um foreach. Mas quando faço da classe carrinho um array para o foreach o php diz que não pode fazer da classe um array.

Link to comment
Share on other sites

  • 0

Carrinho de compras

print_r($_SESSION["MeuCarrinho"]);

Esse print, retorna isso

TCarrinho Object
(
    [item_codigo] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_quantidade] => Array
        (
            [0] => 1
            [1] => 3
        )

    [item_peso] => Array
        (
            [0] => 3.24
            [1] => 1.50
        )

    [item_frete_gratis] => Array
        (
            [0] => s
            [1] => s
        )

)
A classe do carrinho
<?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() */
    
    /*
        ObtemPreco
        Este metodo obtem o preço por unidade do produto tendo em mãos o codigo dele.
    */
        function ObtemPreco($codigo)
        {
          @include("global/config/conexao.php");
          $sql_string = "select preco_produtos from produtos where id_produtos =". $codigo;
          $sql = $conexao->query($sql_string);
          list($preco_uni) = $sql->fetch_row();
          $preco_desconto = round($preco_uni-($preco_uni*($_SESSION['desconto_regioes']/100)),2);
          return $preco_desconto;
         }/* ObtemPreco() *
        
    
    /*
        AdicinarItem
        Este metodo adiciona um item no carrinho
    */
    function AdicionarItem($codigo,$quantidade,$peso,$frete_gratis) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
            $this->item_peso[] = $peso;
            $this->frete_gratis[] = $frete_gratis;
        }
    } /* 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);        
            array_splice($this->item_peso, $posicao, 1);        
            array_splice($this->frete_gratis, $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_produtos =";
            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,$preço){
        $posicao = -1;
        $achou = $this->ObtemPosicao($id,$posicao);
        if ($achou) {
            return ($this->item_quantidade[$posicao]*$preço);
        }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 */
?>

Edited by Carlos Rocha
Link to comment
Share on other sites

  • 0

Bom, tentei assim:

foreach($_SESSION["MeuCarrinho"] as $key => $value) 
{
  print "$key => $value\n";
}
Saiu assim:
item_codigo => Array
item_quantidade => Array
item_peso => Array
item_frete_gratis => Array
Daí tentei do jeito abaixo para imprimir tambem o array de cada item mas da erro no foreach de dentro
foreach($_SESSION["MeuCarrinho"] as $key => $value) 
{
  foreach($key as $key2 => $value2) 
  {
      print "$key2 => $value2\n";
  }
}
Esse é o erro que dá:
Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

Warning: Invalid argument supplied for foreach() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\php\chinelospuff.com.br\frete.php on line 14

E agora?

Edited by Carlos Rocha
Link to comment
Share on other sites

  • 0

Tudo que eu preciso saber é o seguinte:

São dois produtos nesse array.

Eles tem 4 atributos garvados no array: codigo, quantidade, peso, frete_gratis.

A validação é a seguinte:

Se o item com o primeiro codigo sa lista, seu frete for gratis, pega a quantidade e multiplica pelo peso e envia esses valores para o correio.

Essa é a dificuldade.

alguém ajuda?

Link to comment
Share on other sites

  • 0

Fiz essa averiguação e parece que deu certo

print "<pre>";
for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
{
  if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
 {
   print "Ok<br />";
 }
 else
 {
   print "Não<br />";
 }
}

Agora é a implemantaçao do frete.

Link to comment
Share on other sites

  • 0

Fiz essa averiguação e parece que deu certo

$total_frete=0.00;

    for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
    {
      if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
     {
      $peso_produto =$_SESSION["MeuCarrinho"]->item_quantidade[$i] * $_SESSION["MeuCarrinho"]->item_peso[$i];
      include ('frete.php');
     }
    }

Agora é a implementação do frete.

Edited by Carlos Rocha
Link to comment
Share on other sites

  • 0

Ficou assim:

$total_frete=0.00;

    for($i=0; $i<$_SESSION["MeuCarrinho"]->QuantosItens(); $i++)
    {
      if($_SESSION["MeuCarrinho"]->item_frete_gratis[$i]=="s")
     {
      $peso_produto =$_SESSION["MeuCarrinho"]->item_quantidade[$i] * $_SESSION["MeuCarrinho"]->item_peso[$i];
      include ('frete.php');
     }
    }
    $valor_final = $total_frete + $_SESSION["preco_total"];
    include ('form_fechamento.php');

Pode fechar o tópico

Obrigado a todos.

Edited by Carlos Rocha
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.8k
    • Total Posts
      648.8k
×
×
  • Create New...