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

Orçamento/Carrinho PHP


Vithor

Pergunta

Oi galera!

Bom, é o seguinte: tenho que montar um site que tem uma organização de produtos assim:

Categoria => Subcategoria => Produto

Daí, na página da Subcategoria, por exemplo, de Conectores hidráulicos, há diversos produtos, que são todos conectores hidráulicos, mas por exemplo: Conector hidráulico 1/8, Conector hidráulico 1/6, e assim por diante.

Cada produto, além de um ID (PRIMARY KEY e AUTO_INCREMENT), possui um código (VARCHAR(6)) interno, que é usado pela empresa. Na página da Subcategoria, eu listo todos os produtos da respectiva subcategoria e um campo (input) ao lado de cada um, que deve ser preenchido pelo usuário, e é relativo a quantidade daquele produto (daquela linha) que o usuário quer adicionar no orçamento. Explicando melhor:

Conectores Hidráulicos

|Quantid. | Código | Produto |

==============================

| INPUT | 300001 | Conector Hidráulico de 1/8 |

| INPUT | 300002 | Conector Hidráulico de 1/6 |

...

E assim por diante...

No fim dessa tabela, há um botão "Enviar" para que o usuário adicione os produtos que ele deseja com suas respectivas quantidades a um carrinho. A minha dúvida é em relação a parte da $_SESSION e do $_POST. Primeiramente, como que eu faço para pegar somente as quantidades que foram preenchidas na hora do $_POST? Porque eu estou imaginando aquilo estruturado da seguinte maneira:

<input type="text" name="qtd_0">
<input type="hidden" name="id_0" value="300001">
<input type="hidden" name="nome_0" value="Conector Hidráulico de 1/8">
Certo? Daí, como que eu faço para percorrer todos os campos, uma vez que eu não sei quantos produtos existem naquela subcategoria? (a não ser que eu faça um SELECT do banco de dados, e etc., mas eu acho que há outra maneira de fazer isso, certo?!) A outra questão é: ok, já peguei os valores do $_POST e tudo mais (supondo...). A partir disso, o próximo passo seria adicionar numa $_SESSION, cada campo em cada posição de um "vetor" de $_SESSION, correto? Por exemplo:
$_SESSION["nome"][$contador] = $_POST["nome_".$contador];
$_SESSION["qtd"][$contador] = $_POST["qtd_".$contador];
$_SESSION["id"][$contador] = $_POST["id_".$contador];

Dessa maneira, teriamos algo como $_SESSION["nome"][0], $_SESSION["nome"][1], $_SESSION["nome"][2], tantos quantos fossem os produtos que o usuário adicionou, certo? Mas e a exclusão? Digamos que o usuário resolva excluir um produto dessa lista de orçamento. Como que eu faria para:

1º) Descobrir qual é a posição em que este produto se encontra?

2º) Os elementos que estiverem na frente desse, devem ser deslocados? Por exemplo: tenho $_SESSION["nome"][0], $_SESSION["nome"][1] e $_SESSION["nome"][2] armazenados (e suas respectivas qtdes. e ID's, mas enfim...). Digamos que o usuário resolva remover o item [1]. O item [2] AUTOMATICAMENTE passará a ser indexado de item [1] ou não? Porque, senão, como eu faria na hora de listar? Já que esse vetor passaria a ter só dois elementos, mas um na posição 0 e outro na posição 2?? (O FOR nunca chegaria ao 2º, dado que ele começaria do 0 e, além do 0, só percorreria mais uma posição: o 1, que foi excluído.)

Tá meio confuso, mas eu estarei de olho aqui, qualquer dúvida, só perguntarem...

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Minha dúvida é o seguinte:

Você não tem códigos identificadores? Então use eles assim:

$_SESSION[id] = $_POST[id]
$_SESSION[id][nome] = $_POST[nome]
$_SESSION[id][qtd] = $_POST[qtd]

Um array_search faz o trabalho de saber qual produto vai ser excluído.

;)

Editado por Nelson Senna
Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eu sei!

