Ir para conteúdo
Fórum Script Brasil
  • 0

Inserir todos os ítens


Carlos Rocha

Pergunta

Pessoal.

Tenho um carrinho de compras simples.

Gostaria de colocar um botão para adicionar uma unidade de todos os produtos de uma só vez no carrinho.

CVomo eu faço?

carrinho.php

<?php
//Verificando se a variavel de sessão foi criada
if (!session_is_registered("MeuCarrinho")){
    session_register("MeuCarrinho");
    $MeuCarrinho = new TCarrinho();
    $_SESSION[MeuCarrinho] = serialize($MeuCarrinho);
    $MeuCarrinho = unserialize($_SESSION[MeuCarrinho]);    
}
    $_SESSION[MeuCarrinho] = serialize($MeuCarrinho);
    $MeuCarrinho = unserialize($_SESSION[MeuCarrinho]);    

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)
            {
                foreach($_POST['quan'] as $numero=>$arquivo)
                {
                                $MeuCarrinho->AdicionarItem($id_prod,$arquivo,$id_lista);

                }
            }
        }
        break;
    case "excluir":
        $MeuCarrinho->RemoverItem($id_prod);
        break;
    case "atualizar":    
        $MeuCarrinho->AtualizarCarrinho($_POST);
        break;
    case "finalizar":
        if ($MeuCarrinho->QuantosItens()>0) {
        echo "<script>document.location='CarrinhoFinal.php?acao=gravar_pedido&preco_total=$preco_total'</script>";
        }
    break;
    }
}
if ($MeuCarrinho->QuantosItens()==0) {
 echo "<table align='center'>
         <tr><td align=center><p><p><h2>Lista Vazia</h2><p><p></td></tr>       
         <tr><td align=center><p><p><a href=pedidos_fazer.php?acao=mostra_produtos><h2>Mostar Produtos</h2></a><p><p></td></tr>
       </table>";
        }
else {
$QuerySQL = "
             select 
               p.id, p.foto, p.nome, p.preço, p.quantidadecaixa, p.grupo, g.nome, p.fornecedor
             from 
               produtos p inner join grupos g on p.grupo = g.id_grupo
               " . $MeuCarrinho->QuerySQL_ObtemListaDeItens(). "";
$Resultado = $MySQL->query($QuerySQL);
?>

<form method="post" action="carrinho.php?op=atualizar">
<table BORDER=0 CELLSPACING=2 CELLPADDING=4 WIDTH="95%" align="center">
<tr BGCOLOR="#0080C0"><td align="center" colspan="9"><b><font color="#FFFFFF">Pedido</font></b></td></tr>
<tr BGCOLOR="#004080">
<td align="center"><b><font color="#FFFF99">Lista</font></b></td>
<td align="center"><b><font color="#FFFF99">Foto</font></b></td>
<td align="center"><b><font color="#FFFF99">Produto</font></b></td>
<td align="center"><b><font color="#FFFF99">Grupo</font></b></td>
<td align="center"><b><font color="#FFFF99">QTD na Caixa</font></b></td>
<td align="center"><b><font color="#FFFF99">PRE&Ccedil;O UNIT&Aacute;RIO</font></b></td>
<td align="center"><b><font color="#FFFF99">Quantidade</font></b></td>
<td align="center"><b><font color="#FFFF99">TOTAL</font></b></td>
<td align="center">&nbsp;</td>
</tr>

<?
$preco_total = 0.00;
while(list($id, $foto, $nome, $preço, $quantidadecaixa, $grupo, $nome_grupo, $fornecedor) = mysql_fetch_row($Resultado)) {
    //Computando preço total
    $preco_total = $preco_total + $MeuCarrinho->ObtemSubTotalDeUmItem($id,$preço);

    session_register("preco_total");

    include("../global/funcoes_php/foto_ver.php");

    echo "
        <tr>
          <td align='center'>".$MeuCarrinho->ObtemListaItem($id)."</td>          
          <td align='center'><font size=-1>". $foto2 ."</font></td>
          <td align='left'><font size=-1>". $nome ."</font></td>
          <td align='left'><font size=-1>". $nome_grupo ."</font></td>
          <td align='center'><font size=-1>". $quantidadecaixa ."</font></td>
          <td align='center'>R$ ". number_format($preço, 2, '.', '')." </td>
          <td align='center'><font size=-1><input type=TEXT name=". $id ." size=2 value=". $MeuCarrinho->ObtemQuantidadeItem($id) ."></font></td>
          <td align='center'>R$ ". number_format($MeuCarrinho->ObtemSubTotalDeUmItem($id,$preço), 2, '.', '') ."</td>          
          <td align='center'><b><a href=carrinho.php?op=excluir&id_prod=$id&id_fornece=$fornecedor>Excluir</a></b></td>
        </tr>
    ";
}
?>  
  <tr><td align="center" colspan="9">
           <font color="#FF0000"><b>VALOR TOTAL DO PEDIDO R$ <?=number_format($preco_total, 2, '.', '');?></b></font></td>
  </tr>
  <tr><td align="center" colspan="9">
           <input type="hidden" name="id_prod" value="<?=$id_produto;?>">
           <input type="hidden" name="id_fornece" value="<?=$id_fornece;?>">
           <input type="hidden" name="id_lista" value="<?=$id_lista;?>">
         <input type="submit" value="Atualizar" name="Atualizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)"><br>
      </td>
  </tr>  
  </table>
    </form>


<table align="center" width="800">
<tr>
    <td align="right">
        <form method="post" action="pedidos_fazer.php?acao=mostra_produtos">
           <input type="hidden" name="id_prod" value="<?=$id_produto;?>">
           <input type="hidden" name="id_fornece" value="<?=$id_fornece;?>">
           <input type="hidden" name="id_lista" value="<?=$id_lista;?>">
           <input type="submit" value="<< Voltar as Compras" name="voltar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)">
        </form>
    </td>
    <td align="left">
        <form method="post" action="carrinho.php?op=finalizar" name='FORM'>
          <input type="hidden" name="id_lista" value="<?=$id_lista;?>">
          <input type="hidden" name="preco_total" value="<?=number_format($preco_total, 2, '.', ''); ?>">
        <input type="submit" value="Finalizar Compra >>" name="Finalizar" WIDTH="78" HEIGHT="20" style="background-color: rgb(0,111,55); color: rgb(255,255,0)">
        </form>    
    </td>
</tr>  
</table>


<? } ?>
TCarrinho.php
<?php
/*
    Classe TCarrinho
*/
class TCarrinho {
var $item_codigo = array();
var $item_quantidade = array();
var $item_lista = 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){
        $Sql = mysql_query("select preço from produtos where id = $codigo");
        list($preco_uni) = mysql_fetch_row($Sql);
        return $preco_uni;
        //return mysql_result($sql,0,0);
         }/* ObtemPreco() *
        
    
    /*
        AdicinarItem
        Este metodo adiciona um item no carrinho
    */
    function AdicionarItem($codigo,$quantidade,$lista) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
            $this->item_lista[] = $lista;            
        }
    } /* 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() */

    /*
        ObtemNovoPrecoItem
        Este metodo obtem o novo preço do ítem baseado no preço calculado antes do carrinho
    */
    function ObtemListaItem($codigo){
        $posicao = -1;
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou) {
            return $this->item_lista[$posicao];
        }else{
            return "erro ao obter Novo Preço do item";
        }
        
    } /* ObtemNovoPrecoItem() */

    /*
        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 */
?>

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Em parte eu consegui.

Porem, agora, esta acontecendo erro de retorno.

Tenho a funçao que adiciona os itens ao carrinho

if (!empty($op)){
    switch ($op) {
    case "adicionar":        
        foreach($_POST['id_prod'] as $numero=>$arquivo)
                {
                  if (!empty($arquivo)){
                      
                      $Query = "select id from produtos where id = $arquivo";
                      $R_Query = $MySQL->query($Query);
                      if (mysql_num_rows($R_Query)>0)
                      {
                                          $MeuCarrinho->AdicionarItem($arquivo,1,$id_lista);
          
                      }
                }
        }
        break;

...

    function AdicionarItem($codigo,$quantidade,$lista) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
            $this->item_lista[] = $lista;            
        }
    } /* AdicionarItem() */
Esta funcionando normal, mas aqui
$MeuCarrinho->AdicionarItem($arquivo,1,$id_lista);
Gravo alem da quantidade 1, o numero da lista em cada produto e uso a função que vai atualizar(e mostrar) no carrinho o numero da lista para cada item.
function ObtemListaItem($codigo){
        $posicao = -1;
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou) {
            return $this->item_lista[$posicao];
        }else{
            return "erro ao obter a lista do item";
        }
    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() */
No carrinho, estou recebendo o valor da lista assim:
echo "
        <tr>
          <td align='center'>".$MeuCarrinho->ObtemListaItem($id)."</td>          
...

Acontece, que em vez de vir o valor da lista como acontece com a item quantidade, aparece o numero 3

Onde será que esta o erro?

Link para o comentário
Compartilhar em outros sites

  • 0

Em parte eu consegui.

Porem, agora, esta acontecendo erro de retorno.

Tenho a funçao que adiciona os itens ao carrinho

if (!empty($op)){
    switch ($op) {
    case "adicionar":        
        foreach($_POST['id_prod'] as $numero=>$arquivo)
                {
                  if (!empty($arquivo)){
                      
                      $Query = "select id from produtos where id = $arquivo";
                      $R_Query = $MySQL->query($Query);
                      if (mysql_num_rows($R_Query)>0)
                      {
                                          $MeuCarrinho->AdicionarItem($arquivo,1,$id_lista);
          
                      }
                }
        }
        break;

...

    function AdicionarItem($codigo,$quantidade,$lista) 
    {
        //Inicializando parametro
        $posicao = -1; 
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if (!$achou){
            $this->item_codigo[] = $codigo;
            $this->item_quantidade[] = $quantidade;
            $this->item_lista[] = $lista;            
        }
    } /* AdicionarItem() */
Esta funcionando normal, mas aqui
$MeuCarrinho->AdicionarItem($arquivo,1,$id_lista);
Gravo alem da quantidade 1, o numero da lista em cada produto e uso a função que vai atualizar(e mostrar) no carrinho o numero da lista para cada item.
function ObtemListaItem($codigo){
        $posicao = -1;
        $achou = $this->ObtemPosicao($codigo,$posicao);
        if ($achou) {
            return $this->item_lista[$posicao];
        }else{
            return "erro ao obter a lista do item";
        }
    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() */
No carrinho, estou recebendo o valor da lista assim:
echo "
        <tr>
          <td align='center'>".$MeuCarrinho->ObtemListaItem($id)."</td>          
...

Acontece, que em vez de vir o valor da lista como acontece com a item quantidade, aparece o numero 3

Onde será que esta o erro?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...