Mas, a questão é: eu não tenho só UM produto, entendeu? Eu tenho N produtos, um em cada linha, cada um com as 3 informações (id, nome e a quantidade, que é fornecida pelo usuário). Portanto, o meu $_POST, é na verdade um tipo de array. Como que eu percorro esse array SÓ levando em conta os campos preenchidos?

Um problema também é saber se um deles foi preenchido... Digamos que eu tenha uma subcategoria com 20 produtos dentro dela. Como eu faria pra saber se qualquer um dos input's foi prenchido? Já que cada um tem um nome?

Para facilitar o entendimento, vou colocar o link do site para vocês darem uma olhada:

http://www.comercialaleixo.com.br/novo (o site está sendo reformulado...)

Clique em produtos, e escolha a 1ª categoria, em seguida, a 1ª subcategoria (o 1º quadrado da 1ª linha da tabela)

Editado por Vithor
Link para o comentário
Compartilhar em outros sites

  • 0
Sim, eu sei!

Mas, a questão é: eu não tenho só UM produto, entendeu? Eu tenho N produtos, um em cada linha, cada um com as 3 informações (id, nome e a quantidade, que é fornecida pelo usuário). Portanto, o meu $_POST, é na verdade um tipo de array. Como que eu percorro esse array SÓ levando em conta os campos preenchidos?

Mas, pelo que eu entendi a $_SESSION era o seu problema não era?

Da forma que eu postei podem ser N produtos desde que sempre estejam com aquela estrutura.

$_SESSION[$_POST["id1"]]["nome"] = $_POST["nome1"]
$_SESSION[$_POST["id1"]]["qtd"] = $_POST["qtd1"]

Se o problema for o $_POST aí eu vou precisar entender a estrutura do seu formulário.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, vamos ver, eu achei um site que já foi feito aqui pela agência, que é muito similar... estou tentando me basear por ele.

O código abaixo é o que trata o "submit" do formulário.

if(isset($_POST['orcamento_produtos'])) // o isset funciona quando você passa só o nome do formulário? (orcamento_produtos não é um campo, é o nome do formulário)
    {
        echo "<script>alert('entrou');</script>"; // esse alert não é mostrado... por que?!
        $tamanho = $_POST['orcamento_produtos'];
        $size = $_SESSION['produtos_carrinho']; // nunca vi essa sessão antes oO
        
        for($i = 0; $i < $tamanho; $i++) {
            $qtd = $_POST['qtd_'.$i];
            if($qtd != "" && is_numeric($qtd) && $qtd > 0) {
                $id   = $_POST['id_'.$i];
                $nome = $_POST['nome_'.$i];
                if($_SESSION['p_'.$id])
                    $_SESSION['p_'.$id]['qtd'] += $qtd;
                else {
                    $_SESSION['p_'.$id]['qtd'] = $qtd;
                    $_SESSION['p_'.$id]['nome'] = $nome;
                    $size += 1;
                }
            }
        }
        
        $_SESSION['produtos_carrinho'] = $size;    
    }
Depois, eu quero listar isso, daí:
$size = $_SESSION['produtos_carrinho'];                                                
    
        if($size > 0) {
            foreach($_SESSION as $produto => $valor) {
                if(substr($produto, 0, 2) == "p_") {
                    echo "<tr><td>".$_SESSION[$produto]['qtd']." unid.</td><td>".$_SESSION[$produto]['nome']."</td></tr>";
                }
            }
        }

Esses códigos eu meio que peguei desse outro site que já foi feito, claro, fazendo as adaptações necessárias.

Para ver a estrutura do formulário, acesse o site! ----> http://www.comercialaleixo.com.br/novo (clique em Produtos, no menu, depois escolha a 1ª categoria e em seguida, a 1ª subcategoria).

Editado por Vithor
Link para o comentário
Compartilhar em outros sites

  • 0

Descobri o erro: a variável $_POST['orcamento_produtos'] na verdade é o mysql_num_rows() da query inicial, na hora da listagem dos produtos.

Portanto, já está adicionando e exibindo os produtos na lista de orçamento. Resta agora fazer a parte de exclusão, que só vou fazer na segunda-feira, pois por hoje é só!

Na segunda, volto aqui caso haja alguma dúvida na parte de exclusão ou em alguma outra área.

Obrigado!

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...